当要使文件可执行时chmod 755
,chmod +x
和之间的区别是什么?何时使用?我至今只使用了chmod +x
和我刚才读的东西,它曾经chmod 755
和我不知道它是否是更好地使用chmod 755
或chmod +x
。
当要使文件可执行时chmod 755
,chmod +x
和之间的区别是什么?何时使用?我至今只使用了chmod +x
和我刚才读的东西,它曾经chmod 755
和我不知道它是否是更好地使用chmod 755
或chmod +x
。
Answers:
为了能够比较它们,我们应该从相同的角度来看它们,因此:
chmod +x
等于chmod ugo+x
(基于umask
值)chmod 755
等于 chmod u=rwx,go=rx
首先,您应该知道:
+
表示将此权限添加到文件已具有的其他权限中。=
表示忽略所有权限,完全按照我提供的方式进行设置。
读取= 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
您正在指定:
u=rwx
(所有者为4 + 2 + 1)g=rx
(群组为4 + 1)o=rx
(其他为4 + 1)所以chmod 755
就像:chmod u=rwx,g=rx,o=rx
或chmod u=rwx,go=rx
。
chmod 755
时设置这些位,并且还清除所有suid / sgid / sticky位(可能在那里)(例如:NEVER chmod 755 /tmp
)。755应该总是被认为是0755,即第一八进制组比特也被设置为0。
区别在于设置了哪些权限以及使用哪种权限进行设置。
随着chmod +x
你设置的可执行位全部-所有者,所有者组和其他用户。这称为符号模式。引用man chmod
:
运算符+导致将所选文件模式位添加到每个文件的现有文件模式位;-使它们被去除;和=导致添加它们并导致删除未提及的位,除非目录的未提及的设置用户和组ID位不受影响。
随着chmod 755
你使用的八进制数,其中的二进制表示是用来设置权限的特定位。前3个(左)对应于所有者权限,中3个对应于组权限,最后3个(最右)对应于所有其他用户的权限。位的顺序始终是相同的,read,write,execute
或者rwx
恰好因为顺序相同,所以将单个数字转换为二进制表示形式时,将设置其对应的位置位为1的允许位,并取消设置为0的允许位。具体来说:
7
为111(二进制),因此您要为所有者设置所有读,写和执行位。rwx
被设置。5
为二进制二进制数101,因此您要设置读取和执行但禁用写位,并且由于组和其他用户为8,因此这两个类别将具有相同的权限。这样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
一个重要的区别是chmod +受umask限制,而chmod <octal>不受限制。
考虑以下示例:
$ ls -l foo bar
---------- 1 gowenfawr users 0 Jul 7 16:40 bar
---------- 1 gowenfawr users 0 Jul 7 16:39 foo
$ umask
0022
$ chmod +w bar
$ umask 0002
$ chmod +w foo
$ ls -l foo bar
--w------- 1 gowenfawr users 0 Jul 7 16:40 bar
--w--w---- 1 gowenfawr users 0 Jul 7 16:39 foo
$
因此,如果您想以适合您的umask设置的方式对权限进行增量更改,请使用'+'语法。但是,如果要完全不考虑umask进行设置,请使用<octal>格式,并意识到您必须指定所有位,而不仅是增量。
除了这些漂亮的答案之外,我还要提及一个很小但可能很重要的区别。该命令chmod 755 file
等效于chmod 0755 file
。如果我们在设置了SETUID位或SETGID位的文件上运行此命令,它将删除SETUID / SETGID位。chmod +x file
将保持SETUID / SETGID位不变。我们可以在以下示例中看到这一点:
〜$触摸测试 〜$ chmod我们的测试 〜$ ll测试 -rwSrw-r-- 1个mook mook 0 Sep 14 00:49 test 〜$ chmod + x测试 〜$ ll测试 -rwsrwxr-x 1 mook mook 0 Sep 14 00:49 test 〜$ chmod 755测试 〜$ ll测试 -rwxr-xr-x 1 mook mook 0 Sep 14 00:49测试
chmod +x
设置所有可执行文件标志,而不更改其他权限。chmod 755
设置rwxr-xr-x