1.4 linux基础(四)
1.4 linux基础(四)
- 1.4 linux基础(四)
- 1.4.1 ls命令
- 1.4.2 创建空文件和刷新时间(touch)
- 1.4.3 复制文件和目录cp
- 1.4.4修改配置文件
- 1.4.5 rm 删除文件和目录
- 1.4.6 tree 显示目录树
- 1.4.7 mkdir 创建目录
- 1.4.8 rmdir 删除空目录
- 1.4.9 索引节点inode
- 1.4.10 硬链接
- 1.4.11 软链接(符号链接)
- 1.4.12 确定文件内容file
- 1.4.13 标准输入和输出
- 1.4.14 Linux给程序提供三种I/O设备
- 1.4.15 I/O重定向:改变默认位置
- 1.4.16 支持的操作符号包括:
- 1.4.17 tr命令
- 1.4.18 管道
- 1.4.19 与用户和组相关的一些配置文件说明
- 1.4.20 密码的复杂性策略
- 1.4.21 文件操作 vipw,vigr
- 1.4.22 用户创建:useradd
- 1.4.23 新建用户的相关文件和命令
- 1.4.24 用户属性修改usermod
- 1.4.25 删除用户userdel
- 1.4.26 查看用户相关的ID信息
- 1.4.27 切换用户或以其他用户身份执行命令su
- 1.4.28 设置密码passwd
- 1.4.29 修改用户密码策略chage
- 1.4.30 用户相关的其它命令
- 1.4.31 创建组groupadd
- 1.4.32 组属性修改:groupmod
- 1.4.33 组密码:gpasswd
- 1.4.31 更改和查看组成员groupmems
- 1.4.32 修改文件的属主和属组chown
- 1.4.33 文件权限
- 1.4.34 修改文件权限chmod
- 1.4.35 新建文件和目录的默认权限umask
- 1.4.36 Linux文件系统上的特殊权限
- 1.4.37 可执行文件SUID权限
- 1.4.38 可执行文件上SGID权限
- 1.4.39 目录上的SGID权限
- 1.4.40 Sticky:沾滞位
- 1.4.41 访问控制列表ACL
1.4.1 ls命令
-
ls列出当前目录的内容或指定目录
-
功能:列出当前目录的内容或指定目录
-
用法:ls [options][files_or_dirs]
-
选项:
-
ls -a 包含隐藏文件
-
ls -l 显示额外的信息
-l:长格式
文件类型:
-:普通文件 (f)
d: 目录文件
b: 块设备文件 (block)
c: 字符设备文件 (character)
l: 符号链接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
文件权限:9位,每3位一组,每一组:rwx(读,写,执行), r--
文件硬链接的次数
文件的属主(owner)
文件的属组(group)
文件大小(size),单位是字节
时间戳(timestamp):最近一次被修改的时间
访问:access
修改:modify,文件内容发生了改变
改变:change,metadata,元数据
-
ls -R 目录递归通过
-
ls -ld 目录和符号链接信息
-
ls -1 文件分行显示
-
ls –S 按从大到小排序
-
ls –t 按mtime排序
-
ls –u 配合-t选项,显示并按atime从新到旧排序
-
ls –U 按目录存放顺序显示
-
ls –X 按文件后缀排序ls
-
ls -h:做单位转换一般与-lh一起用
-
ls -a: 显示以.开头的隐藏文件
. 表示当前目录
.. 表示父目录 -
ls A:显示所有隐藏文件但不显示.和..
-
ls -d: 显示目录自身下的目录,不递归显示子目录下的内容
-
ls -i: index node, inode索引节点号
-
ls -r: 逆序显示
-
ls -R: 递归(recursive)显示
实验:只显示隐藏文件
ls -I "[^.]*" -a
ls -d .*
ls -d .[^.]* ##tips:.*包括了..可能连带父目录都显示
1.4.2 创建空文件和刷新时间(touch)
-
三个时间戳:
-
access time:访问时间,atime,读取文件内容
-
modify time: 修改时间, mtime,改变文件内容(数据)
-
change time: 改变时间, ctime,元数据发生改变
-
touch命令:文件不存在就创建空文件,存在就刷新时间戳
-
touch [OPTION]... FILE...
-
-a 仅改变 atime和ctime
-
-m 仅改变 mtime和ctime
-
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的时间戳 -
-c 如果文件不存在,则不予创建。只是用来刷新时间,并不创建新文件。
[root@CentOS7 ~]# touch `date -d '-1 day' +%F `.log
[root@CentOS7 ~]# touch $(date -d '-2 day' +%F ).log
[root@CentOS7 ~]# ls
2018-07-24.log bigfile Documents Music Pictures test.txt txt
2018-07-25.log cmd.session Downloads n Public time.log Videos
a.txt Desktop initial-setup-ks.cfg passwd.txt Templates tree
[root@CentOS7 ~]#
1.4.3 复制文件和目录cp
-
cp [OPTION]... [-T] SOURCE DEST
-
cp [OPTION]... SOURCE... DIRECTORY
-
cp [OPTION]... -t DIRECTORY SOURCE...
-
cp SRC DEST
-
1.SRC是文件:
-
如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
-
如果目标存在:
如果DEST是文件:将SRC中的内容覆盖至DEST中基于安全,建议为cp命令使用-i选项
如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
-
-
2.SRC...:多个文件
DEST必须存在,且为目录,其它情形均会出错;
-
3.SRC是目录:此时使用选项:-r
## 如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DES
[root@CentOS7 ~]# cp -r /etc/profile.d /data/profile.d.bak ##复制profile.d 到/data目录下并重命名为profild.d.bak
## 如果DEST存在:则将SRC目录
[root@CentOS7 ~]# cp -r /etc/profile.d /data/profile.d.bak ##在次执行,将把/etc/profile.d目录放入/data/profile.d.bak目录下
[root@CentOS7 ~]# cp -r /etc/profile.d /data/profile.d.bak ##提示是否覆盖
## 如果DEST存在,但是是一个文件:报错
## 如果DEST存在,是一个目录:将把SRC目录放入DEST目录下,做为子目录
[root@CentOS7 ~]# cp -r /etc/profile.d /data/profile.d.bak ##profile.d.bak是个目录,将/etc/profile.d目录放入/data/profile.d.bak,做为profile.d.bak目录的子目录
[root@CentOS7 ~]# ls /data/profile.d.bak
profile.d
cp常用选项
-
-i:覆盖前提示 –n:不覆盖,注意两者顺序
-
-r, -R: 递归复制目录及内部的所有内容
-
-a: 归档,相当于-dR --preserv=all
-
-d:--no-dereference --preserv=links 不复制原文件,只复制链接名
-
-p: 等同--preserv=mode,ownership,timestamp
-
-v: --verbose
-
-f: --force
-
-u:--update 只复制源比目标更新文件或目标不存在的文件
-
--backup=numbered 目标存在,覆盖前先备份加数字后缀
-
--preserv[=ATTR_LIST]
-
mode: 权限
-
ownership: 属主属组
-
timestamp:
-
links
-
xattr
-
context
-
all
-
练习
1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
ls /var/l*[[:digit:]]*[[:lower:]]
2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
ls /etc/[[:digit:]]*[^[:digit:]]
3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
ls /etc/[^[:alpha:]][[:alpha:]]*
4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
ls /etc/rc[0-6]*
5、显示/etc目录下,所有以.d结尾的文件或目录
ls -d /etc/*.d
6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
ls -d /etc/[mnrp]*.conf
7、只显示/root下的隐藏文件和目录
ls -d /root/.*
ls -d /root/.[^.]*
8、只显示/etc下的非隐藏目录
ls -d /etc/[^.]*/
9、定义别名命令baketc,每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见
cp -av /etc/ /data/backup`date +%F `
10、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
cp -a /root/ /data/rootdir
1.4.4修改配置文件
- 最好在/etc/profile.d/
- 建立一个zhu.sh后缀的文件 然后用. zhu.sh 或者 source zhu.sh
- cdrom 代表光盘,是光盘的快捷方式
1.4.5 rm 删除文件和目录
-
rm [OPTION]... FILE...
-
常用选项:
-
-i 交互式
-
-f 强制删除
-
-r 递归删除目录以及目录下的所有文件
-
--no-preserve-root 删除/
-
alias rm=' mv -t /trash '
-
1.4.6 tree 显示目录树
-
-d: 只显示目录
-
-L level:指定显示的层级数目
-
-P pattern: 只显示由指定pattern匹配到的路径
1.4.7 mkdir 创建目录
-
-p: 存在于不报错,且可自动创建所需的各目录
-
-v: 显示详细信息
-
-m MODE: 创建目录时直接指定权限
1.4.8 rmdir 删除空目录
-
-p: 递归删除父空目录
-
-v: 显示详细信息
-
rm -r 递归删除目录树
练习题 :
(1) 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
[root@CentOS7 ~]# mkdir -pv /testdir/dir1/{x/{a,b},y/{a,b}}
mkdir: created directory ‘/testdir’
mkdir: created directory ‘/testdir/dir1’
mkdir: created directory ‘/testdir/dir1/x’
mkdir: created directory ‘/testdir/dir1/x/a’
mkdir: created directory ‘/testdir/dir1/x/b’
mkdir: created directory ‘/testdir/dir1/y’
mkdir: created directory ‘/testdir/dir1/y/a’
mkdir: created directory ‘/testdir/dir1/y/b’
(2) 如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b
[root@CentOS7 ~]# mkdir -pv /testdir/dir2/{x/{a,b},y}
mkdir: created directory ‘/testdir/dir2’
mkdir: created directory ‘/testdir/dir2/x’
mkdir: created directory ‘/testdir/dir2/x/a’
mkdir: created directory ‘/testdir/dir2/x/b’
mkdir: created directory ‘/testdir/dir2/y’
(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
[root@CentOS7 ~]# mkdir -pv /testdir/dir{3,4,5/dir{6,7}}
mkdir: created directory ‘/testdir/dir3’
mkdir: created directory ‘/testdir/dir4’
mkdir: created directory ‘/testdir/dir5’
mkdir: created directory ‘/testdir/dir5/dir6’
mkdir: created directory ‘/testdir/dir5/dir7’
1.4.9 索引节点inode
-
inode(index node):每个文件有对应的inode,inode是同一个分区下文件的的标识,具有唯一性。不同分区文件的inode可能相同,但是不一定是同一文件。同一分区inode相同,必是同一文件。同一文件的inode相同,文件名可以不同(相当于人的名字,同一国家的一个人可以有多个名字(小名),但是只有一个身份证号,不同国家(分区)身份证号(inode)可能相同,但是不是同一个人)
-
表中包含文件系统所有文件列表
-
一个节点 (索引节点)是在一个表项,包含有关文件的信息( 元数据 ),包括:
文件类型,权限,UID,GID,链接数(指向这个文件名路径名称个数),该文件的大小和不同的时间戳,指向磁盘上文件的数据块指针,有关文件的其他数据 -
文件引用一个是 inode号
-
是通过文件名来引用一个文件
-
一个目录是目录下的文件名和文件inode号之间的映射
-
cp和inode
CP的命令:
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件 -
mv和inode
如果mv命令的目标和源在相同的文件系统,使用mv 命令会用新的文件名创建对应新的目录项,删除旧目录条目对应的旧的文件名,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
如果目标和源在一个不同的文件系统, mv相当于cp和rm
1.4.10 硬链接
硬链接
-
创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增
删除文件时:
rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区 -
语法:
-
ln filename [linkname ]
1.4.11 软链接(符号链接)
-
一个符号链接指向另一个文件
ls - l的显示链接的名称和引用的文件
一个符号链接的内容是它引用文件的名称
可以对目录进行
可以跨分区
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数; -
语法:
-
ln -s filename [linkname]
用绝对路径或者是相对路径
面试题:硬链接和软链接的区别
-
A是B的硬链接 A是B的软链接
-
a.硬链接A和B共用一个inode号,是相同的文件,只是文件名不同而已。而软链接的inode号不同,不是同一文件,有各自的inode号。
-
b.硬链接:不可以对目录进行硬链接
-
软链接:可以对目录进行软链接
-
c.硬链接:不可以跨文件系统,只能对同一文件系统中的文件进行硬链接。软链接:可以跨文件系统,能对不同文件系统中的文件进行软链接。
-
d.硬链接: 不可以对不存在的文件进行硬链接
软链接:可以对不存在的文件进行软链接,A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
-
e.硬链接:rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。对B进行硬链接,节点链接数会增加1个
软链接:如果A的inode节点链接数为1,rm
A删除的是A这个文件。对对B进行软链接,节点链接数不会增加 -
f.硬链接:两个文件的大小相同
软链接:A的大小由B路径决定
1.原理上
硬链接(hard link):
A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。目录的硬链接次数默认是2
软链接(soft link):
A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接
2.使用限制上:
硬链接:
a.不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的".."除外,这个系统可以识别出来),存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数)
b:不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下。
c:不能对不存在的文件创建硬链接,由原理即可知原因
软链接:
a.可以对目录创建软链接,遍历操作会忽略目录的软链接。
b:可以跨文件系统
c:可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了
面试题:描述 mv f1 /dir2/f2 和ln f1 /dir2/f2的底层原理有何差别
1.如果f1和/dir2/f2属于同一文件系统,mv相当于用新的文件名f2创建对应新的inode目录项,删除旧目录条目对应的旧的文件名,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动
1.4.12 确定文件内容file
-
文件可以包含多种类型的数据
-
检查文件的类型,然后确定适当的打开命令或应用程序使用
-
file [options]
...
常用选项: -
-b 列出文件辨识结果时,不显示文件名称
-
-f filelist 列出文件filelist中文件名的文件类型
-
-F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
-
-L 查看对应软链接对应文件的文件类型
-
--help 显示命令在线帮助
1.4.13 标准输入和输出
-
程序:指令+数据
-
读入数据:Input
-
输出数据:Output
-
打开的文件都有一个fd: file descriptor
(文件描述符)
[root@CentOS7 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 93782 0.1 0.3 151216 4868 pts/ 0S+ 12:46 0:00 vim na
root 94068 0.0 0.0 0 0 ? S 12:46 0:00 [kworker/0:0]
root 94368 2.8 0.3 160888 5580 ? Ds 12:46 0:00 sshd: root@pts/1
root 94418 0.5 0.1 116224 2888 pts/1 Ss 12:46 0:00 -bash
root 94436 0.1 0.4 345984 6392 ? Sl 12:46 0:00 /usr/sbin/abrt-dbus -t133
root 94711 0.0 0.1 155324 1864 pts/1 R+ 12:46 0:00 ps aux
[root@CentOS7 ~]# cd /proc
[root@CentOS7 proc]# ls
[root@CentOS7 proc]# cd 93782
[root@CentOS7 93782]# ls
attr comm fd map_files
[root@CentOS7 93782]# cd fd
[root@CentOS7 fd]# ls
0 1 2 3
1.4.14 Linux给程序提供三种I/O设备
-
标准输入(STDIN)-0 默认接受来自键盘的输入
-
标准输出(STDOUT)-1 默认输出到终端窗口
-
标准错误(STDERR)-2 默认输出到终端窗口
1.4.15 I/O重定向:改变默认位置
-
把输出和错误重新定向到文件
-
STDOUT和STDERR可以被重定向到文件
-
命令 操作符号 文件名
1.4.16 支持的操作符号包括:
-
> 把STDOUT重定向到文件
-
2> 把STDERR重定向到文件
-
&> 把所有输出重定向到文件
-
> 文件内容会被覆盖
-
set –C 禁止将内容覆盖已有文件,但可追加
-
>| file 强制覆盖
-
set +C 允许覆盖
-
>> 原有内容基础上,追加内容
-
2> 覆盖重定向错误输出数据流
-
2>> 追加重定向错误输出数据流
-
标准输出和错误输出各自定向至不同位置
-
COMMAND > /path/to/file.out 2>
/path/to/error.out -
合并标准输出和错误输出为同一个数据流进行重定向
-
&> 覆盖重定向
-
&>> 追加重定向
-
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
-
COMMAND >> /path/to/file.out 2>&1
-
():合并多个程序的STDOUT
-
( cal 2007 ; cal 2008 ) > all.txt
1.4.17 tr命令
-
tr 转换和删除字符
-
tr [OPTION]... SET1 [SET2]
-
选项:
-
-c –C --complement:取字符集的补集
-
-d --delete:删除所有属于第一字符集的字符
-
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
- [:alnum:]:字母和数字
- [:alpha:]:字母
- [:digit:]:数字
- [:lower:]:小写字母
- [:upper:]:大写字母
- [:punct:]:标点符号
- [:space:]:空白字符
- [:cntrl:]:控制(非打印)字符
- [:xdigit:]:十六进制字符
- [:graph:]:图形字符
- [:print:]:可打印字符
从文件中导入STDIN
-
使用<来重定向标准输入
某些命令能够接受从文件中导入的STDIN -
tr ‘a-z’ ‘A-Z’< /etc/issue
该命令会把/etc/issue中的小写字符都转换成写写字符 -
tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符
-
cat 通过重定向实现交互式输入
- cat > file
- mage
- wangxiaochun
- 按ctrl+d离开,可以使用文件来代替键盘的输入
-
Cat > filea < fileb
-
把多行发送给STDIN
-
使用“<<终止词”命令从键盘把多行重导向给STDIN
直到 终止词 位置的所有文本都发送给STDIN
mail -s "Please Call" admin@magedu.com <\<END
> Hi Wang,
>
> Please give me a call when you get in. We may need
> to do some maintenance on server1.
>
> Details when you're on-site
> Zhang
> END
-
命令> 显示输出的路径 既可已不再本窗口输出或者输出到其他定义路径的文件里。
-
命令2> 显示输出的路径 是将错误的信息输出到指定的文件路径下。
-
一个>的情况下再次输入信息将会覆盖上次的文件信息,所以用>>则是追加信息而不是覆盖。
-
如果一条命令既有对的输出也有错的的输出,将他们分别输出到不同的文件里
-
例如; ls hergh /data >f1 2>f2这条命令里将对的输出到f1中,错的输出到f2中。
-
如果将一条命令对的和错的都放到一个文件里
-
例如; ls hergh /data >f1 2>&1 这条命令就是将对的放到f1 中 ,错的放到对的里,输出到f1中。(或用&>f1)不用管顺序了。
-
两条命令整体重定向(ls pwd)>f1 如果不想看到执行结果可以定向到 /dev/null 相当于垃圾箱。
1.4.18 管道
-
管道(使用符号“|”表示)用来连接命令
-
命令1 | 命令2 | 命令3 | …
-
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
-
STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
-
最后一个命令会在当前shell进程的子shell进程中执行用来
-
组合多种工具的功能
ls | tr 'a-z' 'A-Z'
- less :一页一页地查看输入
ls -l /etc | less
-
mail: 通过电子邮件发送输入
echo "test email" | mail -s "test" user@example.com -
lpr:把输入发送给打印机
echo "test print" | lpr -P printer_name
-
管道中 - 符号
-
示例:
将 /home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,经过管道后,将 tar -cvf - /home 传送给后面的 tar -xvf - , 后面的这个 - 则是取前一个命令的 stdout, 因此,就不需要使用临时file了
tar -cvf - /home | tar -xvf -
1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
[root@CentOS7 fd]# tr 'a-z' 'A-Z' </etc/issue >/tmp/issue.out
[root@CentOS7 fd]# cat /tmp/issue.out
THE TTY IS \L
THE HOSTNAME IS \N
THE CURRENT TIME IS \T
\S
KERNEL \R ON AN \M
2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
[root@CentOS7 ~]# who| tr "a-z" "A-Z" >/tmp/who.out
[root@CentOS7 ~]# cat /tmp/who.out
ROOT PTS/0 2018-07-26 11:11 (192.168.110.1)
ROOT PTS/1 2018-07-26 12:46 (192.168.110.1)
ZHU :0 2018-07-24 14:40 (:0)
ROOT :1 2018-07-24 14:41 (:1)
3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,The system version is here,please help me to check it ,thanks!
操作系统版本信息
[root@CentOS7 ~]# mail -s help root <<EOF
> Hello,I am $USER,the system version is here,please help me to check it,thanks!
> `cat /etc/centos-release`
> EOF
[root@CentOS7 ~]# mail
3 ##d第三封邮件
r ##读
root@CentOS7.5.zhu.com (root) wrote:
> Hello,I am hostname,The system version is here,please help me to check ist,thanks!
> CentOS Linux release 8.5.1804 (Core)
> EOF
4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
ls |tr '\n' ' '
5、计算1+2+3+..+99+100的总和
echo {1..100}|tr ' ' '+'|bc
6、删除Windows文本文件中的‘^M’字符
tr -d '\15' win.txt
7、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格
[root@CentOS7 ~]# echo "t.,l 1 jr#bcmn 2 c*/fe 3 uz 4"|tr -dc '[:digit:][:space:]'
1 2 3 4
8、将PATH变量每个目录显示在独立的一行
[root@CentOS7 ~]# echo $PATH | tr ':' '\n '
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
9、将指定文件中0-9分别替代成a-j
[root@CentOS7 ~]# cat /data/test1.txt
1 2 3 4 5 6 7 8 9
[root@CentOS7 ~]# tr '0-9' 'a-j' </data/test1.txt
b c d e f g h i j
10、将文件/etc/centos-release中每个单词(由字母组成)显示在独立的一行,并无空行
[root@CentOS7 ~]# cat /etc/centos-release
CentOS Linux release 8.5.1804 (Core)
[root@CentOS7 ~]# cat /etc/centos-release |tr -c '[:alpha:]' ' ' | tr -s ' ' '\n'
CentOS
Linux
release
Core
1.4.19 与用户和组相关的一些配置文件说明
Linux用户和组的主要配置文件:
- /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
[root@CentOS7 ~]# whatis passwd
[root@CentOS7 ~]# man 5 passwd
[root@CentOS7 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
##7个字段-->>用户名:密码:UID:GID: 用户详细说明信息:用户的家目录:用户默认shell
[root@CentOS7 ~]# getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
##/sbin/nologin为非登录式shell(系统启动时自动运行为系统提供服务的)
[root@CentOS7 ~]# getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin
##getent passwd [username] 这个命令相当于cat /etc/passwd 查看passwd这个配置文件的信息
- /etc/group:组及其属性信息
[root@CentOS7 ~]# cat /etc/group
root:x:0:gentoo
bin:x:1:apache,gentoo
daemon:x:2:apache
sys:x:3:
-
四个字段
- 组名:组密码:组id:以当前组为附加组的用户列表
-
/etc/shadow:用户密码及其相关属性
[root@CentOS7 ~]# cat /etc/shadow root:$6$U6Zoot9U$y05jBW1HzBvF//nGN5rMQBgZ2nkVoDboceRd5KLUh1d4mpI5JllMOZUDPD/QihjiuVXrTPrK3
GRGy/yEyEHUf/:17737:0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::
adm:*:17632:0:99999:7:::
lp:*:17632:0:99999:7:::
sync:*:17632:0:99999:7:::
shutdown:*:17632:0:99999:7:::
halt:*:17632:0:99999:7:::
gentoo:!!:17739:0:99999:7:::
[root@CentOS7 ~]# getent shadow zhu
zhu:$6$t0LJMq7.:17721:0:99999:7:::
9个字段
- 第1个字段 用户名zhu
-
第2个字段加了密的密码 $6$t0LJMq7. (口令处的叹号表示没有密码被锁定) $为分隔符 6表示加密算法 $t0LJMq7.: 表示salt,盐为随机生成的64位随机数
-
第3个字段 17721表示上一次口令更改的时间到1970年经过的天数3(从1970年1月1日到我们修改口令所过的天数)17721*86400=1531094400秒
[root@CentOS7 ~]# date -d @1531094400
Mon Jul 9 08:00:00 CST 2018 ##(2018年7月9日)
-
第4个字段 0 表示最小口令有效期 (如果是3 ,口令改完以后3天之内不能改口令,为0就是随时可以改)
-
第5个字段 99999 密码口令的最大有效期 (如果是30 意思就是从上次修改密码过30天,就过期,过期下次登录就必须改口令)
-
第6个字段 7 密码警告时间段 (密码到过期时,提前7天提醒用户,要改口令)
-
第7个字段为空,如果为3的话,意思就是密码的宽限期,密码到期后3天内可以用旧密码修改,超过3天就禁止登录
-
第八个字段 账户的过期时间 比如6个月 ,账户6个月就过期
用户名:加了密的密码:最近一次更改密码的日期:密码口令的最小有效期:密码口令的最大有效期:密码警告时间段:密码宽限期:账户过期时间:保留字段
- /etc/gshadow:组密码及其相关属性
[root@CentOS7 ~]# cat /etc/gshadow
root:::gentoo
bin:::apache,gentoo
daemon:::apache
sys:::
adm:::
-
四个字段
- 第一个:组名
- 第二个 组密码
- 第三个 组管理员或者root
- 第四个 :以当前组为附加组的用户列表和/etc/group 的最后一个字段相同
-
/etc/skel 新建用户时,家目录默认的模板文件
[root@CentOS7 ~]# ll -a /etc/skel
total 24
drwxr-xr-x. 3 root root 78 Apr 11 12:59 .
drwxr-xr-x. 140 root root 8192 Jul 27 21:10 ..
-rw-r--r--. 1 root root 18 Apr 11 08:53 .bash_logout
-rw-r--r--. 1 root root 193 Apr 11 08:53 .bash_profile
-rw-r--r--. 1 root root 231 Apr 11 08:53 .bashrc
drwxr-xr-x. 4 root root 39 Jul 18 17:28 .mozilla
[root@CentOS7 ~]# mkdir /etc/skel/newfile
[root@CentOS7 ~]# ll -a /etc/skel
total 24
drwxr-xr-x. 4 root root 93 Jul 27 21:18 .
drwxr-xr-x. 140 root root 8192 Jul 27 21:10 ..
-rw-r--r--. 1 root root 18 Apr 11 08:53 .bash_logout
-rw-r--r--. 1 root root 193 Apr 11 08:53 .bash_profile
-rw-r--r--. 1 root root 231 Apr 11 08:53 .bashrc
drwxr-xr-x. 4 root root 39 Jul 18 17:28 .mozilla
drwxr-xr-x. 2 root root 6 Jul 27 21:18 newfile
[root@CentOS7 ~]# useradd user1
useradd: user 'user1' already exists
[root@CentOS7 ~]# userdel -r user1
[root@CentOS7 ~]# useradd user1
[root@CentOS7 ~]# ll -a /home/user1
total 16
drwx------. 4 user1 user1 93 Jul 27 21:19 .
drwxr-xr-x. 31 root root 4096 Jul 27 21:19 ..
-rw-r--r--. 1 user1 user1 18 Apr 11 08:53 .bash_logout
-rw-r--r--. 1 user1 user1 193 Apr 11 08:53 .bash_profile
-rw-r--r--. 1 user1 user1 231 Apr 11 08:53 .bashrc
drwxr-xr-x. 4 user1 user1 39 Jul 18 17:28 .mozilla
drwxr-xr-x. 2 user1 user1 6 Jul 27 21:18 newfile
当不小心删除了test2用户的家目录的时候,
cp -r /etc/skel/. /home/test2(注意权限)
-
/etc/login.defs 创建用户时的一些规划,比如创建用户时,是否需要家目录,UID和GID的范围;用户的期限,口令的有效期
-
/etc/shadow
- 登录用名
- 用户密码:一般用sha512加密
- 从1970年1月1日起到密码最近一次被更改的时间
- 密码再过几天可以被变更(0表示随时可被变更)
- 密码再过几天必须被变更(99999表示永不过期)
- 密码过期前几天系统提醒用户(默认为一周)
- 密码过期几天后帐号会被锁定
- 从1970年1月1日算起,多少天后帐号失效
1.4.20 密码的复杂性策略
- 使用数字、大写字母、小写字母及特殊字符中至少3种
- 足够长
- 使用随机密码
- 定期更换,不要使用最近曾经使用过的密码
1.4.21 文件操作 vipw,vigr
[root@CentOS7 ~]# vipw ##用vi打开/etc/passwd
vipw: /etc/passwd is unchanged
[root@CentOS7 ~]# vigr ##用vi打开/etc/group
vigr: /etc/group is unchanged
1.4.22 用户创建:useradd
- useradd [options] LOGIN
- -u UID
- -o 配合-u 选项,不检查UID的唯一性
- -g GID:指明用户所属基本组,可为组名,也可以GID
- -c "COMMENT":用户的注释信息
- -d HOME_DIR: 以指定的路径(不存在)为家目录
- -s SHELL: 指明用户的默认shell程序
- 可用列表在/etc/shells文件中
- -G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在
- -N 不创建私用组做主组,使用users组做主组
- -r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000,默认不创建家目录,但可以用-d先指定用户家目录
- -m 创建家目录,用于系统用户
- -M 不创建家目录,用于非系统用户
[root@CentOS7 ~]# useradd -u 80 -s /sbin/nologin -d /var/www -G daemon,bin apache ##不加-r 默认会创建家目录
[root@CentOS7 ~]# ll -a /var/www
total 16
drwx------. 4 apache apache 93 Jul 28 09:18 .
drwxr-xr-x. 22 root root 4096 Jul 28 09:18 ..
-rw-r--r--. 1 apache apache 18 Apr 11 08:53 .bash_logout
-rw-r--r--. 1 apache apache 193 Apr 11 08:53 .bash_profile
-rw-r--r--. 1 apache apache 231 Apr 11 08:53 .bashrc
drwxr-xr-x. 4 apache apache 39 Jul 18 17:28 .mozilla
drwxr-xr-x. 2 apache apache 6 Jul 27 21:18 newfile
[root@CentOS7 ~]# userdel -r apache
userdel: apache mail spool (/var/spool/mail/apache) not found
userdel: apache home directory (/var/www) not found
[root@CentOS7 ~]# useradd -u 80 -s /sbin/nologin -r -d /var/www -G daemon,bin apache ##加了-r 创建的为系统用户,默认不创建家目录,注意-r 和-d之间的顺序不能错,加-m 强制创建家目录
[root@CentOS7 ~]# ll -a /var/www
ls: cannot access /var/www1: No such file or directory
[root@CentOS7 ~]# useradd -u 80 -s /sbin/nologin -M -d /var/www -G daemon,bin apache ##-M 创建没有家目录的普通用户
[root@CentOS7 ~]# ll -a /var/www
ls: cannot access /var/www: No such file or directory
[root@CentOS7 ~]# id apache
uid=80(apache) gid=4038(apache) groups=4038(apache),1(bin),2(daemon)
1.4.23 新建用户的相关文件和命令
-
/etc/default/useradd
-
/etc/skel/*
-
/etc/login.defs
-
newusers命令 以passwd格式的文件 批量创建用户
- user.txt 里的文件内容格式要跟passwd文件的格式一样(拷出用户,在另一台机子上创建起来,批量建立账号),但没有配置文件
-
批量删除文件
for i in
cut -d: -f1 user.txt
;do userdel -r $i ;done -
cat passwd.txt |chpasswd
-
chpasswd 批量修改用户口令
1.4.24 用户属性修改usermod
-
usermod [OPTION] login
-
-u UID: 新UID
-
-g GID: 新主组
-
-G GROUP1 [,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-
-s SHELL:新的默认SHELL
-
-c 'COMMENT':新的注释信息
-
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-
-l login_name: 新的名字;
-
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-
-e: YYYY-MM-DD: 指明用户账号过期日期
-
f: INACTIVE: 设定非活动期限
1.4.25 删除用户userdel
-
userdel [OPTION]... login
-
-r: 删除用户的同时将家目录也删除
1.4.26 查看用户相关的ID信息
-
id [OPTION]... [USER]
-
-u: 显示UID
-
-g: 显示GID
-
-G: 显示用户所属的组的ID
-
-n: 显示名称,需配合ugG使用
1.4.27 切换用户或以其他用户身份执行命令su
-
su [options...][-] [user [args...]]
-
切换用户的方式:
-
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录(半切换)
-
su - UserName:登录式切换,会
读取目标用户的配置文件,切换至家目录,完全切换 -
root su至其他用户无须密码;非root用户切换时需要密码
-
换个身份执行命令:
-
su [-] UserName -c 'COMMAND'
-
选项:-l --login
-
su -l UserName 相当于 su - UserName
1.4.28 设置密码passwd
- passwd [OPTIONS] UserName: 修改指定用户的密码
- 常用选项:
- -d:删除指定用户密码
- -l: 锁定指定用户
- -u:解锁指定用户
- -e:强制用户下次登录修改密码
- -f: 强制操作
- -n mindays: 指定最短使用期限
- -x maxdays:最大使用期限
- -w warndays:提前多少天开始警告
- -i inactivedays:非活动期限
- --stdin:从标准输入接收用户密码
- echo "PASSWORD" | passwd --stdin USERNAME
1.4.29 修改用户密码策略chage
-
chage [OPTION]... LOGIN
-
-d LAST_DAY
-
-E --expiredate EXPIRE_DATE
-
-I --inactive INACTIVE
-
-m --mindays MIN_DAYS
-
-M --maxdays MAX_DAYS
-
-W --warndays WARN_DAYS
-
–l 显示密码策略
-
chage -d 0 tom 下一次登录强制重设密码
-
chage -m 0 –M 42 –W 14 –I 7 tom
-
chage -E 2016-09-10 tom
1.4.30 用户相关的其它命令
- chfn 指定个人信息
- chsh 指定shell
- finger 查看用户
1.4.31 创建组groupadd
- groupadd [OPTION]... group_name
- -g GID: 指明GID号;[GID_MIN, GID_MAX]
- -r: 创建系统组
- CentOS 6: ID<500
- CentOS 7: ID<1000
1.4.32 组属性修改:groupmod
-
groupmod [OPTION]... group
-
-n group_name: 新名字
-
-g GID: 新的GID
-
组删除:groupdel
- groupdel GROUP
1.4.33 组密码:gpasswd
-
gpasswd [OPTION] GROUP
-
-a user 将user添加至指定组中
-
-d user 从指定组中移除用户user
-
-A user1,user2,... 设置有管理权限的用户列表
-
newgrp命令:临时切换主组
如果用户本不属于此组,则需要组密码
1.4.31 更改和查看组成员groupmems
- groupmems [options][action]
- options:
- -g, --group groupname 更改为指定组 (只有root)
- Actions:
- -a, --add username 指定用户加入组
- -d, --delete username 从组中删除用户
- -p, --purge 从组中清除所有成员
- -l, --list 显示组成员列表
- groups [OPTION].[USERNAME]... 查看用户所属组列表
1.4.32 修改文件的属主和属组chown
-
修改文件的属主:chown
-
chown [OPTION]... [OWNER][:[GROUP]] FILE...
-
用法:
- OWNER 只修改属主
- OWNER:GROUP 修改属主和属主
- OWNER.GROUP 修改属主和属主
- :GROUP 只修改属组
- -R: 递归
- chown [OPTION]... --reference=RFILE FILE...
-
修改文件的属组:chgrp
-
chgrp [OPTION]... GROUP FILE...
-
chgrp [OPTION]... --reference=RFILE FILE...
- -R 递归
- 如:
- chown mage testfile
- chown root:admins testfile
1.4.33 文件权限
- 文件的权限主要针对三类对象进行定义
- owner: 属主, u
- group: 属组, g
- other: 其他, o
- 每个文件针对每类访问者都定义了三种权限
- -r: Readable
- w: Writable
- x: eXcutable
- 对于文件:
- r: 可使用文件查看类工具获取其内容
- w: 可修改其内容
- x: 可以把此文件提请内核启动为一个进程
对于目录: - r: 可以使用ls查看此目录中文件列表
- w: 可在此目录中创建文件,也可删除此目录中的文件
- x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录
- X:只给目录x权限,不给文件x权限
1.4.34 修改文件权限chmod
- chmod [OPTION]... OCTAL-MODE FILE...
- -R: 递归修改权限
- chmod [OPTION]... MODE[,MODE]... FILE...
- MODE:
- 修改一类用户的所有权限:
- u= g= o= ug= a= u=,g=
- 修改一类用户某位或某些位权限
- u+rwx u-rwx u=rwx g+rwx g-rwx o+rwx o-rwx - a+rwx a-rwx +rwx -rwx
- DIGIT:3位8进制数字
-
--- 000 0
-
--x 001 1
-
-w- 010 2
-
-wx 011 3
-
r-- 100 4
-
r-x 101 5
-
rw- 110 6
-
rwx 111 7
-
640: rw-r-----
-
755: rwxr-xr-x
-
chmod 640 chgrp sales testfile
chmod u+wx,g-r,o=rx file
chmod -R g+rwX /testdir
chmod 600 file
- chmod [OPTION]... --reference=RFILE FILE...
- 参考RFILE文件的权限,将FILE的修改为同RFILE
1.4.35 新建文件和目录的默认权限umask
- umask值 可以用来保留在创建文件权限
- 新建FILE权限: 666-umask
- 如果所得结果某位存在执行(奇数)权限,则将其权限+1
- 新建DIR权限: 777-umask
- 非特权用户umask是 002
- root的umask 是 022
- umask: 查看
- umask #: 设定
- umask 002
- umask –S 模式方式显示
- umask –p 输出可被调用
全局设置: /etc/bashrc 用户设置:~/.bashrc
1.4.36 Linux文件系统上的特殊权限
- SUID, SGID, Sticky
- 权限模型:由r, w, x 和user, group, other组成
- 安全上下文
- 前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限
1.4.37 可执行文件SUID权限
- 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
- 启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
- SUID设置在目录上无意义
总结:用户使用具有SUID权限的二进制程序,发起一个进程,该进程的身份不是用户本身,而是二进制程序自身的属主
- 权限设定:
- chmod u+s FILE...
- chmod u-s FILE...
1.4.38 可执行文件上SGID权限
- 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
- 启动为进程之后,其进程的属组为原程序文件的属组
总结:具有SGID权限的二进制程序,用户使用此二进制程序发起一个进程,进程的属组不是用户的基本组,而是二进制程序本身的基本组。
1.4.39 目录上的SGID权限
- 默认情况下,用户创建文件时,其属组为此用户所属的主组
==一旦某目录被设定了SGID,则对此目录有写权限(写权限指可以创建文件、删除文件)的用户在此目录中创建的文件所属的组为此目录的属组==
-
通常用于创建一个协作目录
-
权限设定:
-
chmod g+s DIR...
-
chmod g-s DIR...
-
chattr +i /data/shadow (锁定文件,任何人都删除不了,也不能移动)
-
chattr -i /data/shadow (撤销锁定)
-
chattr -a /data/shadow (只不能删除)
-
权限设定:
-
chmod g+s FILE...
-
chmod g-s FILE...
1.4.40 Sticky:沾滞位
-
Sticky的由来:一般来说,具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
-
Sticky作用:在目录设置Sticky位,只有文件的所有者或root可以删除该文件
作用在目录上,此目录中的文件仅能被文件的所有者删除或管理员root,即自己只能删除自己的文件,不能删除别人的文件
- sticky 设置在文件上无意义
- 权限设定:
- chmod o+t DIR...
- chmod o-t DIR...
例如:
-
ls -ld /tmp drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
-
特殊权限数字法
-
三个特殊位也组成一组权限》suidsgidsticky
SUID SGID STICKY
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7
- chmod 4777 /tmp/a.txt
1.4.41 访问控制列表ACL
- ACL:Access Control List,实现灵活的权限管理
- 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限,对某些特定的other用户设置特定的权限。
[root@CentOS7 data]# ll
-rw-r--r--. 1 mage mage 0 Jul 28 10:46 mage1
-rw-r--r--. 1 root root 2271 Jul 19 21:15 passwd
- ACL的由来:突破传统文件的权限,由于一个文件的权限只能设3种,属主,属组,其他。现在如果要对某个用户(或者某几个用户)来说,对mage1 这个文件没有任何权限,不能读写和执行,而由于又不能把other改了(另外其他一些可能需要权限),在面对这个困境,出现了ACL。就类似国内防火墙,禁止国外的ip访问,没有任何权限。但是对国内的ip没有限制,将other 细分为几类用户,对几类用户分别进行访问控制。
[root@CentOS7 data]# ll
-rw-r--r--. 1 mage mage 0 Jul 28 10:46 mage1
-rw-r--r--. 1 root root 2271 Jul 19 21:15 passwd
- ACL的由来:突破传统文件的权限,由于一个文件的权限只能设3种,属主,属组,其他。现在如果要对某个用户(或者某几个用户)来说,对mage1 这个文件没有任何权限,不能读写和执行,而由于又不能把other改了(另外其他一些可能需要权限),在面对这个困境,出现了ACL。就类似国内防火墙,禁止国外的ip访问,没有任何权限。但是对国内的ip没有限制,将other 细分为几类用户,对几类用户分别进行访问控制。
[root@CentOS7 data]# ll
-rw-r--r--. 1 root root 2271 Jul 19 21:15 passwd
[root@CentOS7 data]#setfacl -m u:zhu:0 passwd
[root@CentOS7 data]# su zhu
[zhu@CentOS7 data]$ cat passwd
cat: passwd: Permission denied
[zhu@CentOS7 data]$exit
[root@CentOS7 data]# getfacl passwd
# file: passwd
# owner: root
# group: root
user::rw-
user:zhu:---
group::r--
mask::r--
other::r--
[root@CentOS7 data]# chown zhu passwd
[root@CentOS7 data]# ll passwd
-rw-r--r--+ 1 zhu root 2271 Jul 19 21:15 passwd
[root@CentOS7 data]# su zhu
[zhu@CentOS7 data]$ cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@CentOS7 data]# ll passwd
----rw-r--+ 1 root root 2271 Jul 19 21:15 passwd
[root@CentOS7 data]# usermod -aG sales zhu
[root@CentOS7 data]# id zhu
uid=1000(zhu) gid=1000(zhu) groups=1000(zhu),4036(git),4040(sales)
[root@CentOS7 data]# getfacl passwd
#file: passwd
#owner: root
#group: root
user::---
user:zhu:rw- ##自定义用户zhu
group::r--
group:sales:--- ## 自定义组sales(zhu属于sales组)
mask::rw-
other::r--
[root@CentOS7 data]# su zhu
[zhu@CentOS7 data]$ cat passwd
root:x:0:0:root:/root:/bin/bash
bin/nologin ##可读
[zhu@CentOS7 data]$ echo 11 >>passwd ##也可写
说明 自定义用户>自定义组
[zhu@CentOS7 data]$ exit
exit
[root@CentOS7 data]# setfacl -x u:zhu passwd
[root@CentOS7 data]# gefacl passwd
bash: gefacl: command not found...
[root@CentOS7 data]# getfacl passwd
# file: passwd
# owner: root
# group: root
user::--- ##用户本身 > ##user:zhu:--- 自定义用户
group::r-- 组
group:sales:--- 自定义组
mask::r--
other::r-- 其他
[root@CentOS7 data]# id u
uid=4036(u) gid=4041(u) groups=4041(u),0(root),4040(sales)
[root@CentOS7 data]# su u
[u@CentOS7 data]$ cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
-
ACL生效顺序:所有者,自定义用户,组,自定义组,其他人(按照getfacl passwd 显示的先后顺序就可以)
-
setfacl -R -m u:zhu:0 passwd 添加自定义用户为zhu -R为递归
-
getfacl passwd 查看passwd的acl权限
-
setfacl -m g:sales:0 passwd 添加自定义组为sales
-
setfacl -x u:zhu passwd 取消zhu用户的acl权限
-
setfacl -x g:sale passwd 取消自定义组sales的acl权限
-
setfacl -b passwd 取消passwd所有的acl权限
-
mask只影响除所有者和other的之外的人和组的最大权限(相当于设置权限acl的临界值,用于控制防止acl权限过大)