umask 和 chmod 有什么区别

umask 和 chmod 有什么区别

我完全搞不清楚 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

  1. 一个重要的区别还没有被提及: chmod , 但umask 清除(限制)权限位。这就是为什么它被称为“掩码”(如“位掩码”)。

  2. 正如大卫写道umask是一个(进程级)配置设置,因此它不适用于任何特定文件(与相反chmod)。

  3. 这引出了另一个重点:umask不仅限于文件。它也适用于创建目录。(另请参阅例如这个答案

  4. 同样重要的是,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

相关内容