Linux 文件权限详解
在对文件进行操作之前,应先了解文件权限是什么?有哪些权限?
$ tree . . ├── README.md ├── package.json └── src 1 directory, 2 files
以上有一个目录和两个文件。然后通过 ls -l
命令,可以查看文件的具体属性:
$ ls -l total 8 -rw-r--r-- 1 frankie staff 0 7 3 00:18 README.md -rw-r--r-- 1 frankie staff 90 7 2 22:42 package.json drwxr-xr-x 2 frankie staff 64 7 2 22:42 src
以 package.json
文件为例,
其中
-rw-r--r--
首个字符-
表示「文件类型」,后面的九位字符rw-r--r--
表示「文件权限」。
「文件类型」用于表明它是文件、链接文件或者目录等,主要有以下几种:
- 若为
d
则是目录;- 若为
-
则是文件;- 若为
l
则表示为链接文件(link file);- 若为
b
则表示为装置文件里面的可供储存的接口设备(可随机存取装置);- 若为
c
则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
「文件权限」分为三种身份,分别为文件所有者权限(owner)、文件所在群组权限(group)、其他用户权限(others)。每一种身份都有各自的读写执行权限。通常情况下,一个文件只能归属于一个用户和群组,如果其他用户想拥有此文件的权限,可以将该用户加入到具有权限的群组,一个用户可同时归属于多个群组。
每种身份包括读写和执行权限,其中 r
表示读权限(read),w
表示写权限(write),x
表示执行权限(execute),-
表示无对应权限。除了用 rwx-
形式之外,也可以使用八进制数模式来表示,对应如下:
八进制值 | 文件权限 | 权限说明 |
---|---|---|
0 | --- | 无任何权限 |
1 | --x | 仅执行权限 |
2 | -w- | 仅写权限 |
3 | -wx | 有写和执行权限 |
4 | r-- | 只读权限 |
5 | r-x | 读和执行权限 |
6 | rw- | 读写权限 |
7 | rwx | 读写和执行权限 |
每种身份的权限数字为 rwx
的累加得出来的。比如,前面 package.json
的权限为 -rw-r--r--
,表示文件所有者权限为 rw-
(4+2+0),文件所在群组权限为 r--
(4+0+0),其他用户权限为 r--
(4+0+0),因此该文件的权限数字为 0o644
。
我们常用 chmod
命令来修改文件的权限,比如:
$ chmod 755 ./src/bin/test.js
以上的 755
就是表示权限数字,该文件的权限将被改写为 rwxrw-rw-
,即所有者可读写可执行,所在群组可读,其他用户可读。
除了数字方式,还可以通过字符方式修改文件权限。形式如:
$ chmod who+operator+permissions <file>
其中 who
表示要更改权限的用户,operator
表示要执行的操作,permissions
表示要更改的权限。
符号 | 功能 | 说明 |
---|---|---|
u | who | 文件所有者 |
g | who | 文件所在群组 |
o | who | 其他用户 |
a | who | 所有用户 |
= | operator | 赋值 |
+ | operator | 添加 |
- | operator | 删除 |
r | permissions | 读权限 |
w | permissions | 写权限 |
x | permissions | 执行权限 |
因此,
$ chmod 755 ./src/bin/test.js # 相当于 $ chmod u=rwx,g=rw,o=rw ./src/bin/test.js # 也可对每种用户分别设置 $ chmod u=rwx ./src/bin/test.js $ chmod g=rw ./src/bin/test.js $ chmod o=rw ./src/bin/test.js
除了常见的 r/w/x 权限之外,还有一些特殊权限:SUID、SGID 和 SBIT,这里不做展开,有兴趣自行查阅。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论