温故而知新——Linux文件与目录管理(二)

Linux文件与目录管理(二)

4、文件与目录的默认权限与隐藏权限

除了基本 r,w,x 权限外,在 Linux 传统的 Ext2/3/4 文件系统下,我们还可以设定其他的系统隐藏属性,这部分可使用 chattr 来设定,而以 lsattr 来查看,最重要的属性就是可以设定其不可修改的特性!连让文件的拥有者都不能进行修改!在 CentOS 7.x 采用 xfs 作为文件系统后,没有支持所有的 chattr 参数。

4.1、文件默认权限:umask

umask 指的是 “目前用户在建立文件或目录时候的权限默认值”,那么如何得知或设定 umask 呢?

[root@MiWiFi-R4A-srv tmp]# umask
0022	<== 与一般权限有关的是后边三个数字,第一组是给特殊权限用的
[root@MiWiFi-R4A-srv tmp]# umask -S
u=rwx,g=rx,o=rx

在默认权限的属性上,目录与文件是不一样的。我们知道 x 的权限对于目录是非常重要的!但是一般文件的建立则不应该有执行的权限,因为一般文件通常是用在于数据的记录嘛!因此,默认的情况如下:

  • 若使用者建立为 “文件” 则预设 “没有可执行(x)权限”,亦即只有 rw,也就是最大为 666 分,预设权限如下:

    -rw-rw-rw-

  • 若用户建立为 “目录”,则由于 x 与能够进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,预设权限如下:

    drwxrwxrwx

要注意的是,umask 的分数指的是 “该默认值需要减掉的权限!”

按照上面的例子来说,因为 umask 为 022,所以 user 并没有被拿掉任何权限,不过 group 与 others 的权限被拿掉了 2(也就是 w 这个权限),那么当使用者:

  • 建立文件时:(-rw-rw-rw-) - (- - - - -w- - w-) = -rw-r- -r- -
  • 建立目录是:(drwxrwxrwx) - (d- - - - w- -w -) = drwxr-xr-x
4.1.1、umask 的利用与重要性

如果 umask 预设为 022,那新建的数据只有用户自己具有 w 的权限,同群组的人只有 r 这个可读的权限而已,并无法修改!那么如何设定 umask 呢?

[root@MiWiFi-R4A-srv tmp]# umask 002
[root@MiWiFi-R4A-srv tmp]# touch test3
[root@MiWiFi-R4A-srv tmp]# mkdir test4
[root@MiWiFi-R4A-srv tmp]# ll -d test[34]
-rw-rw-r--. 1 root root 0 Aug 25 16:47 test3
drwxrwxr-x. 2 root root 6 Aug 25 16:47 test4

4.2、文件隐藏属性

  • chattr(配置文件的隐藏属性)

    [root@MiWiFi-R4A-srv ~]# chattr [+-=][ASacdisu] 文件/目录名
    选项与参数:
    +	:增加某个特殊属性
    -	:删除一个特殊属性
    =	:设定一定,且仅有后面接的属性
    
    A	:若存取此文件(或目录)时,它的访问时间atime将不会被修改,可避免I/O较慢的机器过度的存取粗盘
    S	:一般文件是异步写入磁盘的,如果加上这个S,当你进行任何文件的修改,该变更会[同步]写入磁盘
    a	:当设定这个a后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设定这个属性
    c	:将会自动将此文件压缩,在读取的时候将会自动解压缩,在存储时,也会先压缩再存储
    d	:当dump程序被执行时,设定d属性将可使该文件(或目录)不会被dump备份
    i	:它可以让一个文件[不能被删除、改名、设定链接也无法写入或新增数据!!!],只有root才能设定
    s	:如果文件被删除,将彻底移出磁盘,无法挽回
    u	:与s相反
    
    范例:请尝试到 /tmp 底下建立文件,并加入 i 的参数,尝试删除看看
    [root@MiWiFi-R4A-srv tmp]# cd /tmp
    [root@MiWiFi-R4A-srv tmp]# touch attrtest
    [root@MiWiFi-R4A-srv tmp]# chattr +i attrtest
    [root@MiWiFi-R4A-srv tmp]# rm attrtest
    rm: remove regular empty file 'attrtest'? y
    rm: cannot remove 'attrtest': Operation not permitted
    # 连 root 都无法删除
    
    [root@MiWiFi-R4A-srv tmp]# chattr -i attrtest
    
  • lsattr(显示文件隐藏属性)

    [root@mysql ~]# lsattr [-adR] 文件/目录名
    选项与参数:
    -a	:将隐藏文件的属性也列出来
    -d	:如果接的是目录,仅列出目录本身的属性而非目录内的文件名
    -R	:连同子目录的数据也一并列出来
    
    [root@MiWiFi-R4A-srv tmp]# chattr +aiS attrtest
    [root@MiWiFi-R4A-srv tmp]# lsattr attrtest
    --S-ia-------------- attrtest
    

