1.4 linux基础(四)

1.4 linux基础(四)

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权限过大)

posted @ 2019-09-11 13:40  马老师的笨学生  阅读(251)  评论(0编辑  收藏  举报