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

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

当要使文件可执行时chmod 755,和之间有什么区别chmod +x,我什么时候应该使用哪个?到目前为止,我只使用过chmod +x,我刚刚读到一些东西,它使用了,我无法判断使用或chmod 755是否更好。chmod 755chmod +x

答案1

简洁版本:

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

  • 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不再有任何效果。
  • 它不影响其他模式(权限)。
  • 您还可以使用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

在此处输入图片描述

答案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

相关内容