如何在 Linux 上使用 chmod 命令

在Linux系统中,chmod命令扮演着至关重要的角色,它允许用户精确控制谁可以访问文件、浏览目录以及执行脚本。尽管初看之下,该命令似乎有些复杂,但一旦掌握其工作原理,你会发现它其实非常直接且易于使用。

chmod命令:文件权限的修改器

Linux系统通过权限集来管理用户对文件和目录的操作权限。这些权限被划分为三组:文件所有者的权限、文件所属组的成员的权限以及其他所有用户的权限。

权限决定了用户能否读取、修改文件,或者在文件为脚本或程序时能否执行。对于目录,权限控制着用户能否进入目录(cd)、创建或修改目录中的文件。

要调整这些权限,就需要用到chmod命令。你可以通过chmod命令来精确地 设置每一项权限。 想要查看当前文件的权限设置,可以使用ls命令。

解读文件权限

ls命令结合-l(长格式)选项可以显示文件和目录的详细权限信息。

ls -l

输出结果中,每行的第一个字符表示条目的类型。 破折号(-)代表文件,字母d代表目录。

紧随其后的九个字符则代表了三组权限的设置。

前三个字符显示文件所有者的权限(用户权限)。中间三个字符代表文件所属组成员的权限(组权限)。最后三个字符则代表其他所有用户的权限(其他权限)。

每组权限都由三个字符组成,这些字符要么是破折号(-),表示权限未被授予,要么是字母rwx,表示相应的权限已被授予。

这些字母分别代表:

  • 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%的需求。