umask 和 chmod 有什么区别

use*_*781 15 unix

我在 umask 和 chmod 之间完全混淆。两者都用于授予文件权限。但究竟区别在哪里以及何时使用它们。

我已阅读在线文档,但在我看来两者都相同。

umask:umask 用于设置默认文件权限。这些权限将在创建过程中用于所有后续文件。chmod :用于更改文件和目录权限。

根据我的理解,例如是否创建了文件 test.doc。

默认情况下,unix 为文件提供 022 umask 代码。

现在,当我将其更改为chmod 666 test.doc 时,我可以更改此文件的权限级别。

现在如果我对同一个文件使用umask 666怎么办。

当我使用chmod 666 和 umask 666时会发生什么区别

nKn*_*nKn 13

不同之处在于umask只需要新文件。正如您所说, umask 设置文件/目录在创建时将拥有的默认权限,但之后umask不再影响它们。

chmod,但是,需要在运行之前创建该文件。

因此,如果您运行umask,它将对现有文件完全没有影响。

  • 你不能在文件上使用 `umask`,它没有 `file` 参数。 (2认同)

Sz.*_*Sz. 7

umaskchmod实际上非常不同。

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

  2. 正如 David所写, ,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
Run Code Online (Sandbox Code Playgroud)