‘chmod u + x’与’chmod + x’
chmod u+x
和chmod +x
什么区别? 我已经看过很多教程说使用u + x来使脚本可执行。 但是,在chmod帮助或手册中没有提到u
。 省略你似乎也没有任何影响。 这只是一个不赞成的论点吗? 谢谢。
chmod
的手册页涵盖了这一点。
- 你代表用户。
- g代表组。
- o代表他人。
- 一个代表所有人。
这意味着chmod u+x somefile
将仅授予该文件执行权限的所有者,而chmod +x somefile
与chmod 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
添加到允许的每个人。
所以,如果我的环境的umask
是0002
:
$ umask 0002 $ umask -S u=rwx,g=rwx,o=rx
在这种情况下(这是大多数系统的默认情况),它会向用户(所有者),组和其他人添加x
,它与chmod ugo+x
或chmod a+x
完全相同,或者更详细的forms:
chmod u+x,g+x,o+x
你能发现chmod u+x,g+x,o+x
和umask -S
的输出之间的联系吗?
现在让我们将当前shell的umask
更改为0003
:
$ umask 0003 $ umask 0003 $ umask -S u=rwx,g=rwx,o=r
正如您所看到的,现在只有所有者和组将获得可执行位而不是其他位。 这意味着chmod +x
现在等于chmod u+x,g+x
或chmod ug+x
。
提问时间!
如果我在将umask
设置为0003
后在文件上运行chmod +w
会发生什么?
与以前相同,它只影响文件的user
和group
,因为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 +x
或chmod 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的值。