chmod 命令在 Linux 上的工作原理

当我们在 Linux 或 MacOS 等基于 unix 的系统上创建文件或文件夹时,它具有一组权限和访问模式。这些最常使用chmod命令进行操作,该命令允许我们更改谁可以访问和运行不同的文件。

让我们看看是如何chmod工作的。首先,该chmod命令具有以下语法,其中[OPTIONS]是可选设置,[MODE]是我们要赋予文件或文件夹的权限,x是我们要应用的文件chmod

chmod [OPTIONS] [MODE] x

文件权限在 Linux 和 MacOS 上的工作原理#

在我们开始使用 chmod 之前,让我们看看权限在 Linux 和 MacOS 上是如何工作的。如果您进入任何文件夹并运行ls -l,您将看到如下一行:

drwxr-xr-x 5 root root 160 23 Feb 22:32 node_modules

此行的第一部分是权限设置 – 即drwxr-xr-x. 让我们分解一下这意味着什么:

d  rwx  r-x  r-x
^   ^    ^    ^
|   |    |    |
|   |    |    └ - -  the permission of "others", i.e. anyone who is not an owner or a group
|   |    └ - - the group's permissions 
|   └ - - the owner's permissions
└ - - File type - is not related to access

上面的“其他人”是指不是所有者或用户组的任何人。如果您想知道所有者和组是谁,它们是5我们示例中数字后给出的两个名称:

drwxr-xr-x 5 root root 160 23 Feb 22:32 node_modules
|--------|   |--| |--|
^            ^    ^
|            |    |
|            |    └ - - group
|            └ - - owner
└ - - permission settings

Linux 和 MacOS 中的权限是什么意思#

在上面的权限中,我们有 3 组访问权限 – rwxr-xr-x。每个字母代表一种访问方式。如果缺少一个字母,则该组个人或所有者没有该访问权限。字母代表:

  • r– 读取权限
  • w– 写入或编辑权限
  • x– 执行访问(对于可执行文件
  • t– 粘性位,这意味着只有所有者或 root 用户才能删除或重命名文件或文件夹。如果它存在,它会附加到权限字符串的末尾,并且比其他的不太常见。
  • s– 为用户或组提供升级的执行权限。

因此,虽然rwx提供读、写和执行访问权限,r-x但只提供读和执行访问权限。

如何在 Linux 和 MacOS 中使用 chmod#

现在我们已经介绍了基础知识,让我们看看 chmod 是如何工作的。当你第一次看到它时,它的格式chmod可能会有点混乱,所以让我们分解一下。

我们首先提到受影响的用户。我们在这里有 4 个选项:

  • u, 对于所有者
  • g, 对于组
  • o, 为他人
  • a, for all, 也可以写成ugo.

然后是我们想要更改权限的方式:

  • 如果我们要授予一组用户或用户的权限,我们 write +,因此+x将授予执行权限,+rx并将授予读取和执行权限。
  • 如果我们想撤销权限,我们 write -,因此-rwx会取消读取、写入和执行权限。
  • 如果我们想完全替换权限,我们使用=, so=r将授予读取权限,但如果它们存在则删除执行和写入。同样,=rw与读写访问相同,如果存在则删除执行。

我们写这些都没有空格,后跟文件名。因此,以下将授予所有者对当前目录中名为 file.txt 的文件的读取权限:

chmod u+r file.txt

或者,如果我们想让所有者、组和其他用户具有读写权限,我们可以编写以下代码:

chmod ugo+rw file.txt

同样,以下内容将用读写权限替换所有者和组权限,但删除他们可能拥有的任何执行权限:

chmod ug=rw file.txt

如果我们想为不同的用户提供不同的访问类型,我们可以用逗号分隔它们。下面将授予所有者rwx访问权限、组、rw-访问权限和所有其他人r--访问权限:

chmod u=rwx,g=rw,o=r file.txt

如果我们在等号后不写任何内容,则假定所有访问权限都被撤销。因此,如果相反,我们希望该组没有访问权限,我们可以编写以下内容:

chmod u=rwx,g=,o=r file.txt

这也适用于目录,就像它对我们的file.txt

如何使用 chmod 递归更改目录的模式#

有时,我们不仅要更改目录的权限,还要更改其中的所有文件。为此,我们可以使用-Rwith 选项chmod递归地更改目录中的每个文件和文件夹。

这是一个例子:

chmod -R u=rwx myDirectory

使用数字使用 chmod 更改文件模式#

您可能已经看到chmod与数字而不是字母一起使用。这些数字最终遵循与上述相同的约定,但写出来要简单得多。每个用户权限都rwx被赋予一个特定的值:

  • r赋值为 4
  • w被赋予值 2
  • x赋值为 1

7这意味着mean4 + 2 + 1或的总值rwx。的值5将意味着4 + 1r-x。我们可以为ownergroup其他用户分别分配一个编号。所以给定这样的权限集:

rwx  r-x  --x
^    ^    ^
|    |    |
|    |    └ - -  the permission of "others", i.e. anyone who is not an owner or a group
|    └ - - the group's permissions 
└ - - the owner's permissions

所有者的权限值为7,组的权限值为5,任何其他用户的权限值为1。所以我们可以把它写成751.

要将这些权限应用于我们的文件,file.txt那么,我们可以编写以下内容:

chmod 751 file.txt

使用 chmod 将粘滞位添加到数字权限

要为数字权限添加粘性位,我们只需1在开头添加 aa,因此755带有粘性位的权限变为1755.

对于许多人来说,数字权限是首选,因为它们比字母更清晰、更容易理解。无论您喜欢哪种方式,两者都以相同的方式工作,因此请根据自己的喜好进行选择。