umask在创建文件时的作用:
root用户创建的文件默认权限是 644, 即属主:读、写;属组:只读;其他:只读;
目录的默认权限是755,即属主:读、写和执行;属组:读和执行;其他:读和执行;
而普通用户创建的文件默认权限是 664, 即属主:读、写;属组:读、写;其他:只读;
目录的默认权限是775,即属主:读、写和执行;属组:读、写和执行;其他:读和执行;
root用户和普通用户的创建文件的默认权限不同,是由于shell环境的设定不同。此环境称为umask,即遮罩码(或反向掩码)。它表示用户在创建文件或目录时,会使用777或666减去遮罩码,从而产生默认权限,其中:
创建文件:666-umask
创建文件使用666,是因为文件默认不能具有执行权限。
创建目录:777-umask
遮罩码可以自行设定,使用命令为:
# umask NUMBER
需要注意的是,由于文件默认没有执行权限,因此即使用户设定的umask被666减去后具有了执行权限,系统也会默认为该结果加1以确保文件没有执行权限。例如:
# umask 023
此时创建的文件默认权限应该是:
666 - 023 = 643 //属主:读写;属组:只读;其他:写和执行;
但实际创建的文件默认权限为:
666 - 023 + 1 = 644 //属主:读、写;属组:只读;其他:只读;
但是目录没有这样的限定。
注意:设定的umask只对当前的shell进程有效,一旦退出当前的shell,umask即恢复默认值,此前的设置失效了。如果想让umask的值永久有效,只能通过修改配置文件来实现。