先来看一下下图的例子, 先用 touch 11.txt 命令创建一个文件 11.txt ,然后用命令 ls -l 11.txt 查看,可以看到文件11.txt 默认的用户权限是 rw-r--r-- ,即 644 。再用命令 mkdir 123 创建一个目录 123 ,用命令 ls -ld 123 查看,可以看到目录 123 默认的用户权限是 rwxr-xr-x ,即 755 。 这个到底是怎么回事呢?为什么创建文件是 644 ,创建目录是 755 ? 实际上,系统有一个概念,叫 umask ,输入命令 umask ,回车,见下图, 命令执行完毕的结果是 0022 ,说明系统中 root 用户的 umask 值就是 0022 ,通过这个值就可以确认文件和目录默认的用户权限是什么。 先来看看怎么更改 umask 的值,见下图, 输入命令 umask 002 ,全称应该是 umask 0002 ,一般这个值最前面的 0 是可以省略的。然后再次用命令 umask 查看,结果就变成 0002 了。 现在用 touch 命令来创建一个文件 22.txt ,用 mkdir 命令创建一个目录 234 ,见下图, 可以看到文件 22.txt 的默认用户权限变了,为 rw-rw-r-- ,即 664 。而目录 234 的默认用户权限变为 rwxrwxr-x ,即 775 。 现在我们来找一下规律,见下方表格, 可以发现规律,umask 中的 0 对应文件用户权限中的 6 ,对应目录用户权限中的 7 ;umask 中的 2 对应文件用户权限中的 4 ,对应目录用户权限中的 5 。 先来了解一个规律,为什么目录用户权限一定会有 x 权限? 一般,我们要查看一个目录的时候,一定要先进去这个目录才可以,而 x 为可执行的意思,其实就是可以进入的意思,所以创建的目录一定要有这个权限。如果没有这个 x 权限,我们连浏览目录都不行。这边和文件是不一样的,文件有了 x 权限才可以执行,而目录有了 x 权限才可以浏览。 所以,上面的规律用公式表示就是: 777 - 022 = 755 ; 666 - 022 = 644 。 777 - 002 = 775 ; 666 - 002 = 664 。 但真的就是这样吗?答案是不一定的,比如我们用命令 umask 003 来执行查看一下,见下图, 先用 ls 命令查看一下目录和文件,再用命令 rm -rf 11.txt 2.txt 22.txt 来删除掉 11.txt、2.txt、22.txt这三个文件,重新用命令 touch 1.txt 创建一个文件 1.txt ,再用命令 ls -l 1.txt 来查看,可以看到 1.txt 的用户权限是 rw-rw-r-- ,即 664 。 我们再来用公式测算一下 666 - 003 = 663 ,这个结论显然是不对的。那我们应该怎么得出规律呢?数字只是代表,回归到权限代码本身来看一下, 666 = rw-rw-rw- , 003 = -------wx , (rw-rw-rw-) - (-------wx) = rw-rw-r-- , 即 664 。 777 = rwxrwxrwx , (rwxrwxrwx) - (-------wx) = rwxrwxr-- ,即 774 。 来看一下目录的权限,见下图, 目录 11 用户权限就是 rwxrwxr-- ,即 774 。

综上所述,umask 命令是用来决定默认的文件和目录的用户权限的。判断新建的目录和文件的用户权限用的是减法,这个减法不能用数字减,而要用九位权限的代码去减,这样得出的结论才是正确的。需要注意的是,- 减去 r 、w 、x 得出的结果还是 - 。