4.3、文件特殊权限:SUID,SGID,SBIT

我们先来看看 /tmp 和 /usr/bin/passed 的权限:

[root@MiWiFi-R4A-srv tmp]# ll -d /tmp; ll /usr/bin/passwd
drwxrwxrwt. 22 root root 4096 Aug 25 17:14 /tmp		<== others 的权限位置有一个 t
-rwsr-xr-x. 1 root root 33600 Apr  7  2020 /usr/bin/passwd	<== owner 的权限位置有一个 s
  • Set UID

    当 s 这个全下出现在文件拥有者的 x 权限上时,此时被称为 Set UID,简称为 SUID 的特殊权限

    • SUID 权限仅对二进制程序有效;
    • 执行者对于该程序需要具有 x 的可执行权限;
    • 本权限仅在执行该程序的过程中有效;
    • 执行者将具有该程序拥有者的权限。

    一个例子:Linux 系统中,所有账号的密码都记录在 /etc/shadow 这个文件里边,这个文件的权限为

    [root@MiWiFi-R4A-srv tmp]# ll /etc/shadow
    ----------. 1 root root 1241 Aug 21 15:39 /etc/shadow
    

    意思是这个文件仅有 root 可读且仅有 root 可以强制写入而已。既然这个文件仅有 root 可以修改,那么一般账号能否自行修改自己的密码呢?当然可以。那这样不是有了冲突了吗?明明 /etc/shadow 就不能让一般用户去存取,为什么一般用户还能修改这个文件里的内容呢?这就是 SUID 的功能了:

    1. 一般用户对于 /usr/bin/passwd 这个程序来说具有 x 权限,表示一般用户可以执行 passwd;
    2. passwd 的拥有者是 root;
    3. 一般用户执行 passwd 的过程中,会 “暂时” 获得 root 权限;
    4. /etc/shadow 就可以被一般用户所执行的 passwd 所修改。

    但是一般用户去 cat 读取 /etc/shadow 时,他能读取吗?因为 cat 不具有 SUID 的权限,所以一般用户是不能用 cat 读取这个文件的。

    请添加图片描述

    另外,SUID 仅可用在 binary program 上,不能用在 shell script 上。这是因为 shell script 只是将很多的 binary 执行文件叫进来执行而已!所以 SUID 的权限部分,还是要看 shell script 叫进来的程序的设定,而不是 shell script 本身。

  • Set GID

    当 s 标志在文件拥有者的 x 权限时为 SUID,那 s 在群组的 x 时则称为 Set GID,SGID。举例来说,你可以用底下的指令来观察到具有 SGID 权限的文件:

    [root@MiWiFi-R4A-srv tmp]# ll /usr/bin/locate
    -rwx--s--x. 1 root slocate 48552 May 11  2019 /usr/bin/locate
    

    与 SUID 不同的是,SGID 可以针对文件或目录来设定!如果对文件来说,SGID 有如下的功能:

    • SGID 对二进制程序有用;
    • 程序执行者对于该程序来说,需具备 x 的权限;
    • 执行者在执行的过程中会获得该程序群组的支持。

    举例来说,上面的 /usr/bin/locate 这个程序会搜寻 /var/lib/mlocate/mlocate.db 这个文件的内容,mlocate.db 的权限如下:

    [root@MiWiFi-R4A-srv tmp]# updatedb
    [root@MiWiFi-R4A-srv tmp]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
    -rwx--s--x. 1 root slocate   48552 May 11  2019 /usr/bin/locate
    -rw-r-----. 1 root slocate 3856164 Aug 25 19:35 /var/lib/mlocate/mlocate.db
    

    与 SUID 非常类似,若我使用一般账号去执行 locate 时,那一般用户将会取得 slocate 群组的支持,因此就能够去读取 mlocate.db。

    当一个目录设定了 SGID 的权限后,它将具有如下的功能:

    • 用户若对于此目录具有 r 和 x 的权限时,该用户能够进入此目录;
    • 用户在此目录下的有效群组将会变成该目录的群组;
    • 用途:若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

    SGID 对于项目开发来说很重要!

  • Sticky Bit

    仅针对目录有效,SBIT 对于目录的作用是:

    • 当用户对于此目录具有 w,x 权限,亦即具有写入的权限时;当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件

    换句话说:当甲这个用户于 A 目录是具有群组或其他人的身份,并且拥有该目录的 w 权限,这表示 “甲用户对该目录内任何人建立的目录或文件均可以进行 ‘删除/更名/移动’ 等操作。”不过,如果将 A 目录加上了 SBIT 的权限后,则甲只能针对自己建立的文件或目录进行删除/更名/移动等操作,而无法删除他人的文件。

    [root@MiWiFi-R4A-srv tmp]# ll -d /tmp
    drwxrwxrwt. 22 root root 4096 Aug 25 19:33 /tmp		<== 可以看到 /tmp 的权限为 drwxrwxrwt
    
    [root@MiWiFi-R4A-srv tmp]# cd /tmp
    [root@MiWiFi-R4A-srv tmp]# touch test	<== 新建一个 test 文件
    [root@MiWiFi-R4A-srv tmp]# chmod 777 test	<== 更改权限为 777
    [root@MiWiFi-R4A-srv tmp]# ll test
    -rwxrwxrwx. 1 root root 0 Aug 25 19:48 test
    
    [li@MiWiFi-R4A-srv ~]$ cd /tmp
    [li@MiWiFi-R4A-srv tmp]$ rm test	
    rm: cannot remove 'test': Operation not permitted	<== 无法删除 test
    
