在类似Unix的操作系统上,umask命令返回或设置系统的文件模式创建掩码的值。 本文档介绍了umask的Linux版本。
查看英文版
1 umask 运行系统环境
2 umask 描述
3 umask 语法
4 umask 示例
Linux
查看英文版
umask [-S] [ mask ]选件
-S | 接受掩码的符号表示,或返回一个。 |
mask | 如果指定了有效的掩码,则将umask设置为此值。如果未指定掩码,则返回当前的umask值。 |
正如你可能知道,您的系统上的每个文件与相关的一组的权限是用来保护文件:文件的权限决定哪些用户可以访问该文件,什么类型的访问他们拥有它。
共有三类用户:
反过来,对于这些用户类别,文件访问分为三种:
因此,对于这三类用户中的每一种,都有三种访问类型。这些信息共同构成了文件的权限。
权限如何表示?有两种方法来表示文件的权限:用符号方式表示(使用诸如“ r ”表示读取,用“ w ”表示写入和使用“ x ”表示执行)之类的符号或八进制数字值。
例如,当您使用ls命令在命令行中列出目录的内容时,如下所示:
ls -l
您将(除其他信息外)看到每个文件的文件许可权信息。在这里,它用符号表示,看起来像下面的例子:
-rwxr-xr--
这里有十个符号。第一个破折号(“ - ”)表示这是一个“常规”文件,换句话说,不是目录(或设备或任何其他特殊类型的文件)。其余的9个符号代表权限:rwxr-xr--。这九个符号实际上是三组,每组三个符号,从左到右分别代表各自的特定权限:
符号 | 含义 |
---|---|
rwx | 文件的所有者可以读取,写入或执行此文件,作为系统上的进程。 |
r-x | 文件组中的任何人都可以读取或执行此文件,但不能对其进行写入。 |
r-- | 任何人都可以读取该文件,但不能写入该文件或将其内容作为进程执行。 |
遮罩的一般符号形式如下:
[user class symbol(s)][permissions operator][permission symbol(s)][,]...
权限符号是r(读),w(写)或x(执行)的任意组合,如上所述。
用户类符号可以是以下一项或多项:
u | 用户(文件的所有者)。 |
g | 组(文件已定义组的任何成员)。 |
o | 其他(其他人)。 |
a | 全部(相当于ugo)。 |
权限运算符可能是以下之一:
+ | 允许为指定的用户类启用指定的文件权限(未指定的权限在掩码中保持不变)。 |
- | 禁止为指定的用户类启用指定的文件权限(未指定的权限在掩码中未更改)。 |
= | 允许为指定的用户类别启用指定的文件权限(未指定的权限将在文件创建过程中被掩码禁止)。 |
因此,例如,以下umask命令:
umask u + w
设置掩码,以便在创建文件时,它们将具有允许用户(文件所有者)具有写权限的权限。该文件的其余权限将与操作系统默认值保持不变。
可以通过用逗号分隔多组符号表示法来指定多个更改(但不能用空格!)。例如:
umask ux,g = r,o + w
此命令将设置掩码,以便在创建后续文件时,它们将具有以下权限:
请注意,如果使用equals运算符(“ = ”),则将特别禁止未指定的任何权限。例如,命令
umask a =
将设置文件创建掩码,以便每个人都无法访问新文件。
使用数字表示法指定文件创建掩码文件创建掩模也可以表示数值,使用八进制值(数字0至7)。使用八进制数字表示法时,某些数字表示某些权限,并且这些数字彼此相加或相减以表示最终的组合权限值。具体地,数字1,2,和4表示以下权限:
数字 | 允许 |
---|---|
4 | 读 |
2 | 写 |
1 | 执行 |
使用这些数字是因为这三个数字的任何组合都是唯一的。下表说明了它们的独特组合:
读取值+ | 写值+ | 执行值= | 合并值: | 等价的符号: |
---|---|---|---|---|
0 | 0 | 0 | 0 |
|
0 | 0 | 1 | 1 | X |
0 | 2 | 0 | 2 | w |
0 | 2 | 1 | 3 | wx |
4 | 0 | 0 | 4 | r |
4 | 0 | 1 | 5 | rw |
4 | 2 | 0 | 6 | rw |
4 | 2 | 1 | 7 | rwx |
对于每一类用户,可以使用一位数字来表示他们的权限。使用上面的示例,我们可以使用三位数的八进制数754表示rwxr-xr的符号许可。数字的顺序始终相同:User,Group,Other。
其他权限数字在文件许可权的八进制表示形式中,实际上有四个数字。我们讨论的三个重要数字是最后三个数字。第一位数字是特殊的文件许可指示符,出于讨论的目的,可以始终将其视为零。因此,从现在开始,当我们讨论文件权限777时,它也可能称为0777。
那么umask实际如何工作?该umask的 面具由一定值限制他们的权限。
本质上,umask的每个数字都从操作系统的默认值中减去而得出您定义的默认值。这不是真正的减法。从技术上讲,将掩码取反(取其按位取反),然后使用逻辑AND操作将此值应用于默认权限。结果是umask告诉操作系统在创建文件时要关闭哪些权限位。
在Linux中,常规文件的默认权限值为666,目录的默认权限值为777。创建新文件或目录时,内核采用此默认值,“减去” umask值,并为新文件提供权限。
下表显示了umask值的每一位如何影响新文件和目录权限:
umask数字 | 默认文件权限 | 默认目录权限 |
---|---|---|
0 | rw | rwx |
1 | rw | rw |
2 | r | rx |
3 | r | r |
4 | w | wx |
5 | w | w |
6 | X | X |
7 | (未经允许) | (未经允许) |
因此,如果我们的umask值为022,则默认情况下,任何新文件都将具有权限644(666-022)。同样,默认情况下,将使用权限755(777-022)创建任何新目录。
查看英文版
要查看系统的当前umask值,请输入以下命令:
umask
这将以四位数的八进制数返回系统的umask,例如:
0002
同样,第一个零是特殊的权限数字,可以忽略;就我们的目的而言,0002与002相同。
要将其视为符号表示形式,请使用-S标志:
umask -S
它将象征性地返回相同的值,例如:
u = rwx,g = rwx,o = rx
其中u代表用户,g代表组,o代表其他。因此,如果我们创建一个新文件,它将具有默认权限664,即666(文件的默认权限)被002(我们的umask值)掩盖。
让我们通过使用touch命令创建一个新文件来进行测试:
touch testfile
现在让我们获得该文件的目录清单:
ls -l testfile
-rw-rw-r-- 1 myusername myusername 0 Jan 7 14:29 testfile
如预期的那样,新文件具有-rw-rw-r--或0664权限:所有者和组可以读取或写入文件,而其他人只能读取它。
现在,让我们更改umask。要将umask设置为022,请使用以下命令:
umask 022
这与运行umask 0022相同;如果仅指定三位数字,则假定第一位数字为零。让我们验证更改是否发生:
umask
0022
现在让我们创建一个新文件:
touch testfile2
现在,我们使用星号通配符(“ * ”)查看其目录列表以及我们创建的第一个文件,以查看所有名称以“ testfile ” 开头的文件:
ls -l testfile*
-rw-rw-r-- 1 myusername myusername 0 Jan 7 14:29 testfile -rw-rw-r-- 1 myusername myusername 0 Jan 7 14:39 testfile2
如您所见,testfile2具有权限644。
这是一些其他umask命令示例:
umask a + r
设置掩码,以便新文件允许所有用户读取它们;其他权限将与默认权限保持不变。
umask a-x
设置掩码,以便新文件最初不会被任何用户执行;其他默认权限与默认值保持不变。
umask u=rw,go=
设置掩码,以便拥有该文件的用户可以读取和写入新文件,但不能执行它们;组成员和其他人将无权访问该文件。
umask 777
使所有人都无法访问新文件-没有人可以读取,写入或执行它们。
umask 000
使新文件对所有人绝对完全可用(读取,写入和执行)。但是,这是一个坏主意。不要这样
查看英文版
userdel | usermod | ul | unalias | uname | uncompress | unhash | uniq | until | unlink | unpack | uptime | unzip | useradd |
未知的网友