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 的功能了:
- 一般用户对于 /usr/bin/passwd 这个程序来说具有 x 权限,表示一般用户可以执行 passwd;
- passwd 的拥有者是 root;
- 一般用户执行 passwd 的过程中,会 “暂时” 获得 root 权限;
- /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、极其重要的复习!权限与指令间的关系
- 让用户能进入某目录成为工作目录的基本权限为:
- 可使用的指令:例如 cd 等;
- 目录所需要的权限:用户对这个目录至少需要具备 x 的权限;
- 额外需求:如果用户想查询文件名,还需要 r 权限。
- 用户在某个目录内读取一个文件的基本权限:
- 可使用命令:cat、more、less 等;
- 目录所需要的权限:至少 x 权限;
- 文件所需权限:至少 r 权限。
- 让用户可以修改一个文件的基本权限:
- 可还是用命令:vim 等;
- 目录所需要的权限:至少 x 权限;
- 文件:r,w 权限。
- 让一个用户可以建立一个文件的基本权限:
- 目录所需要的权限:w,x,重点是 w
- 让用户进入某目录并执行该目录下的某个指令的基本权限:
- 目录所需要的权限:x
- 文件所需要的权限:x