umask 是确定掩码设置的命令,该掩码控制在创建文件和目录时为其设置哪些文件权限。
- 八进制
- 象征性的
八进制法
使用此方法为文件和目录提供相对权限,范围为 0 到 7,如下表所示
Octal Values | 允许 |
---|---|
0 | 没有权限 |
1 | 仅执行 |
2 | 只写 |
3 | 写下和执行 |
4 | 只读 |
5 | 阅读和执行 |
6 | 读和写 |
7 | 读取,写和执行 |
如果不带任何参数调用 umask 命令,它将显示当前掩码。
根据所使用的操作系统,输出将采用八进制或者符号表示法。
[root@test ~]# umask 0022
4个值代表如下图
0 特殊权限(Sticky Bit、SUID 或者 SGID)
0 用户所有者权限
2 组主权限
2 其他用户的许可
按照下表了解应用于目录的默认 umask 值
权限 | 用户所有者 | 组所有者 | 所有其他人 | |
---|---|---|---|---|
全部权限 | NA. | 7. | 7. | 7. |
Umask | 0. | 0. | 2 | 2 |
目录权限 | 0. | 7. | 5. | 5. |
下表是应用于所有文件的默认 umask 值
特许 | 用户所有者 | 集团所有者 | 所有其他人 | |
---|---|---|---|---|
全权限 | NA. | 6. | 6. | 6. |
Umask | 0. | 0. | 2 | 2 |
文件权限 | 0. | 6. | 4. | 4. |
如何使用八进制方法更改 umask 值?
让我用几个例子来解释一下
问:我希望创建的所有目录的默认权限为 755,所有文件的默认权限为 644,例如:用户具有完全权限,组和所有其他人具有读取和执行权限
A:使用 umask 值作为 0022
计算
0777 0022 = 0755(目录)
0666 0022 = 0644(文件)
在终端上运行以下命令
# umask 0022
问:我希望创建的所有目录的默认权限为 733,所有文件的默认权限为 622,例如:用户具有完全权限,组和所有其他人具有写入和执行权限
A:使用 umask 值作为 0044
计算
0777 0044 = 0733(目录)
0666 0044 = 0622(文件)
在终端上运行以下命令
# umask 0044
问:我希望创建的所有目录的默认权限为 700,所有文件的默认权限为 600 例如:用户具有完全权限,组和所有其他人都没有权限
A:使用 umask 值作为 0077
计算
0777 0077 = 0700(目录)
0666 0066 = 0600(文件)
在终端上运行以下命令
# umask 0077
<注意:如果输入的数字少于 4 位,则假定为前导零。
如果参数不是有效的八进制数或者超过 4 位,则会导致错误。
符号方法
在此模式下,权限使用字母分配,如下表所示
Symbolic Values | 允许 | 解释 |
---|---|---|
r | 读 | 阅读文件或者列出目录的内容 |
w | 写 | 写入(或者删除)文件或者目录 |
x | 执行 | 执行文件或者重复目录树 |
s | setuid/gid. | 有关详细信息,请参阅Suid和Sgid。 |
t | 粘滞位 | 有关详细信息,请参阅粘性位。 |
# umask -S u=rwx,g=rx,o=rx
文件的权限适用于三类不同的用户:用户(文件的所有者)、组和其他人。
Letter | 类 | 描述 |
---|---|---|
u | 用户 | 文件的所有者 |
g | 组 | 是文件组成员的用户 |
o | 其他 | 不是文件或者本集团成员的所有者的用户 |
a | 全部 | 所有三个以上,它与UgO相同。 (如果在umask命令中没有指定类,则这是默认值。) |
如何使用符号方法更改 umask 值?
让我用几个例子来解释一下
# umask a+rx
上述命令允许为所有用户类启用读取或者执行权限;其余的掩码位不变
# umask u=rw,go=
上述命令允许为owner开启读写权限,同时禁止为owner开启execute权限;阻止为组和其他人启用任何权限
# umask u+w,go-w
上述命令允许为所有者启用写入权限;阻止为组和其他人启用写权限
如何永久设置 umask 值?
以上用于设置 umask 值的方法都是临时的和基于终端的。
一旦我们切换终端,umask 值将返回到 /etc/profile 中设置的默认值。
我们可以通过对以下文件进行主更改来更改默认 umask 值
# vi /etc/profile # By default, we want umask to get set. This sets it for login shell # Current threshold for system reserved uid/gids is 200 # You could check uidgid reservation validity in # /usr/share/doc/setup-*/uidgid file if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 022 else umask 022
如我们所见,所有小于/大于 200 的 uid/gid 的默认 umask 值为 0022.
如果我们想更改相同的值,请更改两个值,如下所示
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 077 else umask 077 fi
保存并退出文件
现在,下次我们登录终端或者其他会话时,将应用新的 umask 值,我们可以使用以下命令进行验证
# umask 0077
我们还可以在 ~/.bash_profile 或者 ~/.bashrc 文件中设置命令,以便每次机器启动或者打开新终端时都会更新新的 umask 值。