我知道什么是ugoa(所有者、组、其他人、全部)或rwx(读取/正确/执行)或 4,2,1 或-
, f
, d
, l
,我试图阅读man chmod
以了解什么是大写X
,chmod
但没有它的一个条目。然后我在 posix/chmod 中阅读了这篇文章,但被困在了这段话中:
仅当目标 a) 是目录 b) 已经为用户、组和其他中的任何一个设置了至少一个可执行位时,才设置可执行位。
我还在这篇文章中读到了这个代码示例:
chmod -R u=rwX,g=rX,o=rX testdir/
testdir/
我知道关于所有者 (u)、组 (g) 和其他 (o)的 , 有递归权限,但我承认我仍然错过了大写 X 的意图。
也许这里的教学措辞可以对此有所了解(我在这里发表这篇文章的主要原因是因为我没有找到关于这个的 SE 会议)。
更新
对不起,我错过了那个男人。我没想到 X 会出现在参数列表之前,我认为搜索返回 x 而不是 X,我的错。
手册页说:
POSIX说:
这是一个条件权限标志:
chmod
查看它当前正在处理的任何内容,如果它是一个目录,或者它是否在其当前权限(所有者、组或其他)中设置了任何执行位,它就好像请求的权限是x
,否则它会忽略它。chmod
在应用特定指令时验证条件X
,因此您可以在同一运行中清除执行位,a-x,a=rwX
仅在目录上设置可执行位。您可以通过查看
stat
输出的“访问”部分或ls -l
. 执行位由 表示x
。-rwxr-xr-x
对可执行文件通用,表示为所有者、组和其他用户设置了可执行位;-rw-r--r--
其他文件通用,表示未设置可执行位(但为所有人设置了读取位,为所有者设置了写入位)。请参阅了解 UNIX 权限及其属性,其中包含更多详细信息。因此,在您的示例中,
u=rwX
将所有者权限设置为在所有情况下读取和写入,对于目录和可执行文件,执行;对于组 (g=rX
) 和其他 (o=rX
) 也是如此,读取和执行目录和可执行文件。该运算符的目的是允许用户提供
chmod
各种文件和目录,并获得正确的执行权限(假设没有一个文件设置了无效的执行位)。它避免了必须区分文件和目录(如在传统的find . -type f -exec chmod 644 {} +
和find . -type d -exec chmod 755 {} +
命令中),并尝试以合理的方式处理可执行文件。(请注意,macOS
chmod
显然只支持X
操作+
。)来自
man chmod
:(强调我的)。
然而,这并没有很清楚地说明它。本文有两条规则来阐明它的作用:
例如,我们对目录发出以下 chmod 命令:
使用大写的 X,上述命令根据以下两条规则设置可执行属性:
如果文件是一个目录,那么它为所有者、组和世界设置了可执行属性,这意味着他们可以进入这个目录。
如果该文件是一个普通文件,那么它会将可执行属性添加到其权限中,如果该文件已经设置了一些执行位。如果文件没有设置执行位,则不会添加。
使用小写的 x 只用一个命令是不可能达到这个结果的。
希望澄清X的使用。
请不要点赞这个答案。这正是我从上面斯蒂芬基特的回答中所理解的,我认为这是正确的。
1)大写的 X
a=rwX
表示:找到的所有目录都将获得 x,并且在三个权限组之一中找到的所有常规文件至少具有 1 个可执行位,也将在所有三个组中获得 x。2)
a-x
(确保所有文件都丢失执行位)的组合,以及随后的a=rwX
说:在任何地方获取读取和写入位,并且仅在目录上执行位。