当要使文件可执行时chmod 755
,和之间有什么区别chmod +x
,我什么时候应该使用哪个?到目前为止,我只使用过chmod +x
,我刚刚读到一些东西,它使用了,我无法判断使用或chmod 755
是否更好。chmod 755
chmod +x
答案1
简洁版本:
为了能够比较它们,我们应该从相同的角度来看待它们,因此:
chmod +x
等于chmod ugo+x
(基于umask
值)chmod 755
等于chmod u=rwx,go=rx
解释:
首先你应该知道:
+
表示将此权限添加到文件已有的其他权限中。=
意味着忽略所有权限,按照我提供的方式设置它们。- 因此,所有“读取、写入、执行、粘滞位、suid 和 guid”都将被忽略,并且仅设置提供的那些。
读取 = 4,写入 = 2,执行 = 1
以下是其背后的二进制逻辑(如果你感兴趣的话):
Symbolic: r-- -w- --x | 421 Binary: 100 010 001 | ------- Decimal: 4 2 1 | 000 = 0 | 001 = 1 Symbolic: rwx r-x r-x | 010 = 2 Binary: 111 101 101 | 011 = 3 Decimal: 7 5 5 | 100 = 4 / / / | 101 = 5 Owner ---/ / / | 110 = 6 Group ------/ / | 111 = 7 Others ---------/ | Binary to Octal chart
使用+x
您正在告诉添加(+
)可执行位(x
)给所有者,组和其他人。
- 它等于
ugo+x
或u+x,g+x,o+x
- 如果您没有指定所有者、组或其他人中的哪一个是您的目标,则万一
x
它会考虑所有这些。正如@Rinzwind 指出的那样,它基于umask
值,它会将位添加到umask
允许的位中。请记住,如果您像这样指定目标o+r
,则umask
不再有任何效果。 - 它不影响其他模式(权限)。
- 您还可以使用
u+x
它仅为所有者添加可执行位。
使用755
您正在指定:
- 7 -->
u=rwx
(所有者为 4+2+1) - 5 -->
g=rx
(团体为 4+1) - 5 -->
o=rx
(其他为 4+1)
所以chmod 755
就像:chmod u=rwx,g=rx,o=rx
或chmod u=rwx,go=rx
。
答案2
chmod +x
将所有用户的执行权限添加到现有权限中。
chmod 755
设置755
文件的权限。
755
意味着所有者拥有完全权限,而其他人拥有读取和执行权限。
答案3
另一种看待它的方式(我发现更容易理解)是chmod +x
设置权限相对地,而chmod 755
设置它们绝对地。
chmod 755
在文件上运行之后,其权限将要为 755,或rwxr-xr-x
。
chmod +x
只会获取现有的权限,并且添加该文件的执行权限。
答案4
区别在于设置了哪些权限以及使用哪种模式来设置它们。
为chmod +x
所有人(所有者、所有者组和其他用户)设置可执行位。这称为符号模式。引用man chmod
:
运算符 + 导致将选定的文件模式位添加到每个文件的现有文件模式位中;- 导致它们被删除;而 = 导致它们被添加并且导致未提及的位被删除,但目录未提及的设置用户和组 ID 位不受影响。
使用八进制数时chmod 755
,其二进制表示用于设置特定权限位。前 3 位(左侧)对应于所有者权限,中间 3 位对应于组权限,最后 3 位(最右侧)对应于所有其他用户的权限。位的顺序始终相同,read,write,execute
或者rwx
因此,正是因为顺序相同,单个数字在转换为二进制表示时,将设置数字中相应位置位为 1 的权限位,并取消设置 0 的权限位。具体来说:
- 八进制数
7
以二进制表示为 111,因此您要为所有者设置所有读取、写入和执行位;rwx
已设置。 - 八进制数
5
的二进制形式为 101,因此您设置了读取和执行位,但禁用了写入位,并且由于组和其他用户的权限为 5,因此这两个类别将具有相同的权限。r-x
设置如下。
以下是一个小的演示:
bash-4.3$ touch file1 file2
bash-4.3$ chmod +x file1
bash-4.3$ chmod 755 file2
bash-4.3$ ls -l file1 file2
-rwxrwxr-x 1 xieerqi xieerqi 0 7月 6 13:54 file1
-rwxr-xr-x 1 xieerqi xieerqi 0 7月 6 13:54 file2