umask ( 英文全称为:User file mask ) 是 Linux / Unix / FreeBSD 系统中用于配置新创建的文件和目录的默认权限的命令工具。该工具可以使用掩码配置文件或目录的读、写、执行权限。

umask 命令不是用来为文件或目录添加权限的,而是从基础的权限中移除掩码设置的权限。

设置掩码后,创建的文件或目录具有的默认实际权限的计算:

  • 具有的实际权限 = 默认基础权限 & (~设置的umask掩码值权限)
  • 解释说明:
    • umask掩码值为八进制模式时,先转变为对应的三位二进制数,把掩码的二进制数按位取反,然后和基础权限按位与运算。
    • umask掩码值为符号制模式时,相当于已经取反的值与与基础权限按位与运算,因此使用符号模式时,真正的掩码值是把符号模式的值按位取反。
  • 默认基础权限为:
  • 文件基础权限为:三个组都具有读写权限,对应的八进制为666,对应的符号为 rw-rw-rw-
  • 目录基础权限为:三个组都具有读写权限执行,对应的八进制为777,对应的符号为 rwxrwxrwx

本文将为你介绍 umask 命令的使用方法,使你对 umask 命令具有基本的了解,使你能够正确的运用 umask 命令。

umask 命令语法

umask [选项] [掩码值]
  • 掩码值:可以使用如下两种形式(可选,不提供掩码值时,使用命令默认的掩码值 0022
    • 八进制模式:3位或4位八进制数
    • 符号模式:使用 用户类型=权限类 的形式设置掩码
  • 无参数时:显示当前 umask 值

八进制模式详解

每一位上的数字就表示三个权限的和,把每一位拆分为1,2,4三个数,就是其具体权限。

左侧的第 1 位八进制数字用来设置 setuidsetgidsticky 位标志,数值的含义如下:

八进制数值 所表示的意义
4 设置 setuid
2 设置 setgid
1 设置 sticky
0 不做修改设置

后面的 3位八进制数字的意义为,第一个数字表示文件所有者的权限,第二个数字表示组的权限,最后一个数字表示其他用户的权限。每个写、读、执行权限的八进制数值如下:

八进制数值 对应权限 对应符号
4 读权限 r
2 写权限 w
1 可执行权限 x
0 不具有任何权限

符号模式详解

可以使用的用户类型符号有:

  • u (user) 表示所有者使用,
  • g (group)表示用户组
  • o (other) 表示其他用户

可以使用的权限符号有:

  • r (read)表示读权限
  • w (write)表示写权限
  • x(execute) 表示执行权限。chmod 格式(如 ,,o=`)

符号模式的使用形式:

把权限赋值给特定的用户:

如:为所有者赋予读写执行权限:u=rwx;为用户组赋予读写权限:g=rx

umask 命令使用示例

1. 查看默认 umask 值

umask

输出内容为:

0022

2. 使用符号模式设置 umask

使用符号模式设置掩码,即使用设置的权限与基础权限按位与运算,不需要按位取反:

umask u=rwx,g=rx,o=

如上示例:把使用符号模式的设置的掩码对应的具体的八进制掩码值为:0027

创建一个目录:

mkdir test

查看目录的权限:

ls -l

输出目录的权限信息:

drwxr-x--- 2 an an 4096  9月 6日 12:40 test

如上示例屏蔽了其他用户的所有权限,屏蔽了用户组的写权限。

3. 显示 umask 的符号模式值

使用 -S 选项以符号模式的形式输出 umask 的值:

umask -S

输出内容为:

u=rwx,g=rx,o=rx

4. 永久设置默认的 umask

要永久设置 umask 值,需要把内容写入到用户的配置文件,一般使用 .bashrc 文件:

echo "umask 027" >> ~/.bashrc

注意:一定要使用 >> 符号附加到内容的尾部。

umask 命令选项详解

如下给出 umask 命令选项的详细解释说明:

选项 说明 示例
-S 以符号模式的形式显示当前 umask 掩码值 umask -S
-p 以可执行命令的方式输出内容,即:不只输出掩码值,还在前面附加名命名 umask -pumask 0022

结语

本文全面的介绍了 umask 的基本功能、语法结构及其功能,并给出了 umask 命令的具体使用示例,umask 主要作用是从文件或目录的基本权限中移除掩码值对应的权限。 umask 命令可以在 Linux 各发行版和 FreeBSD 系统中使用,基本功能是相同的。