Skip to content

Latest commit

 

History

History
162 lines (120 loc) · 4.41 KB

chmod.md

File metadata and controls

162 lines (120 loc) · 4.41 KB
date author title url tags series categories weight chapter index toc draft
2020-11-23 09:26:21 +0800
Rustle Karl
chmod 设置文件或目录的权限
posts/linux/tools/standard/chmod
linux
cmd
Linux 学习笔记
学习笔记
20
false
true
true
false

设置文件或目录的权限

格式

chmod [OPTION]... MODE[,MODE]... FILE...

chmod [OPTION]... OCTAL-MODE FILE...

chmod [OPTION]... --reference=RFILE FILE...
  • MODE - [ugoa]*(-+=)+|[-+=][0-7]+

主要用途

  • 通过符号组合的方式更改目标文件或目录的权限。
  • 通过八进制数的方式更改目标文件或目录的权限。
  • 通过参考文件的权限来更改目标文件或目录的权限。

参数

  • 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
-rw-r--r--   1 user  staff   651 Oct 12 12:53 .gitmodules
  • 第 1 位如果是 d 则代表目录,是 - 则代表普通文件。
  • 第 2 到 4 位代表当前用户的权限。
  • 第 5 到 7 位代表组用户的权限。
  • 第 8 到 10 位代表其他用户的权限。

示例

  1. 赋予可执行权限
chmod +x example.sh
  1. 递归赋予权限,忽略大部分错误信息
chmod -Rf 777 dir
  1. 设置 SGID 特殊权限位
chmod -Rf g+s sharedir
ls -ld sharedir
drwxrwsrwx 2 root root 4096 Jan 15 18:28 sharedir
  1. 设置 SBIT 特殊权限位
chmod -R o+t sharedir
ls -ld sharedir
drwxrwsrwt 2 root root 4096 Jan 15 18:28 sharedir
  1. 全部赋予权限
chmod 777 *

添加组用户的写权限

chmod -R g+w config

添加其他用户的写权限

chmod -R o+w config

删除其他用户的所有权限

chmod o= ./test.log
# 使得所有用户都没有写权限。
chmod a-w ./test.log
# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
chmod u=rwx, g=rw, o=r ./test.log
# 等价的八进制数表示:
chmod 764 ./test.log
# 将目录以及目录下的文件都设置为所有用户拥有读写权限。
# 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!
chmod -R a=rw ./testdir/
# 根据其他文件的权限设置文件权限。
chmod --reference=./1.log  ./test.log

注意

  1. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man chmodinfo coreutils 'chmod invocation'

  2. 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

  3. 使用-R选项一定要保留当前用户的执行和读取权限,否则会报错!