在Linux系统中,chmod
命令扮演着至关重要的角色,它允许用户精确控制谁可以访问文件、浏览目录以及执行脚本。尽管初看之下,该命令似乎有些复杂,但一旦掌握其工作原理,你会发现它其实非常直接且易于使用。
chmod
命令:文件权限的修改器
Linux系统通过权限集来管理用户对文件和目录的操作权限。这些权限被划分为三组:文件所有者的权限、文件所属组的成员的权限以及其他所有用户的权限。
权限决定了用户能否读取、修改文件,或者在文件为脚本或程序时能否执行。对于目录,权限控制着用户能否进入目录(cd
)、创建或修改目录中的文件。
要调整这些权限,就需要用到chmod
命令。你可以通过chmod
命令来精确地 设置每一项权限。 想要查看当前文件的权限设置,可以使用ls
命令。
解读文件权限
ls
命令结合-l
(长格式)选项可以显示文件和目录的详细权限信息。
ls -l
输出结果中,每行的第一个字符表示条目的类型。 破折号(-
)代表文件,字母d
代表目录。
紧随其后的九个字符则代表了三组权限的设置。
前三个字符显示文件所有者的权限(用户权限)。中间三个字符代表文件所属组成员的权限(组权限)。最后三个字符则代表其他所有用户的权限(其他权限)。
每组权限都由三个字符组成,这些字符要么是破折号(-
),表示权限未被授予,要么是字母r
、w
或x
,表示相应的权限已被授予。
这些字母分别代表:
r
:读取权限,允许用户打开并查看文件内容。w
:写入权限,允许用户编辑、修改和删除文件。x
:执行权限,允许用户运行脚本或程序。
举例说明:
---
表示没有任何权限被授予。rwx
表示完全权限,即读取、写入和执行权限都被授予。
在示例截图中,第一行以d
开头,表示名为“archive”的目录。该目录的所有者是“dave”,所属的组也名为“dave”。
接下来的三个字符rwx
代表所有者(用户)的权限,表明用户“dave”对该目录拥有完全控制权,即读取、写入和执行权限。之后的三字符rx
代表组权限,表示“dave”组成员具有读取和执行权限,他们可以浏览目录内容并进入该目录,但不能创建、编辑或删除文件。最后的rx
表示其他用户也具有读取和执行权限。
总之,“dave”组成员和其他用户拥有读取和执行权限,而所有者“dave”则额外拥有写入权限。
对于其他文件(除了脚本文件mh.sh
),“dave”用户和“dave”组成员拥有读取和写入权限,而其他用户仅有读取权限。
特殊情况,对于脚本文件mh.sh
,所有者“dave”和组成员拥有读取、写入和执行权限,而其他用户仅拥有读取和执行权限。
权限语法的解析
使用chmod
命令设置权限时,需要明确指定以下信息:
- 谁(Who):要为哪个用户或用户组设置权限。
- 什么(What):要进行何种修改,是添加还是删除权限。
- 哪个(Which):要设置哪些具体的权限。
我们使用简洁的“权限声明”来表达这些值,例如u+x
,其中“u”代表“用户”(所有者),“+”代表“添加”,而“x”代表执行权限。
“谁”的值可以是:
u
:用户(所有者)。g
:组(文件所属组成员)。o
:其他用户(不属于前两类的用户)。a
:所有用户(以上所有)。
如果省略“谁”,chmod
会默认视为a
,即所有用户。
“什么”的值可以是:
-
:减号,表示删除权限。+
:加号,表示添加权限,此权限将被添加到现有权限中。如果要仅设置此权限,请使用=
。=
:等号,表示设置指定权限并删除其他所有权限。
“哪个”的值可以是:
r
:读取权限。w
:写入权限。x
:执行权限。
设置与修改权限
假设有一个文件,所有用户都拥有完全权限:
ls -l new_file.txt
现在,我们希望设置用户“dave”拥有读写权限,而组和其他用户仅有读取权限,可以使用以下命令:
chmod u=rw,og=r new_file.txt
使用=
意味着清除所有现有权限,然后设置指定权限。
查看新权限:
ls -l new_file.txt
如预期,现有权限已被清除,并设置了新的权限。
如何在不删除现有权限的情况下添加权限? 也很简单。 假设有一个已编辑完成的脚本文件,需要让所有用户都可执行,当前的权限如下:
ls -l new_script.sh
可以使用以下命令为所有用户添加执行权限:
chmod a+x new_script.sh
查看权限,可以看到所有用户都被赋予了执行权限,且现有权限保留:
ls -l new_script.sh
如果没有a+x
语句中的a
,也可以达到同样效果,以下命令同样有效:
chmod +x new_script.sh
为多个文件设置权限
可以一次对多个文件应用权限修改。
以下是当前目录中的文件:
ls -l
假设需要从扩展名为.page
的文件中删除其他用户的写入权限,可以使用以下命令:
chmod o-r *.page
检查修改效果:
ls -l
可以看到,扩展名为.page
文件的其他用户读取权限已被删除,其他文件不受影响。
如果需要包含子目录中的文件,可以使用-R
(递归)选项:
chmod -R o-r *.page
数字速记法
另一种使用chmod
的方式是用三位数来表示希望授予所有者、组和其他用户的权限。最左边的数字代表所有者的权限,中间的数字代表组成员的权限,最右边的数字代表其他用户的权限。
以下列出了可使用的数字及其含义:
0: | (000) 无任何权限。 |
1: | (001) 执行权限。 |
2: | (010) 写入权限。 |
3: | (011) 写入和执行权限。 |
4: | (100) 读取权限。 |
5: | (101) 读取和执行权限。 |
6: | (110) 读取和写入权限。 |
7: | (111) 读取、写入和执行权限。 |
这三种权限中的每一种都由十进制数的二进制等效位中的一位表示。例如,5,二进制为101,表示读取和执行权限。2,二进制为010,表示写入权限。
使用此方法可以精确地设置想要的权限,而不是在现有权限上进行修改。 因此,如果读取和写入权限已存在,要添加执行权限,需要使用7(111),而使用1(001)会删除读写权限并添加执行权限。
为.page
文件的其他用户重新添加读取权限,同时需要设置用户和组权限,使用它们原来的值。这些用户已经具有读写权限,即6(110)。 需要设置其他用户拥有读取权限,即4(100)。
以下命令可以实现此操作:
chmod 664 *.page
这将按需设置用户,组成员和其他用户的权限。 用户和组成员的权限将被重置为原来的状态,其他用户恢复了读取权限。
ls -l
高级选项
如果你查阅chmod
命令的手册页,你会看到一些与SETUID和SETGID位以及受限删除或“粘性”位相关的高级选项。
对于日常使用,这里描述的选项涵盖了你99%的需求。