umask和chmod有什么区别


13

我对umask和chmod完全感到困惑。两者均用于授予文件权限。但是区别到底在哪里,何时使用它们。

我已经阅读了在线文档,但两者对我来说都一样。

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

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

默认情况下,unix给出文件022 umask代码。

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

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

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


2
umask设置一个环境变量,该变量将自动为新创建的文件设置文件权限。chmod更改现有文件的权限。
DavidPostill

1
@DavidPostill。不,umask不设置“环境变量”,它的作用是设置当前Shell执行环境的文件模式创建掩码。
fpmurphy

@ fpmurphy1感谢您的澄清:)
DavidPostill

Answers:


11

区别在于umask仅需要新文件。如您所述,umask设置了文件/目录在创建时将拥有的默认权限,但是此后umask不再影响它们。

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

因此,如果运行umask,它将对现有文件完全无效。


2
您不能umask在文件上使用,它没有file参数。
DavidPostill

是的,改写了那部分。
nKn

4

umaskchmod其实有很大的不同。

  1. 尚未提及重要的区别: chmod设置,但umask 清除(限制)权限位。这就是为什么它被称为“掩码”(如“位掩码”)的原因。

  2. 正如David 所写umask是(进程级)配置设置,因此它不适用于任何特定文件(与相对chmod)。

  3. 这带给我们另一个重要的观点:umask不仅限于文件。创建目录时也会应用它。(另请参见此答案。)

  4. 同样重要的是,chmod命令本身不受当前配置的影响umask

现在,以您的示例为例umask 666

它将告诉当前进程(例如您的外壳程序),应该创建任何新的文件系统对象,并删除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

0

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

这样的事情。


0

目录/文件的默认权限为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时,您可以umask octal在源代码中找到命令的结果,具体取决于八进制以及它是文件还是目录。

资源

但是,如果您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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.