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的值。