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


11

我知道什么是ugoa(所有者,组,其他全部)或RWX(读/右/执行)或4,2,1或-fdl,,我试图在阅读man chmod理解什么是资本Xchmod,但有没有一个条目。然后,我在posix / chmod中阅读了这篇文章,但被这段文章所困:

仅当目标a)是目录b)已为用户,组等中的任何一个设置了至少一个可执行位时,才设置可执行位。

我还读了这篇文章,给出了以下代码示例:

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

我了解testdir/对所有者(u),组(g)和其他人(o)拥有的递归许可,但我承认我仍然怀念大写X的意图。

也许此处的教学措辞可以对此有所启发(我在此处发布此文档的主要原因是因为我没有找到关于此的SE会议)。

更新资料

抱歉,我错过了那个男人。我没有想到X会出现在参数列表之前,我以为搜索返回x而不是X,这很糟糕。

Answers:


20

手册页说:

仅当文件是目录或已经对某些用户具有执行权限时才执行/搜索(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 {} +命令),并试图以应对一个明智的方式可执行文件。

(请注意,MacOS的chmod显然只支持X针对+操作)。


因此,我确实看到了它,并且对“位集”一词有错误的理解。拥有所有者:root和group:root和权限---, ---, ---的inode是没有“位集”的indo?
Arcticooling

是的,---------意味着未设置任何位。您可能会发现此问题有用。
斯蒂芬·基特

Stephen,我认为在答案的开头添加术语“执行位集”(我将描述为...,...,...)和“无效执行位集”(我将描述为---,---,---)的定义可能有助于使其更具说服力并降低任何人错过的机会;这是我最初对此所为。
Arcticooling

@Arcticooling,好吧,权限是按位编码的,例如,GNU手册页上chmod说它“更改了每个给定文件的文件模式位”等。因此,在上下文中,“执行位”指的是三个可能的(ugo)+x权限。在我看来,“没有设置”听起来很奇怪,因为它没有提到任何上下文。
ilkkachu

@Arcticooling我添加了一个段落,目的只是希望澄清您的理解-“执行位设置” ...,...,...实际上并不意味着什么,也不是“无效的执行位设置”(对此有什么无效?)。
斯蒂芬·基特

5

来自man chmod

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

(强调我的)。

但是,这并不能很清楚地说明它。本文有两个规则来阐明其作用:


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

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

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

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

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

使用小写字母x,仅使用一个命令就不可能获得此结果。


希望澄清使用X


1

请不要竖起这个答案。这正是我从斯蒂芬·基特(Stephen Kitt)的回答中所理解的,我认为这是正确的。


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

2)的组合a-x(即确保所有文件丢失执行位),以及随后的a=rwX说:无处不在获取读写位,只有对目录执行位。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.