“ chmod + x”和“ chmod 755”有什么区别?


61

当要使文件可执行时chmod 755chmod +x和之间的区别是什么?何时使用?我至今只使用了chmod +x和我刚才读的东西,它曾经chmod 755和我不知道它是否是更好地使用chmod 755chmod +x


9
chmod +x设置所有可执行文件标志,而不更改其他权限。chmod 755设置rwxr-xr-x
ravery '17


5
@ravery:你好!您已经找到了评论部分,该区域专门讨论和要求澄清。要提供答案/解决方案,您应该使用下面的“答案”部分(寻找红色的大“发布您的答案”按钮)。希望有帮助!
Lightness Races in Orbit

Answers:


144

简洁版本:

为了能够比较它们,我们应该从相同的角度来看它们,因此:

  • chmod +x等于chmod ugo+x(基于umask值)
  • chmod 755 等于 chmod u=rwx,go=rx

说明:

首先,您应该知道:

  1. + 表示将此权限添加到文件已具有的其他权限中。
  2. = 表示忽略所有权限,完全按照我提供的方式进行设置。

    • 因此,所有“读取,写入,执行,粘性位,suid和guid”都将被忽略,仅设置提供的内容。
  3. 读取= 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+xu+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=rxchmod u=rwx,go=rx

在此处输入图片说明


15
一个非常重要的附加功能:使用chmod 755时设置这些位,并且还清除所有suid / sgid / sticky位(可能在那里)(例如:NEVER chmod 755 /tmp)。755应该总是被认为是0755,即第一八进制组比特也被设置为0。
奥利弗杜拉克

1
几乎完美,所以过早+1(是的,您从我这里得到了徽章
:)

@OlivierDulac谢谢,我不想涉及太多细节,但是我将更新答案……
Ravexina

1
我想我刚刚了解了权限的工作原理,谢谢!
比奇


37

chmod +x 将所有用户的执行权限添加到现有权限中。

chmod 755设置755文件的权限。

755 表示拥有者的完全权限,而他人则具有读取和执行权限。


7

看它(我觉得这更容易理解),另一种方式是chmod +x在设置权限相对,而chmod 755正在建立他们绝对

chmod 755文件上运行后,其权限将为 755或rwxr-xr-x

chmod +x只会获取现有权限,并向文件添加执行权限。


6

我建议查看chmod手册页以获取详细信息。您仅看到chmod命令可以使用两种不同的操作模式来完成更改权限的相同任务。

八进制模式使用数字并设置文件的整个权限。字符模式使用字母,通常用于仅修改现有权限。

chmod 755rwxr-xr-xchmod +x调整权限时设置, 以便所有者,组和世界都添加了可执行权限。假设该文件具有默认文件权限,rwxr--r--则会将其调整为与755个文件相同的权限rwxr-xr-x


5

区别在于设置了哪些权限以及使用哪种权限进行设置。

随着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

3

一个重要的区别是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>格式,并意识到您必须指定所有位,而不仅是增量。


1

除了这些漂亮的答案之外,我还要提及一个很小但可能很重要的区别。该命令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测试
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.