我在 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
与chmod
实际上非常不同。
还没有提到一个重要的区别:
chmod
set,但umask
清除(限制)权限位。这就是为什么它被称为“掩码”(如“位掩码”)。
正如 David所写, ,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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17822 次 |
最近记录: |