Linux chmod命令初学者教程
在此页
- Chmod 基础知识
- 结论
有时您会在 Linux 机器上创建一个 bash 脚本。但是当您尝试运行它时,您会遇到权限错误。你做什么工作?很简单,假设您使用的是 Ubuntu,右键单击文件图标,转到“权限”选项卡,然后启用“允许作为程序执行文件”选项。但是,如果要求是从命令行执行此更改怎么办?
如果您是 Linux 的新手,并且正在寻找一种通过命令行更改文件/目录权限的方法,您会很高兴知道有一个名为 chmod 的命令可以让您轻松地做到这一点。在本教程中,我们将讨论此命令的基础知识,并提供示例来解释如何在各种情况下使用它。
请注意,本教程中提到的所有示例和说明均已在 Ubuntu 16.04LTS 上进行了测试,我们使用的 chmod 版本为 8.25。
Chmod 基础知识
考虑以下 ls 命令示例:

输出中的第一列是我们感兴趣的。撇开首字母 -(表示文件类型),列中的其余字段可以进一步细分为:rw-、rw- 和 r--。这些是文件所有者、文件所属的组以及其他人对该文件拥有的权限。
这意味着所有者拥有读取 (r) 和写入 (w) 权限。团也一样。然而,其他人只有文件的读取权限。 请注意,我们假设文件归当前用户所有。
现在假设需求是给每个人执行这个文件的权限。这是如何做到的:
chmod +x script.sh
现在这里的权限:

所有者、组和其他人的额外 x 权限表示现在每个人都可以执行此文件。
但是,更有可能的是,您可能不希望每个人都具有文件的执行权限。如果要求仅授予所有者/当前用户对 script.sh 的执行访问权限怎么办?
好吧,为此,现在的第一步是收回所有人的执行权限,您可以使用以下命令执行此操作:
chmod -x script.sh
然后将其明确授予所有者:
chmod u+x script.sh
如您所料,u+x 表示授予 (+) 所有者/当前用户 (u) 执行 (x) 文件访问权限。同样,对于组,您可以使用 g,而对于其他组,您可以使用 o。
请注意,无论何时您想要向所有人授予/撤销一组通用权限,您都可以使用 a 而不是 ugo。我的意思是,这个:
chmod ugo-x script.sh
可以用这个代替:
chmod a-x script.sh
另外,请记住,如果这些(u、g、o 和 a)均未明确指定,则默认值也假定为 a。
继续,如果你愿意,你也可以简单地复制授予所有者/当前用户的权限,并将它们用于组或其他人。为此,请使用符号 =。
例如,要将所有者/用户权限复制到组,请使用以下命令:
chmod g=u script.sh
另一种情况可能是复制特定文件的权限并将它们用于您的文件。为此,请使用 --reference 命令行选项。下面是使用此命令行选项的通用模板:
chmod --reference=[source-file] [destination file]
在上面的命令中,source-file 是您要复制其权限位的文件,destination-file 是您要更改其权限位的文件。
继续前进,还有一个数字符号(也称为八进制表示法),您可以使用它告诉 chmod 更改权限。在这种模式下,您可以使用三个数字:4、2 和 1。4 用于读取,另外两个分别用于写入和执行。
例如,请考虑以下示例:

现在,假设任务是为所有者/用户添加执行权限,删除写权限但为组添加执行权限,并删除其他人的所有权限。这可以按如下方式完成:
chmod 750 script.sh
上面的命令中,7是user,这是4+2+1的结果,因为要求user是拥有所有权限。同样,5是group,4+0+1的结果作为要求,只给group只读和执行权限。最后0是给别人的,也就是0+0+0的结果,因为要求取消别人的所有权限。
对于那些处理符号链接的人来说,这里有一些值得了解的东西:
chmod never changes the permissions of symbolic links; the chmod system call cannot change their permissions. This is not a problem since the
permissions of symbolic links are never used. However, for each symbolic link listed on the command line, chmod changes the permissions of
the pointed-to file. In contrast, chmod ignores symbolic links encountered during recursive directory traversals.
结论
chmod 命令可能不是您每天都需要的命令,但它是您应该了解的非常有用/重要的工具。在本教程中,我们讨论了与此工具相关的大部分基础知识,我们讨论的示例旨在使这些基础知识更加清晰。
请注意,我们的讨论主要集中在文件上。在对目录使用 chmod 时,您应该记住一些细节。有关所有这些信息(以及有关 chmod 的更多详细信息),请前往工具手册页。