我完全搞不清楚 umask 和 chmod 的区别。两者都用于授予文件权限。但它们的区别究竟在哪里,以及何时使用它们。
我已阅读过在线文档但对我来说两者看起来都一样。
umask:umask 用于设置默认文件权限。这些权限将在创建后应用于所有后续文件。chmod:用于更改文件和目录权限。
根据我的理解,例如创建了文件 test.doc。
默认情况下,unix 为文件提供 022 umask 代码。
现在当我将其更改为chmod 666test.doc 我可以改变这个文件的权限级别。
现在如果我使用umask 666对于同一个文件。
当我使用时会发生什么不同chmod 666 和 umask 666
答案1
不同之处在于umask
仅涉及新文件。正如您所说,umask 设置文件/目录在创建时具有的默认权限,但之后umask
不再影响它们。
chmod
但是,需要在运行之前创建该文件。
因此,如果您运行umask
,它将对现有文件完全没有影响。
答案2
umask
实际上与 有很大不同chmod
。
一个重要的区别还没有被提及:
chmod
套, 但umask
清除(限制)权限位。这就是为什么它被称为“掩码”(如“位掩码”)。正如大卫写道,
umask
是一个(进程级)配置设置,因此它不适用于任何特定文件(与相反chmod
)。这引出了另一个重点:
umask
不仅限于文件。它也适用于创建目录。(另请参阅例如这个答案。同样重要的是,
chmod
命令本身不受当前配置的影响umask
。
现在,举个例子来说明该怎么umask 666
做:
它将告诉当前进程(例如你的 shell),任何新的文件系统对象都应该用R
+W
位(4 + 2 = 6)来创建已删除(无论创建时隐式或显式请求什么权限)。(因此,666 不是一个非常实用的值,因为它只允许X
设置(执行)位,但对于不可读的文件...)
例如:
$ touch foo; ls -la foo
-rw-r--r-- ... foo <-- default permissions
$ umask 666
$ touch bar; ls -la bar
---------- ... bar <-- perms. after the new umask (restriction) is set
$ mkdir foodir; ls -la | grep foodir
d--x--x--x ... dir <-- not very practical for dirs, either
$ chmod 777 bar; ls -la bar
-rwxrwxrwx .... bar* <-- chmod happily ignores the current umask
$ umask 022
$ touch bong; ls -la bong
-rw-r--r-- ... bong <-- (so, it seems this was the default umask)
$ chmod 666 bong; ls -la bong
-rw-rw-rw- ... bong <-- no surprise of any kind here
答案3
UMASK = chmod 777 – umask 权限
umask 022 => 777 - 022 => chmod 755
umask 077 => 777 - 077 => chmod 700
umask 002 => 777 - 002 => chmod 775
umask 007 => 777 - 007 => chmod 770
umask 027 => 777 - 027 => chmod 750
umask 177 => 777 - 177 => chmod 600
类似这样的。
答案4
目录/文件的默认权限是 umask 022,因此,目录默认设置为权限 755 ( drwx-rw-rw
),文件默认设置为权限 644 ( -rw-r--r--
)。基本上,对于目录,您要从 777 中减去所需权限的八进制值,对于文件,您要从 666 中减去所需权限的八进制值。因此,从上面的示例中可以看出:
(directory) umask 022 => 777 - 022 = 755
(file) umask 022 => 666 - 022 = 644
umask octal
您可以在源代码中找到该命令的结果使用 umask 时,取决于八进制以及它是文件还是目录。
然而,如果你chmod 022 <file>
对于一个目录,你应该得到这个:d----w--w-
这没有多大意义。
下面,您将找到可以检索的八进制值的详细描述这里由 Somnath Muluk 撰写,同样提供了丰富的资料。
N Description ls binary
0 No permissions at all --- 000
1 Only execute --x 001
2 Only write -w- 010
3 Write and execute -wx 011
4 Only read r-- 100
5 Read and execute r-x 101
6 Read and write rw- 110
7 Read, write, and execute rwx 111