'chmod u+x' 与 'chmod +x'

'chmod u+x' 与 'chmod +x'

chmod u+x和之间有什么区别chmod +x?我见过很多教程说使用u+x使脚本可执行。但是,省略u似乎没有任何效果。

答案1

的手册页chmod涵盖了这一点。

  • 代表用户。
  • G代表团体。
  • o代表其他人。
  • A代表全部。

这意味着chmod u+x somefile将只授予该文件的所有者执行权限,而chmod +x somefile与相同chmod a+x somefile

chmod 手册页说:

符号模式的格式为 [ugoa...][[+-=][rwxXstugo...]...][,...]。可以给出多个符号操作,以逗号分隔。

字母“ugoa”的组合控制哪些用户对文件的访问权限将被更改:拥有该文件的用户 (u)、文件组中的其他用户 (g)、不在文件组中的其他用户 (o) 或所有用户 (a)。如果未指定上述任何一项,则效果如同指定了“a”,但 umask 中设置的位不受影响。

答案2

要求

首先我建议你阅读这些问题和下面链接的答案:

它可以帮助您了解需要知道的所有必要部分。


简洁版本

  • chmod +x等于chmod ugo+x(基于umask值)
  • chmod a+x等于chmod ugo+x(不考虑umask价值)

解释

结果chmod a+x是将可执行位设置为所有人(所有者、组、其他人),很简单,对吧?

然而,chmod +x这有点棘手,它说使用价值umask,并基于该价值将其添加x到允许的每个人。

因此,如果umask我的环境是0002

$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx

它将添加x到用户(所有者)、组和其他人,在这种情况下(这是大多数系统的默认情况),它与完全相同chmod ugo+x或相同chmod a+x,或者以更详细的形式:

chmod u+x,g+x,o+x

chmod u+x,g+x,o+x你能发现和 输出之间的联系吗umask -S

现在让我们将umask当前 shell 的 更改为0003

$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r

正如您所看到的,现在只有所有者和组将获得可执行位,而其他人则不会。这意味着chmod +x现在等于chmod u+x,g+xchmod ug+x


提问时间!

如果我设置为chmod +w后在文件上运行会发生什么?umask0003

与之前相同,它仅影响文件的user和,因为 3 还删除了写权限 (2)。group


奖金

当你删除以下内容时,它具有相同的效果chmod -w

$ mkdir test
$ stat -c %A test
drwxrwxr-x
$ umask
0002
$ chmod +w test
$ stat -c %A test
drwxrwxr-x
$ chmod a+w test
$ stat -c %A test
drwxrwxrwx
$ chmod -w test
chmod: test/: new permissions are r-xr-xrwx, not r-xr-xr-x
$ stat -c %A test
dr-xr-xrwx

答案3

这样做+x会将其应用于所有标志:[u]ser,[g]roup,[o]thers。

类型man chmod了解更多信息。

答案4

  • chmod u+x file意味着将可执行位添加到文件的所有者,同时忽略umask(您的模式将被设置,毫无疑问)。

  • chmod +x file意味着将可执行位添加到所有者,组和其他人,同时考虑umask(首先检查umask然后应用 mods,它可能会产生基于 umask 值的不同效果)。


让我们创建两个文件:

$ touch file1 file2
$ ls -l file1 file2
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file2

现在我将其设置umask为“111”以删除可执行位:umask 111

$ chmod u+x file1
$ chmod  +x file2
$ ls -l file1 file2
-rwxrw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file2

正如您所看到的,chmod忽略了umask并且 file1 为其所有者获得了可执行位,但是第二个没有执行任何操作,因为它正在考虑 umask 的值。

相关内容