当我们在 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 组访问权限 – rwx
、r-x
和r-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 递归更改目录的模式#
有时,我们不仅要更改目录的权限,还要更改其中的所有文件。为此,我们可以使用-R
with 选项chmod
递归地更改目录中的每个文件和文件夹。
这是一个例子:
chmod -R u=rwx myDirectory
使用数字使用 chmod 更改文件模式#
您可能已经看到chmod
与数字而不是字母一起使用。这些数字最终遵循与上述相同的约定,但写出来要简单得多。每个用户权限都rwx
被赋予一个特定的值:
r
赋值为 4w
被赋予值 2x
赋值为 1
7
这意味着mean4 + 2 + 1
或的总值rwx
。的值5
将意味着4 + 1
或r-x
。我们可以为owner、group和其他用户分别分配一个编号。所以给定这样的权限集:
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
.
对于许多人来说,数字权限是首选,因为它们比字母更清晰、更容易理解。无论您喜欢哪种方式,两者都以相同的方式工作,因此请根据自己的喜好进行选择。