chmod u+x
和just有chmod +x
什么区别?我看过很多教程,说它们u+x
可以使脚本可执行。但是,省略它们u
似乎没有任何效果。
chmod u+x
和just有chmod +x
什么区别?我看过很多教程,说它们u+x
可以使脚本可执行。但是,省略它们u
似乎没有任何效果。
Answers:
手册页对此进行了chmod
介绍。
这意味着chmod u+x somefile
将只授予该文件执行者的权限,而chmod +x somefile
与相同chmod a+x somefile
。
符号模式的格式为
[ugoa...][[+-=][rwxXstugo...]...][,...]
。可以给出多个符号运算,以逗号分隔。字母“ ugoa”的组合控制将更改哪些用户对该文件的访问权限:拥有该文件的用户(u),该文件组中的其他用户(g),不在该文件组中的其他用户(o),或所有用户(a)。如果没有给出任何结果,则效果就像给出了“ a”一样,但是不影响umask中设置的位。
chmod +x file
与以下效果有所不同chmod a+x file
-有关详细信息,请参见Ravexina的答案。
首先,我建议您阅读以下问题以及下面链接的答案:
它可以帮助您了解所有需要了解的必要部分。
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
和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
(“全部加可执行位”)使文件对所有人都可执行。
如果对目录执行此操作,则会使该目录可搜索。即,您可以列出具有+ 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
和文件1为其所有者获得了可执行位,但是第二个文件却什么也没做,因为它正在考虑umask的值。