转至:https://blog.csdn.net/xiazhiyiyun/article/details/59663334

 

umask命令

umask命令是bash中自带的一个命令。在理解umask之前呢需要了解linux系统下的文件权限相关知识。

umask值

umask命令可以设置用户创建文件的默认权限,直接输入umask命令得到的输出结果是设置的文件权限掩码。 
如下

umask 
0002

 

 

首先在解释umask的输出之前要解释下文件的默认权限,默认情况下创建一个目录的权限是rwx,创建一个文件的权限拥有rw。 
如下:

ll Test/ test

drwxrwxrwx  2 summer summer 4096 3月   1 10:03 Test/
-rw-rw-rw-  1 summer summer    0 3月   1 10:03 test

 

 

但是如果考虑了以上umask的值就会创建出如下权限的文件和目录

ll Test/ test

-rw-rw-r--  1 summer summer    0 3月   1 10:16 test
drwxrwxr-x  2 summer summer 4096 3月   1 10:16 Test/

 

 

 

 

因而,umask中的值设定的就是创建文件时的文件权限的掩码,也就是会屏蔽掉的文件权限。

如上例,一个文件创建时候权限是 666 ,其中的umask末尾是 2 ,表明属于文件其他者的权限的 w 权限会被屏蔽,因而真正创建出的权限就是 664,表明属于文件其他者将会没有 w 权限。

其中,umask 值的4个数字,从后往前依次创建文件或目录时,文件其他者,文件所属组,文件所属用户的屏蔽码。

那第一个数字又是什么的屏蔽码呢?

文件特殊权限的屏蔽码,我们直到文件有特殊权限,SUID,SGID,SBIT,这三种权限也是组成了一个八进制数字。UID,SGID,SBIT 分别是4(100),2(010),1(001),当umask值的第一个值是1,就代表着屏蔽了特殊权限的SBIT位置。

 

设置umask值

很多情况下我们需要自定义umask值,这时候也比较简单,只要输入umask +掩码值

比如,我们希望默认情况下我们创建的一个文件除了用户以外,其他人以及用户组内的成员都不能进行修改。 
因而umask的值应该是0022。

umask 0022

umask
0022

touch test && ll test
-rw-r--r-- 1 summer summer 0 3月   1 10:46 test

 

 

显然创建的文件已经变成了644的权限。在很多情况下,我们是不关注文件的特殊权限的,事实上,如果设定掩码值时候,我们输入的umask值如果不足四位数,那么它就会从后网往前更改原来的掩码值。

如初始umask值为 0002,如果我们输入命令umask 022,那么umask值就会被更改为0022。 
如果我们输入命令umask 2,那么umask值就会被更改为0002。