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
有时,我们不仅要改变一个目录的权限,而且还要改变其中的所有文件。为此,我们可以使用-R 和chmod 选项来递归地改变一个目录中的每个文件和文件夹。
下面是一个例子:
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 。
对于许多人来说, 数字权限是首选, 因为它们比字母更干净, 更容易理解.无论你喜欢哪一种,两者的工作方式都是一样的,所以根据你自己的喜好来选择。