4.3.1、SUID/SGID/SBIT 权限设定

如何配置文件使成为具有 SUID 和 SGID 的权限呢?在之前的三个数字之前加上一个数字,最前面的数字就代表这几个权限:

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT
[root@MiWiFi-R4A-srv tmp]# touch test
[root@MiWiFi-R4A-srv tmp]# chmod 4755 test; ll test		<== 使其具有 SUID 的权限
-rwsr-xr-x. 1 root root 0 Aug 25 19:53 test
[root@MiWiFi-R4A-srv tmp]# chmod 6755 test; ll test		<== 使其具有 SUID/SGID 的权限
-rwsr-sr-x. 1 root root 0 Aug 25 19:53 test
[root@MiWiFi-R4A-srv tmp]# chmod 1755 test; ll test		<== 加入 SBIT 的权限
-rwxr-xr-t. 1 root root 0 Aug 25 19:53 test
[root@MiWiFi-R4A-srv tmp]# chmod 7666 test; ll test		<== 具有空的 SUID/SGID 权限
-rwSrwSrwT. 1 root root 0 Aug 25 19:53 test

注意最后一个的大写 S,T,表示空的权限。因为,我们下达的是 766。也就是说,user、group 以及 others 都没有 x 这个可执行的标志(因为 666 嘛),所以,这个 S、T 代表的就是 “空的”。SUID 本来表示的就是 “该文件在执行的时候,具有文件拥有者的权限”,但是文件拥有者都无法执行,哪来的权限给别人使用!

除了通过数字,还可以通过符号来处理。

# 设定权限成为 -rws--x--x
[root@MiWiFi-R4A-srv tmp]# chmod u=rwxs,go=x test; ll test
-rws--x--x. 1 root root 0 Aug 25 19:53 test

# 承上,加上 SGID 和 SBIT 
[root@MiWiFi-R4A-srv tmp]# chmod g+s,o+t test; ll test
-rws--s--t. 1 root root 0 Aug 25 19:53 test

4.4、观察文件类型:file

如果你想要知道某个文件的基本类型,例如是属于 ASCII 或者是 data 文件,或者是 binary,且其中有没有使用到动态函数库(share library)等等信息,就可以利用 file 这个指令。

