chmod命令如何在Linux上工作(附实例)

141 阅读5分钟

chmod命令在Linux上是如何工作的

当我们想改变一个特定文件或文件夹的访问或权限时,我们在基于Unix的系统如Linux和MacOS上使用chmod。让我们来看看它是如何工作的。

当我们在基于Unix的系统(如Linux或MacOS)上创建一个文件或文件夹时,它有一系列的权限和访问模式。这些最常见的是使用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组访问权限 -rwx,r-x, 和r-x 。每个字母代表一种访问类型。如果少了一个字母,这组个人或所有者就没有这个权限。这些字母代表。

  • r- 读取权限
  • w- 写或编辑权限
  • x- 执行权限(对于可执行的文件)
  • t- 一个粘性位,这意味着只有所有者或根用户可以删除或重命名该文件或文件夹。如果存在的话,它会被附加到权限字符串的末尾,而且比其他的权限更不常见。
  • s- 给予用户或组升级的执行权限。

因此,当rwx 给予读取、写入和执行权限时,r-x 只给予读取和执行权限。

如何在Linux和MacOS中使用chmod

现在我们已经涵盖了基本原理,让我们看看chmod 如何工作。当你第一次看到chmod ,它的格式可能会有点混乱,所以让我们把它分解一下。

我们首先要提到哪些用户受到影响。我们在这里有四个选项。

  • u,代表所有者
  • g,代表组
  • o,其他人
  • a,代表所有,也可以写成ugo

然后是我们要如何改变权限。

  • 如果我们想给一组用户或用户以权限,我们写+ ,所以+x 将给予执行权限,+rx 将给予读和执行权限。
  • 如果我们想撤销权限,我们就写-, 这样-rwx 就会取消读、写和执行的权限。
  • 如果我们想完全替换权限,我们使用= ,所以=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

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

下面是一个例子:

chmod -R u=rwx myDirectory

chmod ,用数字改变文件模式

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

  • r的值为4
  • w的值是2
  • x的值为1

这意味着总值为7 ,意味着4 + 2 + 1 ,或rwx 。值为5 ,意味着4 + 1 ,或r-x 。 我们可以给所有者、组和其他用户各分配一个数字。所以考虑一个这样的权限集。

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 ,所以带有粘性位的权限755 ,变成1755

对于许多人来说, 数字权限是首选, 因为它们比字母更干净, 更容易理解.无论你喜欢哪一种,两者的工作方式都是一样的,所以根据你自己的喜好来选择。