1 | chmod
|
2 | ===
|
3 |
|
4 | 用来变更文件或目录的权限
|
5 |
|
6 | ## 概要
|
7 |
|
8 | ```shell
|
9 | chmod [OPTION]... MODE[,MODE]... FILE...
|
10 | chmod [OPTION]... OCTAL-MODE FILE...
|
11 | chmod [OPTION]... --reference=RFILE FILE...
|
12 | ```
|
13 |
|
14 | ## 主要用途
|
15 |
|
16 | - 通过符号组合的方式更改目标文件或目录的权限。
|
17 | - 通过八进制数的方式更改目标文件或目录的权限。
|
18 | - 通过参考文件的权限来更改目标文件或目录的权限。
|
19 |
|
20 | ## 参数
|
21 |
|
22 | mode:八进制数或符号组合。
|
23 |
|
24 | file:指定要更改权限的一到多个文件。
|
25 |
|
26 | ## 选项
|
27 |
|
28 | ```shell
|
29 | -c, --changes:当文件的权限更改时输出操作信息。
|
30 | --no-preserve-root:不将'/'特殊化处理,默认选项。
|
31 | --preserve-root:不能在根目录下递归操作。
|
32 | -f, --silent, --quiet:抑制多数错误消息的输出。
|
33 | -v, --verbose:无论文件是否更改了权限,一律输出操作信息。
|
34 | --reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
|
35 | -R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
|
36 | --help:显示帮助信息并退出。
|
37 | --version:显示版本信息并退出。
|
38 | ```
|
39 |
|
40 | ## 返回值
|
41 |
|
42 | 返回状态为成功除非给出了非法选项或非法参数。
|
43 |
|
44 | ## 例子
|
45 |
|
46 | > 参考`man chmod`文档的`DESCRIPTION`段落得知:
|
47 | > - `u`符号代表当前用户。
|
48 | > - `g`符号代表和当前用户在同一个组的用户,以下简称组用户。
|
49 | > - `o`符号代表其他用户。
|
50 | > - `a`符号代表所有用户。
|
51 | > - `r`符号代表读权限以及八进制数`4`。
|
52 | > - `w`符号代表写权限以及八进制数`2`。
|
53 | > - `x`符号代表执行权限以及八进制数`1`。
|
54 | > - `X`符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。
|
55 | > - `s`符号代表设置权限suid和sgid,使用权限组合`u+s`设定文件的用户的ID位,`g+s`设置组用户ID位。
|
56 | > - `t`符号代表只有目录或文件的所有者才可以删除目录下的文件。
|
57 | > - `+`符号代表添加目标用户相应的权限。
|
58 | > - `-`符号代表删除目标用户相应的权限。
|
59 | > - `=`符号代表添加目标用户相应的权限,删除未提到的权限。
|
60 |
|
61 | ```shell
|
62 | linux文件的用户权限说明:
|
63 |
|
64 | # 查看当前目录(包含隐藏文件)的长格式。
|
65 | ls -la
|
66 | -rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
|
67 |
|
68 | # 第1位如果是d则代表目录,是-则代表普通文件。
|
69 | # 更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。
|
70 | # 第2到4位代表当前用户的权限。
|
71 | # 第5到7位代表组用户的权限。
|
72 | # 第8到10位代表其他用户的权限。
|
73 | ```
|
74 |
|
75 | ```shell
|
76 | # 添加组用户的写权限。
|
77 | chmod g+w ./test.log
|
78 | # 删除其他用户的所有权限。
|
79 | chmod o= ./test.log
|
80 | # 使得所有用户都没有写权限。
|
81 | chmod a-w ./test.log
|
82 | # 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
|
83 | chmod u=rwx, g=rw, o=r ./test.log
|
84 | # 等价的八进制数表示:
|
85 | chmod 764 ./test.log
|
86 | # 将目录以及目录下的文件都设置为所有用户拥有读写权限。
|
87 | # 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!
|
88 | chmod -R a=rw ./testdir/
|
89 | # 根据其他文件的权限设置文件权限。
|
90 | chmod --reference=./1.log ./test.log
|
91 | ```
|
92 |
|
93 | ### 注意
|
94 |
|
95 | 1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man chmod`或`info coreutils 'chmod invocation'`。
|
96 |
|
97 | 2. 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
|
98 |
|
99 | 3. 使用`-R`选项一定要保留当前用户的执行和读取权限,否则会报错!
|
100 |
|
101 |
|