[root@MiWiFi-R4A-srv tmp]# file ~/.bashrc
/root/.bashrc: ASCII text		<== 是 ASCII 纯文本文件
[root@MiWiFi-R4A-srv tmp]# file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=87e17c1d9b2e20d7e8aeab9115074375eec5e8e1, stripped	
# 执行文件的数据可就多了!包括这个文件的 suid 权限,兼容于 Intel x86_64 等级硬件平台等
[root@MiWiFi-R4A-srv tmp]# file /var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db: mlocate database, version 0, require visibility, root /	
<== database 文件

5、指令与文件的搜寻

5.1、脚本文件名的搜寻

5.1.1、which(寻找 “执行文件”)
[root@MiWiFi-R4A-srv ~]# which [-a] 指令
选项与参数:
-a	:	将所有由 PATH 目录中可以找到的指令均列出来,而不止第一个被找到的指令名称
范例一:搜寻 ifconfig 这个指令的完整文件名
[root@MiWiFi-R4A-srv ~]# which ifconfig
/usr/sbin/ifconfig

范例二:用 which 去找出 which 的文件名文件
[root@MiWiFi-R4A-srv ~]# which which
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
        /usr/bin/which

范例三:请找出 history 这个指令的完整文件名
[root@MiWiFi-R4A-srv ~]# which history
/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@MiWiFi-R4A-srv ~]# history
    1  uname -r
    2  /sbin/shutdown -h 10 'I will shutdown after 10 mins.'
    3  /sbin/shutdown -c
    4  vi /etc/sysconfig/clock
    ......
# 没有 history,但我明明可以执行 history    

which 这个指令是根据 “PATH” 这个环境变量所规范的路径,去搜寻 “执行文件” 的文件名!

那为什么找不到 history 呢?因为 history 是 “bash 内建的命令”。但 which 预设的是 PATH 内所规范的目录,所以当然是找不到的。那怎么办?可以通过 type 这个指令。

5.1.2、文件名的搜寻

