当前的文件权限如下所示:
$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file
现在我尝试使用以下方法授予写入权限chmod
:
$ chmod +x+r+w file
之后,文件权限仍然是这样的:
$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file
写权限不授予其他人。为什么会发生这种情况?
答案1
当你跑步时chmod +x+r+w file
,所有位都已设置,除了那些被您屏蔽的位umask
。您umask
可能(至少)掩盖了其他用户的写入位,因此该+w
部分最终会被他们忽略。
因此,对于典型umask
的 022,任何chmod
未指定应为谁设置权限的命令最终都会忽略对该组和其他人的写入位的任何指定更改。
要设置所有位,忽略umask
,您需要指定WHO你想将它们设置为:
chmod a+rwx file
或者更明确地说,
chmod ugo+rwx file
(或任何ugo
适当的子集,用于用户、组和/或其他人)。
也可以指定数字权限而不是符号权限;看了解 UNIX 权限和文件类型了解详情。
请注意,umask
屏蔽行为也适用于以下情况:清算位,这可能会产生令人惊讶的结果:只会清除由!chmod -w file
设置的写入位。chmod +w file
继续典型umask
的 022,这意味着chmod -w
不会触及该组或其他人的写入位,如果它们已经存在,则将其保留。 (GNUcoreutils
对此chmod
提出了有益的警告。)