Raven's Blog

umask命令详解

umask命令详解

也许你会和我一样,以为会使用chmod,chown这类命令就掌握了linux文件权限篇的基础知识。但是其实还有一个很重要的命令,命令虽小但是影响深远。它就是umask。

umask是控制文件权限中的一个重要命令或者说是一个重要的配置选项。前者可通过在shell中设置,而后者则需要在配置文件(/etc/profile/etc/bashrc)中设置。在正式说明umask的相关知识前,需要讲解一个通识:

i> linux在创建目录时,给的默认权限是777(rwx rwx rwx);在创建文件时,给的默认权限是666(rw- rw- rw-)

1. umask讲解及其计算公式

当用户创建文件(目录也是文件)时,umask用于辅助用户决定文件的默认权限。它由四个8进制位构成。我们可以在终端中执行umask来获取:

i> 说好的四个8进制位呢?你切换成root用户再执行umask命令就可以得到四个8进制位了,因为首位是特殊位,通常都是0,我们不用关心。如果你想了解首位的功能,可参考--Linux 下一些特殊权限

常见的umask值为002或者022,下面我们来解释它们各自的功能。

你可以把umask的值理解为系统需要屏蔽的权限:

  1. 在002中,也就是000 000 010,即需要屏蔽掉others的w权限。再结合前文我所提到的同时,创建目录默认为777,那么去掉others的w后,就是775,即111 111 101(rwx rwx r-x)。创建普通文件为666,那么去掉others的w后,就是664,即110 110 100(rw- rw- r--)。
  2. 同理在022中,也就是000 010 010,需要屏蔽掉group和others的w权限。那么创建目录,最终得到的755。创建文件,得到的是644。

值得一提的是,不要理解最终权限是默认权限 减去 umask的值。真正的计算公式是:

$$ final permission = mode \& \sim umask $$

2. 其它

2.1 umask命令

在shell中,执行umask value即可。如umask 022,就把umask值设置为022了。

执行umask -S可以符号的形式打印当前掩码的反码,也就是默认允许的权限

2.2 umask的限制

umask不能授予已创建的文件或目录权限,如有需要,请使用chmod命令。

2.3 umask安全等级

umask valueSecurity levelEffective permission (directory)
022Permissive755
026Moderate751
027Moderate750
077Severe700

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »