你或他是否可读写执行的 chmod
文件权限指的是文件是否可以执行、写入、读取等操作。
该命令官方定义为:
chmod – change mode
所以可以通过chmod
来控制文件如何被他人所存取。
而Linux/Unix的文件存取权限分为三级 : 文件所有者、用户组及其他,分别使用以下字母来表示:
- u:所有者
- g:用户组
- o:其他用户
如下图所示,每个级别都可以设置为rwx三种权限 。
使用语法
使用的语法如下所示:
$ chmod [-cfvR] [--help] [--version] mode file...
其中mode权限设定的格式如下 : [ugoa] [+-=] [rwxX]
其中u表示该文件的拥有者,g表示与该文件的拥有者属于同一个群体(group)者,o表示其他以外的人,a表示这三者皆是。
+
表示加权限、–
表示减权限、=
表示设定唯一权限。r
表示可读取,w
表示可写入,x
表示可执行,X
表示只有当该文件是个子目录或者该文件已经被设定过为可执行。-R
: 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
对于chmod的使用而言,只有文件所有者和超级用户可以修改文件或目录的权限。
具体的方法为可以使用符号模式或者绝对模式来进行操作。
而我比较喜欢用的是绝对数字模式,粗暴简单易理解。
符号模式
使用符号模式需要考虑多个因素,其中包括用户类型,操作符 和设定权限。
who | 用户类型 | 说明 |
---|---|---|
u | user | 文件所有者 |
g | group | 文件所有者所在组 |
o | others | 所有其他用户 |
a | all | 所用用户, 相当于 ugo |
operator 的符号模式表:
Operator | 说明 |
---|---|
+ | 为指定的用户类型增加权限 |
- | 去除指定用户类型的权限 |
= | 设置指定用户权限的设置,即将用户类型的所有权限重新设置 |
permission 的符号模式表:
模式 | 名字 | 说明 |
---|---|---|
r | 读 | 设置为可读权限 |
w | 写 | 设置为可写权限 |
x | 执行权限 | 设置为可执行权限 |
绝对数字模式
chmod
命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者的读、写、执行权限,用户组的读、写、执行以及其它用户的读、写、执行。
历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。比如下面的0-7分别表示各自的权限定义。
No | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r– | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | –x | 001 |
0 | 无 | — | 000 |
如表所示:
- 对于7而言就表示所有者的权限为可读、可写、可执行,也就是对应的八进制为111,所以就是7;
- 而对于 5而言,表示所有者的权限为可读、可执行,对应的八进制为101,所以就是5;
其他类似。
实例
更改为全部可读
接下来将文件 a.c 设为所有人皆可读取 ,有三种方式可以使用,如下,分别为 :
chmod ugo+r filename
chmod a+r filename
chmod 444 filename
具体如下所示:
通过方法1:
# 默认设定为没有任何属性$ ll---------- 1 user user 5KB Feb 12 22:22 a.c
# 更改为全部可读$ chmod ugo+r file1.txt
$ ll-r--r--r-- 1 user user 5KB Feb 12 22:22 a.c
通过方法2:
# 默认设定为没有任何属性$ ll---------- 1 user user 5KB Feb 12 22:23 a.c
# 更改为全部可读$ chmod a+r file1.txt
$ ll-r--r--r-- 1 user user 5KB Feb 12 22:23 a.c
通过方法3:
# 默认设定为没有任何属性$ ll---------- 1 user user 5KB Feb 12 22:23 a.c
# 更改为全部可读$ chmod 444 file1.txt
$ ll-r--r--r-- 1 user user 5KB Feb 12 22:24 a.c
设置用户及组可读写,其他用户无法写入但可以查看
接下来继续把文件 a.c设置为用户 和组可以读写,而其他 用户无法写入但是 可以查看 。
使用符号模式如下:
$ ll-r--r--r-- 1 user user 5KB Feb 12 22:24 a.c
$ chmod ug+rw,o+r,o-w a.c
$ ll-rw-rw-r-- 1 user user 5KB Feb 12 22:26 a.c
使用数字模式如下:
$ ll-r--r--r-- 1 user user 5KB Feb 12 22:24 b.c
$ chmod 664 a.c
$ ll-rw-rw-r-- 1 user user 5KB Feb 12 22:26 b.c
设定为所有人只有可执行权限
此时不管文件的权限是什么,因为只具有可执行权限,所以符号模式可以使用=,而数字模式只需要1即可,如下:
$ chmod a=x filename#或者$ chmod 111 filename
# 无法读取$ cat a.ccat: a.c: Permission denied
所以对于只有可执行权限的文件,是无法执行读取或者写入操作的,这也保证了文件的安全性。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/423333.html