posix / chmod 中的大写 X 是什么?

posix / chmod 中的大写 X 是什么?

我知道是什么乌戈亚(所有者、组、其他、全部)或读写(读/右/执行)或 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,这是我的错。

答案1

联机帮助页说:

仅当文件是目录或已具有某些用户的执行权限时才执行/搜索 ( X)

POSIX说:

烫发象征X如果文件是目录或者当前(未修改的)文件模式位至少设置了一个执行位(S_IXUSR、S_IXGRP 或 S_IXOTH),则应表示文件模式位的执行/搜索部分。如果文件不是目录并且当前文件模式位中没有设置任何执行位,则应忽略它。

这是一个条件权限标志: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 {} +),并尝试以合理的方式处理可执行文件。

(注意苹果系统chmod显然只支持X操作+。)

答案2

来自man chmod

字母 rwxXst 为受影响的用户选择文件模式位:读 (r)、写 (w)、执行(或搜索目录)(x)、 仅当文件是目录或已具有某些用户 (X) 的执行权限时才执行/搜索,设置执行时的用户或组 ID (s)、限制删除标志或粘滞位 (t)。

(强调我的)。

但这并不能说明太多问题。这篇文章有两条规则澄清它的作用:


例如,我们对目录发出以下 chmod 命令:

# chmod -R u=rwX,g=rX,o=rX testdir/`  

使用大写的 X,上面的命令根据以下两个规则设置可执行属性:

  1. 如果该文件是一个目录,那么它为所有者、组和世界设置可执行属性,这意味着他们可以进入该目录。

  2. 如果该文件是常规文件,并且该文件已经设置了某些执行位,则它将在其权限中添加可执行属性。如果文件没有设置执行位,则不会添加任何执行位。

使用小写的 x 仅通过一个命令不可能获得此结果。


希望澄清使用X

答案3

请不要点赞这个答案。这正是我从上面斯蒂芬·基特的回答中所理解的,我接受它是正确的。


1)大写的 X 表示a=rwX:找到的所有目录都将获得 x,并且找到的所有常规文件在三个权限组之一中至少有 1 个可执行位,也将在所有三个组中获得 x。

2)的组合为a-x(确保所有文件丢失执行位),随后a=rwX说:获取所有位置的读取和写入位,以及仅在目录上的执行位。

相关内容