每天一个Linux命令之chmod
命令简介: 更改文件模式或访问控制表,chmod程序将列出文件的文件模式位修改为由模式操作数指定。它也可以用来修改访问权限与列出的文件关联的控制表(ACL)。
概要
chmod [-fv] [-R [-H | -L | -P]] mode file ...
chmod [-fv] [-R [-H | -L | -P]] [-a | +a | =a] ACE file ...
chmod [-fhv] [-R [-H | -L | -P]] [-E] file ...
chmod [-fhv] [-R [-H | -L | -P]] [-C] file ...
chmod [-fhv] [-R [-H | -L | -P]] [-N] file ...
主要用途
- 通过符号组合的方式更改目标文件或目录的权限。
- 通过八进制数的方式更改目标文件或目录的权限。
- 通过参考文件的权限来更改目标文件或目录的权限。
参数
- 「mode」: 八进制数或符号组合
- 「file」: 指定需要更改权限的文件
选项
- -c, --changes:当文件的权限更改时输出操作信息。
- --no-preserve-root:不将'/'特殊化处理,默认选项。
- --preserve-root:不能在根目录下递归操作。
- -f, --silent, --quiet:抑制多数错误消息的输出。
- -v, --verbose:无论文件是否更改了权限,一律输出操作信息。
- --reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
- -R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
- --help:显示帮助信息并退出。
- --version:显示版本信息并退出。
返回值
返回状态为成功除非给出了非法选项或非法参数。
实例
符号说明
- u符号代表当前用户。
- g符号代表和当前用户在同一个组的用户,以下简称组用户。
- o符号代表其他用户。
- a符号代表所有用户。
- r符号代表读权限以及八进制数4。
- w符号代表写权限以及八进制数2。
- x符号代表执行权限以及八进制数1。
- X符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。
- s符号代表设置权限suid和sgid,使用权限组合u+s设定文件的用户的ID位,g+s设置组用户ID位。
- t符号代表只有目录或文件的所有者才可以删除目录下的文件。
- +符号代表添加目标用户相应的权限。
- -符号代表删除目标用户相应的权限。
- =符号代表添加目标用户相应的权限,删除未提到的权限。
查看文件用户权限
ls -la # 查看当前目录(包含隐藏文件)的长格式。
- 第1位如果是d则代表目录,是-则代表普通文件。
- 第2到4位代表当前用户的权限。
- 第5到7位代表组用户的权限。
- 第8到10位代表其他用户的权限
其他操作
# 添加组用户的写权限。
chmod g+w ./text.txt
# 删除其他用户的所有权限。
chmod o= ./text.txt
# 使得所有用户都没有写权限。
chmod a-w ./text.txt
# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
chmod u=rwx, g=rw, o=r ./text.txt
# 等价的八进制数表示:
chmod 754 ./text.txt
# 将目录以及目录下的文件都设置为所有用户拥有读写权限。
# 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错。
chmod -R a=rw ./dir/
# 根据其他文件的权限设置文件权限。
chmod --reference=./temp.txt ./txst.txt
注意事项
- 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man chmod或info coreutils 'chmod invocation'。
- 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
- 使用-R选项一定要保留当前用户的执行和读取权限,否则会报错。