chmod u+x
和之间有什么区别chmod +x
?我见过很多教程说使用u+x
使脚本可执行。但是,省略u
似乎没有任何效果。
答案1
的手册页chmod
涵盖了这一点。
- 你代表用户。
- G代表团体。
- o代表其他人。
- A代表全部。
这意味着chmod u+x somefile
将只授予该文件的所有者执行权限,而chmod +x somefile
与相同chmod a+x somefile
。
符号模式的格式为
[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+x
或chmod ug+x
。
提问时间!
如果我设置为chmod +w
后在文件上运行会发生什么?umask
0003
与之前相同,它仅影响文件的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 的值。