为什么 chmod +w 不给 other(o) 写权限

Rav*_*vta 23 linux command-line permissions chmod

当我运行chmod +w filename它不给写权限other,它只是给写权限usergroup

执行此命令后

chmod +w testfile.txt
Run Code Online (Sandbox Code Playgroud)

运行ls -l testfile.txt版画

-rw-rw-r-- 1 ravi ravi 20 Mar 10 18:09 testfile.txt
Run Code Online (Sandbox Code Playgroud)

但在情况下+r+x它可以正常工作。

我不想使用chmod ugo+w filename.

Prv*_*dav 29

你的具体情况

在您的特定情况下,我们可以猜测您的当前umask值为002(这是一个常见的默认值),这解释了您的惊讶。

在该umask值为002(所有数字为八进制)的特定情况下。

  • +r意味着ugo+r因为002 & 444000,它允许设置所有位
  • +x意味着ugo+x因为002 & 111000,它允许设置所有位
  • +w意味着ug+w因为002 & 222002,这会阻止设置“o”位。

其他例子

  • umask 022 +w将意味着u+w
  • umask 007 +rwx将意味着ug+rwx
  • umask 077 +rwx将意味着u+rwx

什么会符合您的期望

当您更改umask为 时000,通过执行

umask 000
Run Code Online (Sandbox Code Playgroud)

在你的终端中,然后

chmod +w file
Run Code Online (Sandbox Code Playgroud)

将权限设置为 ugo+w。

边注

正如 ilkkachu 所建议的那样,请注意,umask 000这并不意味着每个人都可以读写您的所有文件。

但是umask 000意味着对您机器上的任何用户帐户(可能包括运行服务器服务的程序)具有某种访问权限的每个人都可以读取和写入您使用该掩码创建的所有文件,并且不会更改(如果包含目录到根目录也允许它们)。

  • umask 000 意味着对您机器上的用户帐户(可能包括运行服务器服务的程序)有某种访问权限的每个人都可以读取和写入您使用该掩码创建的所有文件,并且不会更改,要清楚 (4认同)
  • _"+r 表示 ugo=r"_ -- 不,它不是,这意味着为 umask 允许的那些方设置 `r` 位。这在例如 GNU chmod 和 FreeBSD chmod 的手册以及标准中都有明确说明。`+x` 也一样。对于`+w` 你是对的,对于那个特定的umask。 (4认同)
  • 此外,将 umask 设置为 `0` _doesn't_ 意味着每个人都可以读取和写入_所有_您的文件,因为许多应用程序创建的文件在模式为 `0600` 时特别私密,这意味着该组和其他人没有任何访问权限,不管 umask。 (4认同)
  • @Debian_yadav,这正是重点:`umask` 是 `+r` 行为的重要组成部分,而不是旁注。此外,即使假设 umask `002`,`chmod +r` 并不意味着 `chmod ugo=r`,它意味着 `chmod ugo+r` (2认同)

Sté*_*las 28

和:

chmod +<perms>
Run Code Online (Sandbox Code Playgroud)

perms 被添加到usergroupother但仍然应用 umask 。它确保文件没有被授予比新创建的文件更多的权限。

如果您想将权限添加到用户其他人而不考虑 umask,请使用

chmod a+<perms>
Run Code Online (Sandbox Code Playgroud)

这是缩写

chmod ugo+<perms>
Run Code Online (Sandbox Code Playgroud)