Linux 中的 umask 是什么?
UMASK 在 Linux 或 Unix 系统中称为 User Mask,也称为 User file creation Mask。这是在 Linux 机器中创建新文件或文件夹时的基本权限或默认权限。
它被 Linux 中的多个命令使用,例如 mkdir、touch、tee 和其他创建文件和目录的命令。当创建新文件或目录时,它会参与每一步。
文件权限:
在我们继续深入了解 umask 之前,让我们先简单了解一下文件权限。
Linux 以其安全性着称。 Linux 中的每个文件或目录都有一组特定的权限和所有权。让我们看看下面的用户类。
Linux 中的每个文件都有以下三个与之关联的用户类。
- 用户 - 拥有文件的用户 - 默认情况下,这表示文件的创建者,除非您更改它。
- 组 - 这表示组中的人将被分配文件权限。
- 其他 - 这限制了不是所有者或分配组中的其他用户。
上面提到的每个用户类别都有三种文件访问类型。
- r - 读取权限 - 读取文件内容的能力
- w - 写权限 - 改变文件内容的能力
- x - 执行权限 - 将文件作为程序执行的能力
上面的概念告诉你谁可以读取文件内容,修改文件内容或者执行程序。
查看权限 - 符号模式:
让我们看看下面的文件所有权。您可以通过键入 ls -l 命令获取 Linux 机器上的信息。

上图中的第一个字符显示文件类型。 Linux 中可能有不同类型的文件,如下所示。
- |
Indicates the simple regular file with different extensions like .txt, .json, .sh, .py, .rb, and so on |
d |
Indicates directory/folder |
l |
Indicates a symbolic link or symlink or soft link |
c |
Indicates character device file |
b |
Indicates block device file |
接下来的九个符号分为以下三个部分。
rwx |
The file owner can read the content, modify the contents and execute the file as a program |
r-x |
Members in the group “users” can read the content and execute the file as a program but cannot modify the file contents |
r-x |
The one who is not the owner also not the member of the group i.e. other, can also read the contents of the file and execute the file as a program but cannot modify the file contents |
查看权限 - 数字模式:
还有一种使用数字表示权限的方法,称为数字模式。
让我们看看下面的数字文件权限表。
0 |
--- |
No permission |
1 |
--x |
Only Execute permission |
2 |
-w- |
Only write permission |
3 |
-wx |
Write and Execute permission |
4 |
r-- |
Only read permission |
5 |
r-x |
Read and Execute permission |
6 |
rw- |
Read and Write permission |
7 |
rwx |
Read, Write and Execute permission |
如果我参考此数字权限图表并将其应用于上图中提到的同一目录,权限将如下所示。
rwx |
4+2+1 |
7 |
r-x |
4+0+1 |
5 |
r-x |
4+0+1 |
5 |
因此,testdir 目录的数字权限为 755。
了解 UMASK:
让我们通过执行以下命令创建一个新文件和新目录。
$ touch testfile
$ mkdir testdir
让我们通过执行 ls -l 命令查看 testfile 和 testdir 的权限。
$ls -l
Output:
drwxr-xr-x 2 niteshb users 4096 Mar 21 22:43 testdir
-rw-r--r-- 1 niteshb users 0 Mar 21 22:43 testfile
你注意到权限了吗?他们是不同的,对吧?这是因为在 Linux 机器中设置了默认的 umask 值。
默认情况下,在Linux机器上,一个文件的默认创建权限是666,即所有者、组和其他人的读写权限;目录的默认创建权限是777,即所有者、组和其他人的读写和执行权限。其他的。
众所周知,目录不能执行。那为什么目录需要执行权限呢?那么,目录的执行权限就是允许访问目录下的内容。如果使用 chmod 命令我们将目录的权限更改为 666 并尝试通过 cd 命令进入目录,您将得到权限被拒绝的错误。
在大多数 Linux 发行版中,默认的系统范围值是在 pam_umask.so 或 /etc/profile 文件中设置的。通过在用户主目录的 ~/.bashrc 文件中添加值,我们可以为用户创建一个特定的 umask 值。
要检查 umask 值,请执行 umask 命令。
$umask
输出:
0022
我们现在可以忽略以上四个数字中的第一个 0。它是 Linux 中高级权限的一部分。即使您具有写权限也可以防止修改文件,或者即使您是 root 用户也可以防止删除文件。在这篇博客中,我们只关注其他三个数字。
要更改当前会话 umask 值,请执行以下命令,然后执行所需的值。
$umask 0044
文件和目录如何获得权限:
与 umask 关联的值不是您为文件和目录获得的权限。
有一个非常简单的计算。正如我们上面提到的,文件的默认值为 666,目录的默认值为 777。要计算新文件或目录的权限位,请从默认值中减去 umask 值。
例如,让我们计算一个新的文件或目录权限将如何因为 umask 而受到影响。
- 文件:666 - 022=644。根据权限,所有者可以读取和执行文件。群组和其他人可以阅读该文件。
- 目录:777 - 022=755。这意味着所有者将拥有目录的所有读、写权限和 cd 权限。 Group 和其他人可以读取和列出目录的内容并 cd 到目录。
您还可以通过执行以下命令以数字形式查看 umask 值。
$umask
输出:
u=rwx,g=rx,o=rx
与数字符号不同,符号符号值包含将在新创建的文件和目录上设置的权限位。
设置掩码值:
可以使用八进制或符号表示法设置文件创建掩码。要使更改永久设置新的 umask 值,请在全局配置文件(如 /etc/profile 文件)中设置新的 umask 值,这将影响所有用户或在用户的 shell 配置文件(如 ~/.profile、~/.bashrc 或 ~/.zshrc 中)只会影响用户。用户文件优先于全局文件。
在更改 umask
值之前,请确保新值不会带来潜在的安全风险。应谨慎使用限制性低于 022
的值。例如 umask 000
意味着任何人都将拥有所有新创建文件的读、写和执行权限。
假设我们想为新创建的文件和目录设置更严格的权限,这样其他人将无法 cd
到目录和读取文件。我们想要的权限是目录的 750
和文件的 640
。
要计算 umask
值,只需从默认权限中减去所需的权限:
掩码值:777-750=027
以数字表示法表示的所需 umask
值是 027
。
要在系统范围内永久设置新值,请使用文本编辑器打开 /etc/profile
文件,并在文件开头更改或添加以下行:
umask 0027
要使更改生效,请运行以下源命令或注销并登录:
$source /etc/profile
为了验证新设置,我们将使用以下命令创建一个新文件和目录。
$mkdir newtestdir
$touch newtestfile
如果您使用 ls 命令检查权限,您会注意到新文件具有 640
和新目录 750
权限,正如我们想要的:
drwxr-xr-- 2 niteshb users 4096 Mar 21 22:43 newtestdir
-rw-r----- 1 niteshb users 0 Mar 21 22:43 newtestfile
另一种设置文件创建掩码的方法是使用符号表示法。例如 umask u=rwx,g=rx,o=
与 umask 027
相同。
结论:
在本指南中,我们解释了 Linux 权限以及如何使用 umask
命令为新创建的文件或目录设置权限位。
有关更多信息,请在您的终端中输入以下命令。
$man umask