当要使文件可执行时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+xx将所有这些都考虑在内的情况下。正如@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