chmod 修改文件的访问权限

作用

chmod 命令用来修改文件或目录的权限,chmod 英文全称 “change mode”。

在 Linux/Unix 的文件调用权限分为三级:

  • 文件所有者(Owner)

  • 用户组(Group)

  • 其它用户(Other Users)

我们先使用 ll 命令查看一下当前用户目录文件的权限信息,如下:

[hxstrive@localhost ~]$ ll
total 4
-rw-rw-r--. 1 hxstrive hxstrive 173 May 26 22:32 demo.txt
drwxr-xr-x. 2 hxstrive hxstrive   6 Apr  2 20:51 Desktop
drwxr-xr-x. 2 hxstrive hxstrive   6 Apr  2 20:51 Documents
drwxr-xr-x. 2 hxstrive hxstrive   6 Apr  2 20:51 Downloads
...

上面 ll 命令输出信息中,drwxr-xr-x 表示权限的权限信息,分为四个部分,每部分含义如下图:

在 Linux 中,文件或目录权限的控制分别以:

  • 读取(Read):使用 r 字符表示,或者使用数字 4 表示,二进制为 100。

  • 写入(Write):使用 w 字符表示,或者使用数字 2 表示,二进制为 010。

  • 执行(Execute):使用 x 字符表示,或者使用数字 1 表示,二进制为 001。

注意:如果不具有任何权限,则使用“-”字符表示,或者使用数字 0 表示。

文件或目录的权限范围可以使用如下字母进行表示:

  • u(User):表示文件或目录的拥有者。 

  • g(Group):表示文件或目录的所属群组。 

  • o(Other):表示文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。 

  • a(All):表示全部的用户,包含拥有者,所属群组以及其他用户。 

操作符号如下:

  • + 添加某个权限,例如:chmod a+r demo.txt 为所有用户在 demo.txt 文件上添加读取权限

  • - 取消某个权限,例如:chmod o-x demo.txt 为其他用户在 demo.txt 文件上取消执行权限

  • = 赋予给定权限并取消其他所有权限

语法

chmod [-cfRv][--help][--version][<权限范围>+/-/=<权限设置...>][文件或目录...]
chmod [-cfRv][--help][--version][数字代号][文件或目录...]
chmod [-cfRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]

参数

  • -c : 若该文件权限确实已经更改,才显示其更改动作

  • -f : 若该文件权限无法被更改也不要显示错误讯息

  • -v : 显示权限变更的详细资料

  • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

  • --help : 显示辅助说明

  • --version : 显示版本

示例

(1)假设当前目录下面存在 demo.txt 文件,使用 chmod 将该文件权限修改为允许所有用户进行读、写、执行,并且显示更改信息。

[hxstrive@localhost ~]$ chmod -c a+rwx demo.txt 
mode of 'demo.txt' changed from 0664 (rw-rw-r--) to 0777 (rwxrwxrwx)

上面语句等同于下面语句:

# 权限分开授予,有点麻烦
[hxstrive@localhost ~]$ chmod -c ugo+r,ugo+w,ugo+x demo.txt 
mode of 'demo.txt' changed from 0666 (rw-rw-rw-) to 0777 (rwxrwxrwx)

或者

[hxstrive@localhost ~]$ chmod -c 777 demo.txt 
mode of 'demo.txt' changed from 0666 (rw-rw-rw-) to 0777 (rwxrwxrwx)

其中,7 = r(4) + w(2) + x(1),第一个 7 表示文件拥有者权限,第二个7表示文件所属组权限,第三个7表示其他用户权限。

(2)假如当前目录下面存在一个 demo 目录,使用 chmod 中的 -R 选项进行递归修改文件的权限为所有用户可读、可写、可执行,且通过 -v 输出修改权限的信息。

[hxstrive@localhost ~]$ chmod -R -v 777 demo
mode of 'demo' changed from 0775 (rwxrwxr-x) to 0777 (rwxrwxrwx)
mode of 'demo/demo1.txt' changed from 0664 (rw-rw-r--) to 0777 (rwxrwxrwx)
mode of 'demo/demo2.txt' changed from 0664 (rw-rw-r--) to 0777 (rwxrwxrwx)
mode of 'demo/demo3.txt' changed from 0664 (rw-rw-r--) to 0777 (rwxrwxrwx)
mode of 'demo/bak' changed from 0775 (rwxrwxr-x) to 0777 (rwxrwxrwx)
mode of 'demo/bak/bak1.txt' changed from 0664 (rw-rw-r--) to 0777 (rwxrwxrwx)
mode of 'demo/bak/bak2.txt' changed from 0664 (rw-rw-r--) to 0777 (rwxrwxrwx)

更多关于命令详细参考手册,请使用 man 命令或者 --help 参数获取帮助信息

关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号