#学习建议:
1.多做笔记
2.多敲命令(将常用命令及选项熟练使用)
3.学习不好根本就是不肯花时间
4.上课多提问
#推荐书籍:
linux命令行与shell脚本编程大全
#网络知识:(网络基础 IP,netmask,网关,dns)
nat
gateway
dns
route
#linux的最重要设计思想: 一切皆文件 (Everything is file!)
基本设备命名:
硬盘:
#sata接口,u盘
/dev/sdX (X=a,b,c,d,e...)
#IDE接口
/dev/hdX (X=a,b,c,d...)
分区: /dev/sdaY(Y=1,2,3,4,5...)
光驱: /dev/cdrom 或 /dev/sr0 sr1 sr2
#分区方式:
#MBR(Master Boot )分区方式(主分区,扩展分区,逻辑分区):
最大只能分4个主分区
最大识别2T硬盘
#GPT(GUID Partition Table)
最大分128个分区
最大识别18EB硬盘
需要系统和主板支持UEFI
#安装系统:
#在安装之前,进BIOS调整启动项(以什么安装方式安装将什么介质设为第一启动项)
安装方式:
1.光盘
*.iso
#u盘
#使用ultraISO安装(只能装一个系统) (MBR&GPT)
1.安装ultraISO,将ISO文件打开,插入u盘,选择启动-->写入硬盘映像---> 写入
2.进BIOS调整启动项,将u盘设为第一启动项(F10保存重启)
3.之后系统安装向导(格式化c盘)
#PE系统
#老毛桃PE(MBR分区)
1.下载PE软件,制作启动u盘
2.将系统安装镜像(iso)拷入u盘
3.调整启动项(u盘),重启
4.进入winpe(pocket edition)系统,windows安装器
root #linux系统超级管理员,无所不能,拥有系统绝对控制权
tty(终端) #TeleTYpewriter(电传式打字机),让用户输入数据,并且显示输出结果的设备
切换到其他终端:
Ctrl+Alt+F1-F7(F1图形化,F2-F6命令行终端)
#linux是一种多任务多用户操作系统
#windows是一种多任务单用户操作系统
不同终端运行的程序独立的
#命令的格式: []代表可选
COMMAND [Options] [Arguments]
pwd #查看当前工作目录(当前目录)
ls (list),列出目录中的内容
#格式
ls [Options] [PATH]
#options: 对命令功能的扩展
#短选项 (-字母)
-a #all,查看所有文件,包括隐藏文件(.开头文件)
-d #directory,查看目录本身
-l #long,长格式显示(文件属性)
--help #查看命令的帮助信息
#长选项 (--单词)
--all
#合并选项
-a -l 或 -al
--all --list
ls #不接路径,代表查看当前目录的内容 = ls .
cd DIR_PATH #change directory,切换工作目录
#cd 回家(家目录) = cd ~
#cd - 回到上一次工作目录
#cd .
#cd .. 回到上一级目录
#特殊目录:
. #当前目录
.. #当前目录的上一级目录
~ #当前用户家目录 ---->/root /home/usr
路径: 用来描述一个文件的位置
#绝对路径:以/开头的路径 (/home/desktop)
#相对路径:相对于当前目录的路径 (../ ./ FILE)
#另外送几个命令
关机
init 0
poweroff
halt
shutdown -h now
重启
reboot
init 6
shutdown -r now
操作系统起源:
#常见的操作系统
Unix:
AIX
HP-UNIX
Solaris
BSD
...
Linux:
RHEL(RedHat Enterprise Linux)
Fedora
CentOS (Comunity ENTerprise Operating System)社区企业操作系统
Debian
Kali
Windows:
DOS
winme
win95
win98
winxp
win7
win8
win10
win2003
win2008
win2012
sun microsystem
操作系统结构:
-----外壳(shell)---其他应用程序--
---------内核(kernel)----------
---------硬件------------------
操作系统起源:
linux
GNU(GNU is Not Unix)
GPL(General Public License)
linux主要分支:
#redhat (rpm,yum )
rhel 6.x, 7.x
centos 6.x 7.x
fedora
#debian (dpkg,apt-get)
debian
ubuntu
kali
#VMware Workstation的用法: (ESXi)
ifconfig [DEVICE] #查看网卡信息
#修改网卡信息:
#ifconfig (临时)
#修改网卡配置文件(永久修改) /etc/sysconfig/network-scrips/ifcfg-XXX(XXX等于网卡名称)
DEVICE=eth0 #设备名称
HWADDR=00:0C:29:78:7C:85 #MAC地址
TYPE=Ethernet #网卡类型
UUID=afebb964-e290-430a-8ed3-bcc679689108 #设备唯一标识符
ONBOOT=yes #网卡是否开机激活
NM_CONTROLLED=no #是否能够被NetworkManager控制(推荐=no)
BOOTPROTO=static #启动协议:none,dhcp,static
IPADDR=x.x.x.x
NETMASK=x.x.x.x
GATEWAY=x.x.x.x
DNS1=x.x.x.x
#修改完后需要重启网络服务:
service network restart
/etc/init.d/network restart
#查看路由表
route -n
#查看dns /etc/resolv.conf
vi,vim #多功能纯文本编辑器
格式:
vi FILENAME
#基本用法:
命令模式: 打开文件的默认模式,其他模式的入口,操作内容(拷贝,删除,粘贴),光标移动(esc返回上一级模式)
#进入编辑模式:
i
a
o
#进入末行模式(!代表强制):
:w #write,保存
:q #quit,退出
:wq 或 :x #write and quit
:q! #不保存退出
编辑模式:
末行模式: 用来操作文件(保存,另存为,打开)
#常用快捷键:
tab #路径补全,命令补全
ctrl+c #中断当前命令的执行
ctrl+a #ahead,光标移到行首
ctrl+e #end,光标移到行尾
3.Software Management(软件管理)
安装格式:
#windows
.exe .msi
#linux
.rpm(redhat) .deb(debian)
软件文件构成:
可执行文件
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin)
配置文件
/etc
库文件(lib)
/lib, /lib64
其他文件(readme.txt,文档,案例等...)
/usr/share/doc
/usr/share/man
ldd #查看可执行文件依赖库的函数
#软件包管理器
RPM(Redhat Package Manager)--> rpm
DPKG(Debian PacKaGe) ---> dpkg
挂载 #将设备与目录关联,访问目录即访问设备
#步骤:
1.创建一个目录(挂载点mount point)
mkdir DIR
2.挂载
mount -t iso9660 /dev/cdrom /media/
文件系统:用来明确文件在分区上组织方法和数据结构
#windows:
ntfs
fat32
#linux
ext2
ext3
ext4
xfs
df #查看文件系统磁盘使用率
#RPM包格式
wireshark - 1.8.10 - 17 . el6 . x86_64 .rpm
#软件名称 - 版本 - 修订号. 适用系统.硬件架构 .rpm
硬件架构:cpu架构
i386
i686
x86_64
arm
sparc
软件管理: rpm
#查询 query
rpm -q 软件名称 #查询某个软件包是否安装
rpm -qa [软件名称] #all,查看所有已安装软件包
rpm -qf #file,通过文件找软件包
rpm -ql 软件名称 #list,查看已经安装软件包的文件列表
rpm -qpl 软件包路径 #查看未安装软件包的文件列表
rpm -qi 软件名称 #information,查看软件包信息
rpm -qpi 软件包路径 #information,查看软件包信息
#安装
rpm -ivh 软件包路径 ... #install(安装),verbose(执行过程信息),hash(以#表示安装进度条)
#升级
rpm -Uvh 软件包路径 #update,升级
#升级内核
rpm -ivh
#卸载
rpm -e 软件名称 #erase
rpm证书: 系统需要导入一个证书,去跟rpm包证书比较,如一致则允许安装
#导入证书:
rpm --import /media/cd/RPM-GPG-KEY-CentOS-6
#作业(在desktop,minimal上都做):
1.用rpm去安装wireshark,并找出wireshark的命令及用法,尝试着用wireshark去抓包
2.安装lftp,ftp工具
YUM(Yellowdog Updater, Modified) #用python写的一个基于rpm的包管理器
URL:统一资源定位符,用于描述资源在互联网中的位置
组成:
协议://域名或ip[资源路径]
#先删除默认仓库配置文件
rm -rf /etc/yum.repos.d/*
在用户端仓库配置文件: /etc/yum.repos.d/*.repo
#vi /etc/yum.repos.d/local.repo
[local] #仓库名称(不能用空格)
name=this is a local repo #仓库描述
baseurl=file:///media/cd #仓库url
gpgcheck=0 #是(1)否(0)检查证书
gpgkey=URL #证书路径
enabled=1 #是(1)否(0)启用此仓库,默认开启
#yum clean all 清除上一个仓库缓存文件
yum操作
#选项:
-y #自动应答,自动yes
#查询
yum repolist #查看仓库列表
yum list #查看仓库软件包列表
yum list installed #查看已经安装的软件包
yum info #查看软件包信息(rpm -qi)
yum provides #等于rpm -qf
#安装
yum install #安装
yum reinstall #重装
#升级
yum update #升级
yum upgrade #升级
#卸载
yum remove #卸载
包组管理
#查询
yum grouplist
#安装
yum groupinstall
#卸载
yum groupremove
#图形化相关包组:
"X Window System" #必装
"Desktop"或 "KDE Desktop" #选一或选二
#Gnome KDE XFCE桌面
#启动图形化:
startx
init 5
#http yum源
[163]
name=this is a 163 repo
baseurl=http://mirrors.163.com/centos/6/os/x86_64/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6
enabled=1
#ftp仓库
baseurl=ftp://10.1.1.251/cdrom/
作业2:
1.使用网易仓库作为yum源,安装wireshark
2.在最小化系统安装图形化桌面,安装图形化的wireshark
(3.使用epel的仓库作为yum源安装nginx)
4.Linux 基础知识
运行级别(runlevel) #用来控制系统启动模式
0 #关机
1 #单用户模式(用于维护,恢复root密码)
2 #无网络功能的多用户模式
3 #全功能多用户模式(命令行模式)
4 #保留
5 #图形化环境
6 #重启
临时切换运行级别:
init N (N=0..6)
永久修改运行级别: /etc/inittab
id:3:initdefault:
#变量
本地变量: 只在当前shell中
变量名=值
环境变量: 在当前shell及其子shell中生效
export 变量名=值
#系统常用环境变量:
PATH #命令的搜索路径
HOME #用户家目录
普通用户:/home/USERNAME
root: /root
PS1 #命令提示字符
#PS1=[\u@\h \W]\$
\u 当前用户名
\h 主机名 (www).baidu.com
\H 主机名 (www.baidu.com)
\W 当前工作目录
\w 当前工作目录绝对路径
\$ 用户提示字符 (普通用户$,root用户#)
\# 下达第几个命令
\t 时间 HH:MM:SS
#小作业: 将自己的提示字符改为如下格式:
"<第几个命令><当前时间>-> "
USER #当前用户名
MAIL #用户邮箱文件路径(/var/spool/mail/USERNAME)
HOSTNAME #主机名
HISTSIZE=10000 #历史记录大小
HISTFILESIZE=10000 #历史记录文件大小
LANG #language,语言编码 (/etc/sysconfig/i18n)
#LANG=zh_CN.UTF-8
#LANG=en_US.UTF-8
history #查看命令历史 (~/.bash_history存放用户命令历史)
!N #执行编号为N的命令
!-N #执行倒数第N跳命令
!String #执行最近以String开头的命令
!! #执行上一条命令
ctrl+r #搜索执行过的命令
#创建用户
useradd USERNAME
#修改用户密码
passwd USERNAME #只能root才能修改所有人密码,普通用户只能改自己的
#切换用户(switch user)
su USERNAME #非登录过程
su -l 或 su - USERNAME #登录过程
#登录过程:
1./etc/profile
2./etc/profile.d
3.~/.bash_profile
4.~/.bashrc
5./etc/bashrc
#非登录过程:
1.~/.bashrc
2./etc/bashrc
sudo #授权用户使用哪些命令
#修改sudo配置文件 /etc/sudoers
格式:
USER WHERE=(WHO) WHAT
bob ALL=(root) ALL
7.Filesystem Hierachy Standard 文件系统层级标准
FHS定义了两层规范:
#一./目录下的文件数据存放规范
dev #设备文件
#block device块设备(硬盘分区,光盘)
#character device字符设备(终端)
/dev/zero #零字符设备
#dd if=/dev/zero of=/tmp/BIGFILE bs=1M count=1024
/dev/null #垃圾桶,吸收任何信息
boot #引导程序相关文件(引导程序,内核等)
#实现系统基本功能命令
bin #binary,系统基本命令(普通用户也可用)
sbin #系统管理相关命令(一般是root用户才能执行)
etc #各种配置文件
rc.d
sysconfig
yum.repos.d
inittab
resolv.conf
fstab #开机自动挂载文件系统
lib #库文件(*.so.*),和内核模块
lib64 #64位库文件
mnt #文件系统临时挂载点
media #可移动介质挂载点(u盘,光盘)
home #普通用户家目录
root #root用户家目录
srv #服务提供的数据文件目录,现已弃用(转移到/var)
lost+found #丢失+查找,保存未来的及保存的文件
opt #第三方软件安装目录,弃用(转移到/usr/local/)
tmp #临时文件
sys #伪文件系统,系统硬件参数映射文件
proc #伪文件系统,内核参数和进程信息文件映射
uptime #运行时间
cpuinfo #cpu信息
meminfo #内存信息(实时变化)
数字(进程号)目录: 进程相关信息
sys #内核参数映射文件
selinux #selinux相关文件
#二./usr,/var目录数据存放规范
/usr
#实现系统扩展功能
bin #基本命令
sbin #管理类命令(一些服务器程序)
include #C头文件
lib #库文件
local #第三方软件默认安装目录
bin
sbin
lib
include
share #结构独立数据
man
doc
/var #可变数据
run #进程运行pid文件
spool/mail #用户邮箱文件
lock #锁文件m
log #日志
messages #系统所有日志
dmesg #内核启动日志
secure #认证信息日志
mail.log #邮件日志
tmp #系统启动时临时文件
#文件管理相关命令
#查看文件内容(文件,类型为目录文件)
文件:
cat FILE ... #合并输出多个文件内容
vim FILE #编译文本文件
head FILE #查看文件的头10行
head -n N FILE
head -N FILE
tail FILE #查看文件的尾10行
more FILE #分屏浏览文件内容
less FILE #分屏浏览文件内容
空格 #向下翻页
b #向上翻页
文件/目录:
ls [Options] [PATH]
#Options:
-a
-l
-d
-h #human-readable,人类可读单位
-R #recursive,递归
#通配符: 在路径中匹配文件名
* #任意个任意字符
? #单个任意字符
[] #匹配字符集
#[12cjfdsa]
#[a-d] [0-9]
#系统规定字符集: 要多套一层中括号[]
[:alpha:] #字母
[:digit:] #数字
[:alnum:] #字母+数字
[:blank:] #空白字符(空格,制表符(tab),换行符)
[:upper:] #大写字母
[:lower:] #小写字母
{} #命令行展开
touch
mkdir
#mkdir -p {baidu,tencent,sina}-{sales,market,tech}
cp
mv
rm
#创建文件:
文件:
vim
touch FILE #如文件存在,修改文件时间戳,不存在则创建空文件
目录:
mkdir -p DIR # -p自动创建父目录
#复制文件: cp
用法:
cp [options] SOURCE... DEST
cp FILE1 FILE2
cp FILE1 FILE2 DIR
cp DIR1 DIR2
#options:
-a #archive归档,保留文件属性
-r|-R #recursive,递归
-f #force,强制
-i #interactive,交互(覆盖之前提示)
-v #verbose,显示命令执行过程信息
#移动文件: mv
用法:
mv FILE1 FILE2 #重命名功能
mv FILE... DIR
mv DIR1 DIR2
#options:
-v #详细过程信息
-f #强制,忽略-i交互
-i
#交互
#删除文件: rm
文件:
rm [options] FILE...
#options:
-r #递归,用于删除目录
-f #强制
-i #交互
-v #详细信息
目录:
rmdir #只能删除空目录
rm -r
作业:
1.清空/tmp目录下的文件,创建目录Redhat,CentOS,Debian,Ubuntu,每个目录下创建4个文件linux1,linux2,linux3,linux4
2.将Redhat目录移动到Ubuntu目录下
3.将CentOS的linux2和linux3移动到Debian目录下并改名为gnu2、gnu3
4.将/boot/grub目录下以数字结尾的所有文件拷贝到/tmp目录下,要求保持其属性信息
5.将/var/log/, 以maillog开头的所有文件拷贝到/tmp/maillog目录下
6.删除/tmp目录所有文件
7.创建几个文件: # * ? ! @ . .. / -
深入ext文件系统
文件系统: 明确文件在分区上组织方法和数据结构
#常见文件系统类型:
windows:ntfs,fat16,fat32等
linux:ext2,ext3,ext4,xfs
#相关术语
superblock #用来存放文件系统整体信息
dumpe2fs /dev/sda1 显示device中文件系统的超级块和块组信息
block #存放实际数据
inode #存放元数据(metadata)
stat FILE 查看文件的元数据
#文件名
#文件大小
#inode编号
#硬链接数
#权限
#类型
#拥有者
#所属组
#时间戳(atime ctime mtime)
#指向block指针
ls -i #查看文件的inode编号
#链接: 一种文件复用,一种是硬连接,一种是软链接或符号链接
ln SOURCE DEST #硬链接(不能对目录做,不能跨文件系统)
-s SOURCE DEST #软链接,快捷方式(无限制)
#命令:
内建(Builtin): cd echo exit export
外部: ls ifconfig
type #查看命令类型
file #查看文件类型
#常见文件类型
- #普通文件
d #目录
b #块设备文件
c #字符设备
l #符号链接
p #pipe,命名管道
s #socket,套接字文件
df #查看文件系统磁盘使用率
-T #Type
-h #human-readable
du #disk usage,文件磁盘使用率
-s #summary,汇总,只输出目录总大小
-h
规划:
在sdb上分5个区,每个区大小为500M,采用MBR分区方式,挂载到/mnt/disk1-5目录,
sdb1采用设备文件方式挂载
sdb2采用uuid方式挂载
sdb3采用label方式挂载
#制作文件系统的步骤
1.(确保硬盘有足够空间,确定分区方式)分区
fdisk -l /dev/sdb
fdisk -cu /dev/sdb
d #删除分区delete a partition
m #查看fdisk帮助
n #新建一个分区,add a new partition
p #显示分区表信息,print the partition table
q #不保存退出quit without saving changes
w #保存并退出write table to disk and exit
t #改变分区系统ID,change a partition's system id
l #列出已知分区类型,list known partition types
#重读分区表
partx -a /dev/sda 两次
2.格式化(制作文件系统)
#mkfs -t FS_TYPE 分区设备文件
mkfs -t ext4 /dev/sda5
mkfs -t ext4 /dev/sda6
mkfs -t ext4 /dev/sda7
mkfs.ext4 /dev/sda5
3.挂载
mount [options] SOURCE MOUNT_POINT
#options:
-a #挂载fstab文件中所有未挂载文件系统
-t #指定挂载设备文件系统类型
-o #option文件系统挂载选项(多个挂载选项用','号隔开):
defaults #默认挂载选项包含(rw, suid, dev, exec,auto, nouser, async, and relatime.)
ro #readonly,只读
rw #read-write,读写
sync #同步
async #异步
dev #解释字符设备和块设备
exec #是否能够执行(execute)
auto #能够被mount -a选项挂载
user #允许普通用户管理文件系统
#其他选项
remount #原子重挂载
loop #挂载本地文件,常用于iso镜像文件挂载
#SOURCE:
设备文件: /dev/sda5
卷标: LABEL=xxx
UUID: UUID=xxxx
#查看设备UUID: blkid 设备路径
#卸载: umount DEVICE/MOUNT_POINT
卸载前提:文件系统不能被其他进程占用
查看文件系统被哪个进制占用: lsof, fuser -av
4.写入配置文件(/etc/fstab)
DEVICE MOUNT_POINT FS_TYPE FS_MOUNT_OPTIONS dump fsck
#/dev/sda5 /mnt/disk5 ext4 defaults 0 0
#UUID=49ede8aa-d8bb-4a59-b436-1f91175e9c94 /mnt/disk6 ext4 defaults 0 0
#/dev/sda7 /mnt/disk7 ext4 defaults 0 0
#如何扩展swap分区
free #查看内存和swap的信息
方
1.分区
fdisk -cu /dev/sda
2.将分区制作成swap分区
mkswap /dev/sda8
3.挂载
swapon /dev/sda8 #挂载
swapon -s #查看swap分区挂载情况
swapoff /dev/sda8 #卸载
4.写入fstab
/dev/sda8 swap swap defaults 0 0
方法2: 使用dd生成大文件
1.用dd生成一个大文件
dd if=/dev/zero of=/root/BIGFILE bs=1M count=1024
2.将文件制作成swap分区
mkswap /root/BIGFILE
3.挂载swap
swapon /root/BIGFILE
4.写入fstab
/root/BIGFILE swap swap defaults 0 0
作业:
1.在sdb上分5个区,每个区大小为500M,采用MBR分区方式,挂载到/mnt/disk1-5目录
sdb1采用设备文件方式挂载
sdb2采用uuid方式挂载
sdb3采用label方式挂载
其他分区随意
2.扩展系统swap分区,分别采用fdisk和dd做,分区大小500M,文件大小500M
9.VI编辑器
特点:
不依赖图形化环境
跨平台(windows,mac,unix,linux)
插件丰富
学习难度大
#三个基本模式:
命令模式:(vi打开文件后所处的默认模式)
#功能:
1.光标移动(大部分命令前可以接数字,代表操作多次)
hjkl #左上下右
w #word,按单词移动到单词首字母
W #word,按空格为标准移动到单词首字母
e #end,按单词移动到单词尾字母
E #word,按空格为标准移动到单词尾字母
b #back,按单词移动,往前移动
B #word,按空格为标准移动,往前移动
0 #绝对的行首
^ #(拖字符)行首(第一个非空字符)
$ #行尾
gg #首行
G #末行
Ngg #第N行
NG #第N行
:N #第N行
2.文本内容操作(复制,剪切,粘贴,撤销,还原)
#格式: [数字]+操作命令+移动命令
y #yank,不能单独使用
5yw
y0
y$
yy #复制当前行
Nyy #复制N行
d #delete,剪切,不能单独使用
dw
5dw
d^
d0
d$
dd #删除当前行
Ndd #删除N行
x #删除当前字符
p #paste,粘贴
P #paste,粘贴
u #undo
ctrl+r #recover
3.其他模式入口
#插入模式(Insert)
a #光标移动到当前位置的下一个位置,进入插入模式
A #光标移动到行末,进入插入模式
i #光标在当前位置进入插入模式
I #光标移动到行首,进入插入模式
o #另起一行进入插入模式
O #在上一行中另起一行进入插入模式
#替换模式(Replace)
r #单次替换
R #进入替换模式
#选择模式(Visual),之后d剪切,y复制
v #进入选择模式
V #进入行选择模式
ctrl+v #进入块选择模式
#窗口模式
ctrl+w,s
ctrl+w,上/下
ctrl+w,o #关闭其他窗口
#末行模式
: #进入末行模式
#搜索模式
/ #进入搜索模式
/STRING
n #跳转到下一个搜索到的内容
N #跳转到上一个搜索到的内容
插入模式:(编辑文件内容)
末行模式:设置vi选项,文件操作(保存,不保存,另存为,打开文件等)
#设置vi选项
:set all #查看vi所有选项
:set ignorecase #忽略大小写(用于搜索功能) set ic
:set number #显示行号 set nu
:set autoindent #自动缩进 set ai
:nohl #关闭高亮显示
:Nd #删除第N行
:N #移动到第N行
:N,Md #删除第N到M行
:[N,M]s/OLD/NEW/gc #搜索和替换 g 全局, c 交互
#文件操作
:w #保存
:w FILE #另存为到文件
:q #退出
:wq #保存并退出
:x #保存并退出
:X #将文件加密
:q! #不保存退出
:e FILE #打开文件
#使vi选项永久生效
vim ~/.vimrc
set nu
set ai
set ic
10.用户-组-权限管理
用户:每一个用户系统分配唯一的id号UID(0~65535),每一个用户必须属于一个基本的组,还可以加入其他组,用户必须设置密码才能登录
#分类
普通用户
uid>=500
系统用户 #用于运行系统进程,不需要登录系统
0
root用户
uid=0
组:每个组系统分配唯一的id号GID,一个组可以有多个成员
#按照uid分类:
普通组
uid>=500
系统组
0
root组
gid=0
#按照作用:
基本组: 每个用户必须要有的组
附加组: 一个可以属于多个附加组
#三个文件
/etc/passwd #存放用户信息
# root : x : 0 : 0 : root : /root : /bin/bash
用户名: 密码 :UID:GID:描述信息:家目录: 登录shell
创建用户:
useradd [options] USERNAME #自动分配uid,gid,自动创建家目录(/home/USERNAME),拷贝配置文件(/etc/skel)到家目录,邮箱文件(/var/spool/mail/USERNAME),创建一个与用户名同名的组做为用户的基本组
#options:
-u UID #指定UID
-g GID #指定基本组的GID
-G GID #指定附加组的GID
-d DIR #指定家目录
-s SHELL #指定用户登录shell
#/bin/bash (默认)
#/sbin/nologin 不允许登录
id [USERNAME] #查看用户信息
id -u #查看uid
id -un #查看当前用户用户名
删除用户: userdel USERNAME #不会删除家目录和邮箱文件
userdel -r USERNAME #同时删除家目录和邮箱文件
修改用户信息: usermod
#对已创建用户修改信息
-u
-g
-G
-s
-d
/etc/group #存放组信息
# root : x : 0 :
组名 : 保留: GID : 组成员
groupadd -g GID GROUPNAME
groupdel GROUPNAME
/etc/shadow #存放密码信息
#root:$6$T2WdGnY0CdckQnBWQe0:17296:0:99999:7:::
passwd USERNAME #修改用户密码(root用户可以修改任何人密码通过passwd USERNAME,普通用户只能修改自己密码通过passwd
echo "密码" | passwd --stdin USERNAME #无交互式修改密码
#用户访问资源,用户对于资源来说有三种访问类型:
进程---> 资源,进程在访问资源时,进程会携带用户的uid和gid和groups的gid,与资源uid和gid对比顺序:
#拥有者(user)
如果进程uid和资源的uid一致,用户是资源的拥有者,赋予用户资源拥有者权限
#所属组(group)
如果进程gid与资源gid一致,说明用户是资源的所属组,赋予用户资源所属组权限
#其他人(other)
如果进程uid和gid都不匹配,说明用户对于资源来说属于其他人,赋予用户其他人权限
chown USER[.GROUP] FILE #即可以改拥有者,又可以改所属组
chgrp GROUP FILE #改文件所属组
#权限(Permission)
#文件
r #readable,可读,可以读取文件内容,cat,vim,more,less
w #writable,可写,可以编辑文件内容
x #excutable,可执行,可以执行文件内容(用于可执行文件)
#目录
r #readable,可读,可以读取目录内容,ls
w #writable,可写,可以修改目录内容,rm,mv,rename,touch等
x #excutable,可执行,可以进入目录, cd rm cp
ls -l #查看文件属性
rw- r-- r--
拥有者 所属组 其他人
chmod #修改权限(只能root用户操作,普通用户只能改属于自己的文件)
#字符表示法:
chmod FILE
u + r
g - w
o = x
a s|t
#chmod u+x FILE
#chmod g+w FILE
#chmod u=rwx FILE
#chmod a+x FILE = chmod ugo+x FILE
#数字表示法
r w x 十进制
0 0 0 --- 0
1 1 1 rwx 7
chmod 777 FILE #rwx rwx rwx
chmod 664 FILE #rw- rw- r--
umask #权限掩码,控制用户去创建文件和目录的默认权限
#用户去创建文件的默认权限: 原始权限-umask=默认权限(不要用数字相减)
文件的原始权限: 666 rw- rw- rw-
普通用户umask: 002 --- --- -w-
664 rw- rw- r--
root用户umask: 022 --- -w- -w-
644
umask=033 --- -wx -wx
#用户创建目录的默认权限:
目录的原始权限: 777 rwx rwx rwx
普通用户umask: 002 --- --- -w-
775 rwx rwx r-x
root用户umask: 022 --- -w- -w-
755
#特殊权限:
suid(set uid) #(只能对可执行文件),使用户可以临时取得文件拥有者的权限
sgid(set gid)
#(对可执行文件)使用户临时取得文件所属组的权限
#(对目录)则用户在此目录中创建的文件所属组为此目录的所属组
sbit(sticky bit) #黏贴位(只能对目录做),在目录下,用户无法删除其他用户文件
#扩展权限(Access Control List):设置特定用户权限
getfacl #查看
setfacl -m u:USER:PERM #设置
setfacl -x u:USER #删除扩展权限