Linux随笔2( 十 )


4.3.2 默认权限与权限掩码
用户创建文件和目录的时候,默认的权限是不一样的,
而文件或目录创建时最终能具有的权限,除了取决于默认权限之外,还取决于权限掩码:umask,即用默认权限值减去权限掩码值,为最终获得的权限 。权限掩码值有两种显示方式:
上述两种输出形式的理解方式是不一样的,第一种输出形式,表示从默认权限中移除所属组和其他用户角色的写入权限;第二种输出形式,表示应用权限掩码之后可以保留的权限,此处不具有的权限,表示要从默认权限中减去的权限 。虽然两者的输出形式上的差异造成的理解方式不同,但是最终效果是一样的 。
所以当创建文件或目录的时候,两者的权限分别为:
从上述结果可以看出,默认权限7与权限掩码2的异或结果为5,即从rwx中拿掉w这个写入权限的结果 。
文件的默认权限6与权限掩码2的按位异或计算方式相同,此处不再展开 。
使用touch命令创建一个空文件,查看该文件的最终权限,具体如下所示:
test]# touch permissiontest]# ls -l permission-rw-r--r-- 1 root root 0 Mar 21 23:15 permission
可以看出,文件的最终权限为644,即-rw-r–r-- 。
创建目录时的默认权限为777(),权限掩码为0022(-----w--w-),即从默认权限中拿掉写入权限,所以最终获得的权限为755(drwxr-xr-x) 。
使用mkdir命令创建一个空目录,查看其权限,如下所示:
test]# mkdir permission_dirtest]# ls -ld permission_dirdrwxr-xr-x 2 root root 6 Mar 21 23:17 permission_dir
从上述输出中可以看出,目录最终获得权限为755,即drwxr-xr-x 。
umask的值是可以更改的,修改为不同的值,表示从默认权限中拿掉对应的权限 。比如将umask的值修改为0003,表示拿掉其他用户和组的写入和执行权限,保持所属组的权限为默认权限不变 。具体如下所示:
test]# umask 0003test]# umask0003test]# touch new_umask_ftest]# mkdir new_umask_dtest]# ls -ld new_umask_ddrwxrwxr-- 2 root root 6 Mar 21 23:22 new_umask_dtest]# ls -l new_umask_f -rw-rw-r-- 1 root root 0 Mar 21 23:22 new_umask_f
从上述输出中可以看出,由于文件的默认权限中本身就没有执行权限,所以只是拿掉了写入权限;而目录的默认权限中则包含了执行权限,所以拿掉了写入和执行权限 。从这里也可以看出,最终能获得权限,除了取决于权限掩码值之外,更取决于默认权限中具有什么权限 。
4.4 命令与文件查找相关的命令
文件和命令的查找命令中,最常用的就是就是which命令,此外还有两个不太常用的命令,分别为和 。
使用示例如下:
test]# whereis ifconfigifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gztest]# whereis ipip: /usr/sbin/ip /usr/share/man/man7/ip.7.gz /usr/share/man/man8/ip.8.gz
其他选项应用:
test]# whereis -b ipip: /usr/sbin/iptest]# whereis -m ipip: /usr/share/man/man7/ip.7.gz /usr/share/man/man8/ip.8.gztest]#
由于命令只是查找几个固定的路径,并不是全系统查找,所以查找速度很快;但是由于查找的路径有限,所以能查找的文件也有限,实际使用并不多 。
要查看命令搜索那些路径,可以执行如下命令:
[root@amdhost test]# whereis -l | head -n 20bin: /usr/binbin: /usr/sbinbin: /usr/libbin: /usr/lib64bin: /etcbin: /usr/etcbin: /usr/gamesbin: /usr/local/binbin: /usr/local/sbinbin: /usr/local/etcbin: /usr/local/libbin: /usr/local/gamesbin: /usr/includebin: /usr/localbin: /usr/libexecbin: /usr/sharebin: /usr/local/python3.8.6/binbin: /usr/local/git/binman: /usr/share/man/man7man: /usr/share/man/man0p