当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

在制作文件可执行文件时,chmod 755chmod +x之间的区别是什么?我何时使用哪个?我到目前为止只使用过chmod +x,我只是读了一些东西而且它使用的是chmod 755,我不知道是否更好地使用chmod 755chmod +x

最佳解决方法

精简版:

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

  • chmod +x等于chmod ugo+x(基于umask值)

  • chmod 755等于chmod u=rwx,go=rx


说明:

首先你应该知道:

  1. +表示将此权限添加到该文件已有的其他权限。

  2. =表示忽略所有权限,完全按照我提供的方式设置它们。

    • 因此,将忽略所有“读取,写入,执行,粘性位,suid和guid”,并且仅设置提供的那些。

  3. 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+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

command-line,permissions,chmod,ubuntu

次佳解决方法

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,executerwx因此,正是因为顺序相同,转换为二进制表示时的单个数字,将设置数字中相应位置位为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>格式,并意识到你必须指定所有位而不仅仅是一个增量。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2264.html,未经允许,请勿转载。