zoukankan      html  css  js  c++  java
  • 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 '
    ' ' '
    

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

  • 相关阅读:
    objective c 中基本类型的操作
    [转载]Server.MapPath和Request.MapPath()的用法
    [转载]mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法
    [转载]忘记token怎么加入k8s集群
    ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded; 的解决办法
    [转载]AutoMapper 9.0的改造
    [转载]k8s注册节点提示Docker SystemdCheck]: detected cgroupfs" as the Docker cgroup dr iver. The r ecommended dr fiver is" systemd"
    [转载]Linux的Vi命令详解
    [转载]查看虚拟机里的Centos7的IP
    [转载]centos关闭swap分区
  • 原文地址:https://www.cnblogs.com/huangsefeizhu/p/11505791.html
Copyright © 2011-2022 走看看