umask值用于设置用户创建文件时的默认权限。 在系统上创建目录或文件时,目录或文件的默认权限由umask值决定。
对于根用户,系统的默认umask值为0022; 对于普通用户,系统的默认umask值为0002。 运行umask命令可显示当前用户的umask值。
[root@localhost ~]#umask
0022
umask值共有四组数字,其中第一组数字用于定义特殊权限,一般不考虑,与一般权限相关的是后三组数字。
默认情况下,用户对目录可以拥有的最大权限为777。 对于文件,用户可以拥有的最大权限是从目录的最大权限中删除执行权限,即666。 因为目录需要x执行权限,所以没有执行权限才能访问目录,但默认情况下不需要为文件授予x执行权限。
对于根用户,他的umask值为022。 root用户创建目录时,默认权限为最大权限777,即删除相应位置的umask值权限。 这意味着目录的默认权限为755,因为不需要删除所有者的任何权限,而是删除所属组的w权限,并删除其他用户的w权限。 root用户创建文件时,默认权限为最大权限666,用于删除相应位置的umask值。 这意味着文件的默认权限为644。
通过以下测试操作可以知道umask值。
[ root @ localhost~] #创建mkdir directory1#测试目录
[根@ localhost~] # ll-ddirectory1#目录的默认权限为755
drwxr-xr-x.2根根根4096 12月2日2 13:08目录1
[root@localhost ~]#touch file1#创建测试文件
[根@ localhost~] # ll file1#文件的默认权限为644
-rw-r----r----1根012月2日2 13:09文件1
可以使用umask命令更改umask值,例如将umask值设置为0077。
[root@localhost ~]#umask 0077
[root@localhost ~]#umask
0077
此处创建的目录的默认权限为700,文件的默认权限为600。
[ root @ localhost~] # mkdir directory 2
[ root @ localhost~] # ll-ddirectory 2
drwx---- 2根路由409612月2日2 13:14目录2
[root@localhost ~]#touch file2
[root@localhost ~]#ll file2
-rw----.1根012月2日2 13:14文件2
如果将umask值设置为0003,请考虑此时创建的目录或文件的默认权限是多少。
正确的结果是目录的默认权限为774,文件的默认权限为664。 在计算默认权限时,可以删除与umask值对应的相应位置权限,以获得正确的结果,而不是应用最大权限并直接减去umask值。
umask命令只是临时更改umask值,重新启动系统时umask将恢复为默认值。 要永久更改umask值,必须修改/etc/profile文件或修改/etc/bashrc文件。 例如,要将默认的umask值设置为027,请在文件中添加一行umask 027。
/etc/profile和/etc/bashrc可用于配置每次用户登录系统时自动执行的操作。 区别在于/etc/profile仅在用户首次登录时运行,/etc/bashrc在用户每次登录并加载Bash Shell时运行。
因此,如果修改/etc/profile文件,则仅对新创建的用户有效。 如果修改了/etc/bashrc文件,将对所有用户生效。