为什么我无法在 linux 中使用 chmod 向用户授予写权限?

Chi*_*ath 5 linux chmod

当前的文件权限如下所示:

$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用以下方法授予写入权限chmod

$ chmod +x+r+w file
Run Code Online (Sandbox Code Playgroud)

之后,文件权限仍然是这样的:

$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file
Run Code Online (Sandbox Code Playgroud)

写权限不授予其他人。为什么会发生这种情况?

Ste*_*itt 23

当您运行时chmod +x+r+w file所有位都会被设置,除了那些被您的umask. 您umask可能(至少)屏蔽了其他用户\xe2\x80\x99 写入位,因此该+w部分最终会被忽略。

\n

因此,对于典型umask的 022,任何chmod不指定应为谁设置权限的命令最终都会忽略对组 xe2x80x99s 和其他 xe2x80x99 写入位的任何指定更改。

\n

要设置所有位(忽略 )umask,您需要指定为谁设置它们:

\n
chmod a+rwx file\n
Run Code Online (Sandbox Code Playgroud)\n

或者更明确地说,

\n
chmod ugo+rwx file\n
Run Code Online (Sandbox Code Playgroud)\n

(或任何适当的子集ugo,用于用户、组和/或其他人)。

\n

\xe2\x80\x99s 也可以指定数字权限而不是符号权限;有关详细信息,请参阅了解 UNIX 权限和文件类型

\n

请注意,umask屏蔽行为也适用于清除位,这可能会产生令人惊讶的结果:只会清除由!chmod -w file设置的写入位。chmod +w file继续典型umask的 022,这意味着chmod -w不会接触组 xe2x80x99 或其他 xe2x80x99 写入位,如果它们已经设置,则将其保留。(GNU coreutils\xe2\x80\x99chmod对此发出了有益的警告。)

\n

  • 哦,最后一部分确实令人惊讶。看起来 GNU coreutils 的 `chmod` 警告了这一点:`chmod 777 test.txt; chmod -w test.txt` 给出 `chmod: test.txt: 新权限是 r-xrwxrwx,而不是 r-xr-xr-x` (7认同)