通常 find 指令是不常用的,因为速度慢之外,也很费硬盘!一般我们都是先用 whereis 或者是 locate 来检查,如果真的找不到,才以 find 来搜寻。因为 whereis 只找系统中某些特定目录下的文件而已,locate 在是利用数据库来搜寻文件,当然两者速度更快。

  • whereis(由一些特定的目录中寻找文件文件名)

    [root@MiWiFi-R4A-srv ~]# whereis [-bmsu] 文件或目录名
    选项与参数:
    -l	:	可以列出 whereis 会去查询的几个主要目录而已
    -b	:	只找 binary 格式的文件
    -m	:	只找在说明文件 manual 路径下的文件
    -s	:	只找 source 来源文件
    -u	:	搜寻不在上述三个项目当中的其他特殊文件
    
    范例一:请找出 ifconfig 文件
    [root@MiWiFi-R4A-srv ~]# whereis ifconfig
    ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
    
    范例二:只找出 passwd 有关的 “说明文件” 文件名(man page)
    [root@MiWiFi-R4A-srv ~]# whereis passwd		<== 全部的文件名都列出来
    passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz
    [root@MiWiFi-R4A-srv ~]# whereis -m passwd	<== 只有在 man 里边的文件
    passwd: /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz
    

    whereis 只找几个特定的目录,所以速度会快一些。当然,那么其他的目录里边的文件,它是找不到的。

  • locate/updatedb

    [root@MiWiFi-R4A-srv ~]# locate [-ir] 关键词
    选项与参数:
    -i	:	忽略大小写的差异
    -c	:	不输出文件名,仅计算找到的文件数量
    -l	:	仅输出几行的意思,例如输出五行则是 -l 5
    -S	:	输出 locate 所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
    -r	:	后面接正规表示法的显示方式
    
    范例一:找出系统中所有与 passwd 相关的文件名,且仅列出 5[root@MiWiFi-R4A-srv ~]# locate -l 5 passwd
    /etc/passwd
    /etc/passwd-
    /etc/pam.d/passwd
    /etc/security/opasswd
    /usr/bin/gpasswd
    
    范例二:列出 locate 查询所使用的数据库文件之文件名与各数据数量
    [root@MiWiFi-R4A-srv ~]# locate -S
    Database /var/lib/mlocate/mlocate.db:
            16,856 directories
            155,105 files
            8,171,828 bytes in file names
            3,856,164 bytes used to store database        
    

    你会发现使用 locate 特别的快,这是因为 locate 寻找的数据是由 “已建立的数据库 /var/lib/mlocate/” 里面的数据所搜寻到的,所以不用直接去硬盘当中存取数据。

    那有什么限制吗?就是因为 locate 是经由数据库搜寻的,而数据库的建立默认是在每天执行一次。如果新建的文件不在数据库中,那么就搜寻不到。那可不可以手动更新数据库呢?当然可以。updatedb 这个指令会读取 “/etc/updatedb.conf” 这个配置文件的设定,然后再去硬盘里进行搜寻文件的动作,最后更新整个数据库文件!

    • updatedb:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘里面的文件名,并更新 /var/lib/mlocate 内的数据库文件;
    • locate:依照 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词的文件名。
  • find

    [root@MiWiFi-R4A-srv ~]# find [PATH] [option] [action]
    选项与参数:
    1、与时间有关的参数:-atime、-ctime与-mtime,以-mtime说明:
    	-mtime n	:意思为在n天之前的[一天之内]被更改过内容的文件
    	-mtime +n	:列出在n天之前(不包含n天本身)被更改过内容的文件
    	-mtime -n	:列出在n天之内(包含n天本身)被更改过内容的文件
    	-newer file	:列出比file还要新的文件
    
    范例一:将过去系统上面 24 小时内有更改过内容(mtime)的文件列出
    [root@mysql tmp]# find / -mtime 0
    # 这个 0 是重点,0 代表目前时间,所以,从现在开始到 24 小时前,有变动过内容的文件都会被列出来!那如果是三天前的 24 小时呢?find / -mtime 3
    
    范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
    [root@MiWiFi-R4A-srv ~]# find /etc -newer /etc/passwd
    /etc
    /etc/resolv.conf
    ...
    

    我们现在知道 atime、ctime 和 mtime 的意义,如果你想要找出一天内被更改过的文件名,可以使用上述范例一的作法。但如果我想要找出 “4 天内被更改过的文件名” 呢?那可以使用 “find / -mtime -4”。那如果是 “4 天前的那一天” 就用 “find / -mtime 4”。有没有加上 “+、-” 差别还是很大的:

    在这里插入图片描述

    • +4 :代表大于等于 5 天;
    • -4 :代表小于等于 4 天内的文件名;
    • 4 :代表 4-5 那一天的文件名。

    再来看看其他用法:

    [root@MiWiFi-R4A-srv ~]# find [PATH] [option] [action]
    选项与参数:
    2. 与使用者或组名有关的参数:
    	-uid n :n 为数字,这个数字是用户的账号 ID,亦即 UID ,这个 UID 是记录在/etc/passwd 里面与账号名称对应的数字
    	-gid n :n 为数字,这个数字是组名的 ID,亦即 GID,这个 GID 记录在/etc/group,相关的介绍我们会第四篇说明~
    	-user name 	:name 为使用者账号名称喔!例如 dmtsai
    	-group name	:name 为组名喔,例如 users ;
    	-nouser	:寻找文件的拥有者不存在 /etc/passwd 的人!
    	-nogroup	:寻找文件的拥有群组不存在于 /etc/group 的文件!当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
    
    范例三:搜寻 /home 底下属于 li 的文件
    [root@MiWiFi-R4A-srv ~]# find /home -user li
    /home/li
    /home/li/.mozilla
    ......
    
    范例四:搜寻系统中不属于任何人的文件
    [root@MiWiFi-R4A-srv ~]# find / -nouser
    

    至于 -nouser 或 -nogroup 的选项,除了你自行在网络上下载文件时会发生,如果你将系统里面某个账号删除了,但是该账号已经在系统内建立了很多文件时,就可能会发生无主孤魂的文件存在!

    [root@MiWiFi-R4A-srv ~]# find [PATH] [option] [action]
    选项与参数:
    3. 与文件权限及名称有关的参数:
    	-name filename:搜寻文件名为 filename 的文件;
    	-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB还要大的文件,就是『 -size +50k 』
    	-type TYPE:搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 装置文件 (b, c),目录 (d), 连结档 (l), socket (s), 及 FIFO (p) 等属性。
    	-perm mode:搜寻文件权限『刚好等于』 mode 的文件,这个 mode 为类似 chmod的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
    	-perm -mode :搜寻文件权限『必须要全部囊括 mode 的权限』的文件,举例来说,我们要搜寻 -rwxr--r-- ,亦即 0744 的文	件,使用 -perm -0744,当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,因为 -rwsr-xr-x的属性已经囊括了 -rwxr--r-- 的属性了。
    	-perm /mode :搜寻文件权限『包含任一 mode 的权限』的文件,举例来说,我们搜寻-rwxr-xr-x ,亦即 -perm /755 时,但一属性为 -rw-------也会被列出来,因为他有 -rw.... 的属性存在!
    
    范例五:搜寻文件名为 passwd 这个文件
    [root@MiWiFi-R4A-srv ~]# find / -name passwd
    /sys/fs/selinux/class/passwd
    /sys/fs/selinux/class/passwd/perms/passwd
    /etc/pam.d/passwd
    ...
    
    范例五-1:找出文件名包含了 passwd 这个关键词的文件
    [root@MiWiFi-R4A-srv ~]# find / -name "*passwd*"
    /sys/fs/selinux/class/passwd
    /sys/fs/selinux/class/passwd/perms/passwd
    /etc/pam.d/passwd
    ...
    
    范例六:找出 /run 目录下,文件类型为 Socket 的文件有哪些
    [root@MiWiFi-R4A-srv ~]# find /run -type s
    /run/gssproxy.sock
    /run/vmware/guestServicePipe
    /run/abrt/abrt.socket
    ...
    
    范例七:搜寻文件当中含有 SGID 和 SUID 或 SBIT 的属性的文件
    [root@MiWiFi-R4A-srv ~]# find / -perm /7000
    /dev/mqueue
    /dev/shm
    ...
    

    find 的其他特殊功能:

    [root@MiWiFi-R4A-srv ~]# find [PATH] [option] [action]
    选项与参数:
    4、额外可进行的动作;
    	-exec command	:command为其他指令,-exec后面可再接额外的指令来处理搜索到的结果
    	-print	:将结果打印到屏幕上,默认动作
    find 还可以搭配通配符
    
    范例八:将上述范例找到的文件使用 ls -l 列出来
    [root@MiWiFi-R4A-srv ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
    -rwsr-xr-x. 1 root root 38680 May 11  2019 /usr/bin/fusermount
    -rwsr-xr-x. 1 root root 79648 Dec  2  2020 /usr/bin/chage
    -rwsr-xr-x. 1 root root 84256 Dec  2  2020 /usr/bin/gpasswd
    ...
    

    find 的特殊功能就是能够进行额外的动作,我们将范例八的例子以图解来说明一下:

    在这里插入图片描述

    该范例中特殊的地方有 {} 以及 \;还有 -exec 这个关键词,这些东西的意义为:

    • {} 代表的是 “由 find 找到的内容”,如上图所示,find 的结果会被放置到 {} 位置中;
    • -exec 一直到 ; 是关键词,代表 find 额外动作的开始(-exec) 到结束(😉,在这中间的就是 find 指令内的额外动作。在本例中就是 “ls -l {}”。
    • 因为 “;” 在 bash 环境中是有特殊意义的,因此利用反斜杠来转义。

6、极其重要的复习!权限与指令间的关系

  1. 让用户能进入某目录成为工作目录的基本权限为:
    • 可使用的指令:例如 cd 等;
    • 目录所需要的权限:用户对这个目录至少需要具备 x 的权限;
    • 额外需求:如果用户想查询文件名,还需要 r 权限
  2. 用户在某个目录内读取一个文件的基本权限:
    • 可使用命令:cat、more、less 等;
    • 目录所需要的权限:至少 x 权限
    • 文件所需权限:至少 r 权限
  3. 让用户可以修改一个文件的基本权限:
    • 可还是用命令:vim 等;
    • 目录所需要的权限:至少 x 权限
    • 文件r,w 权限
  4. 让一个用户可以建立一个文件的基本权限:
    • 目录所需要的权限:w,x,重点是 w
  5. 让用户进入某目录并执行该目录下的某个指令的基本权限:
    • 目录所需要的权限:x
    • 文件所需要的权限:x
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值