当我们在系统中新建一个文件或目录时,系统会自动赋予该文件或目录一个初始访问权限,我们称为默认权限,默认权限与文件系统的umask值有关。可以在终端下直接输入 umask来查看当前系统的umask值。例如:

image

显示结果中,第一位是特殊权限,我们暂时只考虑后三位即可。即,目前系统的默认权限为022,那它表示什么意思呢?

我们知道,x权限对于文件来说,表示能否执行该文件,而对目录来说,表示能否cd到该目录。在Linux系统中,出于安全考虑,在不考虑umask的情况下,系统默认设置的权限为:

新建文件的权限是-rw-rw-rw-,权限值是666;

新建目录的权限是drwxrwxrwx,权限值是777。

而最终的系统默认权限即是666或777“减去”umask的值,即文件的默认权限为644,而目录的默认权限为755.即:

新建文件时:(-rw-rw-rw-)-(-----w--w-)è(-rw-r--r--)

新建目录时:(drwxrwxrwx)-(d----w--w-)è(drwxr-xr-x),例如:

image

而使用umask命令不仅可以查看当前系统的默认权限,也可以设置系统的默认权限,如:

image

需要注意的是,在计算最终的默认权限时,需要将数值转换为rwx的形式再去相减,而不建议直接使用数字666或777相减。

比如在上图的例子中,umask值为003,则:

新建文件时:(-rw-rw-rw-)-(--------wx)è(-rw-rw-r--)

新建目录时:(drwxrwxrwx)-(--------wx)è(drwxrwxr--)

但若使用数字算的话,对于文件来说,666-003=663,其权限变成了-rw-rw--wx,很明显是不对的。