‘chmod u + x’与’chmod + x’

chmod u+xchmod +x什么区别? 我已经看过很多教程说使用u + x来使脚本可执行。 但是,在chmod帮助或手册中没有提到u 。 省略你似乎也没有任何影响。 这只是一个不赞成的论点吗? 谢谢。

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

  • 代表用户。
  • g代表组。
  • o代表他人。
  • 一个代表所有人。

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

chmod手册页说:

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

用户访问文件的字母’ugoa’控件的组合将被更改:拥有它的用户(u),文件组中的其他用户(g),不在文件组中的其他用户(o),或所有用户(a)。 如果没有给出这些效果,则效果就好像给出’a’,但是umask中设置的位不受影响。

只需做+x就会将它应用于所有标志:[u] ser,[g] roup,[o] thers。

输入man chmod以获取更多信息。

要求

首先,我建议您阅读以下相关问题和答案:

  • “chmod + x”和“chmod 755”有什么区别?
  • 什么是“umask”,它是如何工作的?

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


精简版

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

说明

chmod a+x的结果是为每个人设置可执行位(Owner,Group,Others),这对吗?

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

所以,如果我的环境的umask0002

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

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

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

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

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

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

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


提问时间!

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

与以前相同,它只影响文件的usergroup ,因为3也会删除写入权限(2)。


奖金

当您删除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 

chmod u+x将使文件对您的用户可执行(它只会为您的用户添加它,尽管它可能已由组所有者执行,或“其他”)。

chmod +xchmod a+x (’all plus executable bit’)使文件可供所有人使用。

如果对目录执行此操作,则会使目录可搜索。 即,您可以列出您拥有+ x权限的目录的内容。

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

  • chmod +x file意味着在考虑umask同时将可执行位添加到所有者,组和其他人(首先使用umask检查然后应用mod,它可能具有基于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的值。