问题描述
在制作文件可执行文件时,chmod 755
和chmod +x
之间的区别是什么?我何时使用哪个?我到目前为止只使用过chmod +x
,我只是读了一些东西而且它使用的是chmod 755
,我不知道是否更好地使用chmod 755
或chmod +x
。
最佳解决方法
精简版:
为了能够比较它们,我们应该从相同的角度来看待它们,所以:
-
chmod +x
等于chmod ugo+x
(基于umask
值) -
chmod 755
等于chmod u=rwx,go=rx
说明:
首先你应该知道:
-
+
表示将此权限添加到该文件已有的其他权限。 -
=
表示忽略所有权限,完全按照我提供的方式设置它们。-
因此,将忽略所有“读取,写入,执行,粘性位,suid和guid”,并且仅设置提供的那些。
-
-
read = 4,write = 2,execute = 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
将不再有任何效果。 -
它不会触及其他mod(权限)。
-
您还可以使用
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
。
次佳解决方法
chmod +x
将所有用户的执行权限添加到现有权限。
chmod 755
为文件设置755
权限。
755
表示所有者的完全权限以及其他人的读取和执行权限。
第三种解决方法
查看它的另一种方法(我觉得更容易理解)是chmod +x
相对设置权限,而chmod 755
绝对设置它们。
在文件上运行chmod 755
后,其权限将为755或rwxr-xr-x
。
chmod +x
将只获取现有权限,并为该文件添加执行权限。
第四种方法
我建议您查看chmod手册页以获取完整的详细信息。您只是看到chmod命令可用的两种不同操作模式,以完成更改权限的相同任务。
八进制模式使用数字并设置文件的整个权限。字符模式使用字母,通常用于修改现有权限。
chmod 755
设置rwxr-xr-x
,而chmod +x
调整权限,以便所有者,组和世界都添加了可执行权限。假设rwxr--r--
的默认文件权限,它会将其调整为与rwxr-xr-x
的755相同的权限。
第五种方法
不同之处在于设置权限以及用于设置权限的模式。
使用chmod +x
,您可以为所有人设置可执行位 – 所有者,所有者组和其他用户。这称为符号模式。引用man chmod
:
The operator + causes the selected file mode bits to be added to the existing file mode bits of each file; – causes them to be removed; and = causes them to be added and causes unmentioned bits to be removed except that a directory’s unmentioned set user and group ID bits are not affected.
使用chmod 755
,您使用八进制数,其二进制表示用于设置特定的权限位。第一个(左)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
第六种方法
一个重要的区别是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>格式,并意识到你必须指定所有位而不仅仅是一个增量。