文件权限是 Linux 文件系统中一个很重要的组成部分,它决定着谁可以对一个文件做什么操作
1、查看权限
查看权限的方法很简单,只需要用 ls -l
命令就能查看,每行的第一个字段包含了对权限的描述
> ls -l
# drwxrwxr-x 2 user user 4096 Sep 12 16:05 folder
# -rw-rw-r-- 112 user user 12 Sep 12 16:00 file
以上面这个例子来说,这里对 file
的描述是 -rw-rw-r--
,对 folder
的描述是 drwxrwxr-x
但这长长的一串东西表示的究竟是啥,别急,下面我们来一步步搞清楚每一个字符所代表的含义
第一个字符表示的是文件类型,实际上它并不属于权限描述的一部分,常见的文件类型有七种
普通文件 (-)、目录 (d)、链接 (l)、块设备文件 (b)、字符设备文件 ©、管道文件 §、套接字文件 (s)
普通文件、目录、链接这三种类型的文件相信大家都很熟悉,这里不再赘述
块设备例如硬盘、字符设备例如鼠标和键盘、管道文件用于进程通信、套接字文件用于网络通信
后九个字符才是真正表示这个文件的权限的,九个字符中每三个字符分为一组
每组分别表示:所有者权限 ( User, u
)、所属组权限 ( Group, g
)、其他用户权限 ( Other, o
)
每组三个字符分别表示:读取权限 ( Readable, r
)、写入权限 ( Writable, w
)、执行权限 ( Execute, x
)
若对应没有对应的权限,则用 -
表示
下面以 file
的权限描述 rw-rw-r--
为例( ls -l
第一个字段省去第一个字符)
字符位置 | 字符含义 | 具体字符 | 具体含义 |
---|---|---|---|
1 ~ 3 | 所有者权限 | rw- | 可读取,可写入,不可执行 |
4 ~ 6 | 所属组权限 | rw- | 可读取,可写入,不可执行 |
7 ~ 9 | 其他用户权限 | r-- | 可读取,不可写入,不可执行 |
再来个 folder
的权限描述 drwxrwxr-x
( ls -l
第一个字段省去第一个字符)
字符位置 | 字符含义 | 具体字符 | 具体含义 |
---|---|---|---|
1 ~ 3 | 所有者权限 | rwx | 可读取,可写入,可执行 |
4 ~ 6 | 所属组权限 | rwx | 可读取,可写入,可执行 |
7 ~ 9 | 其他用户权限 | r-x | 可读取,不可写入,可执行 |
2、修改权限
在 Linux 中,修改文件权限可以使用 chmod
命令,具体使用方法如下:
> chmod 文件权限 file
这里所写的文件权限,可以有两种表示方法,一种是数字表示法,一种是文字表示法
(1)数字表示法
数字表示法是用三个八进制数字表示文件权限,这里的问题在于权限描述和八进制数字之间怎么进行转换呢
其实方法很简单,可以用二进制作为中间过渡,八进制和二进制之间的转换相信大家都懂,这里不再细说
而权限描述和二进制之间的转换,按照有权限值为 1,无权限值为 0 的规则进行就好,举两个例子
权限符:rw- rw- r--
二进制:110 110 100
八进制: 6 6 4
权限符:rwx rwx r-x
二进制:111 111 101
八进制: 7 7 5
(2)文字表示法
文字表示法是用特定的标识符表示对应的用户和权限,可以给特定的用户增加或删除特定的权限
用户:所有者用 u
表示 ( User ),所属组用 g
表示 ( Group ),而其他用户用 o
表示 ( Other )
权限:读取权用 r
表示 ( Readable ),写入权用 w
表示 ( Writable ),执行权用 x
表示 ( Execute )
# 所有者(u) 增加(+) 执行权限(x)
> chmod u+x file
# 所属组(g) 减少(-) 写入权限(w)
> chmod g-w file
# 其他用户(o) 重新指定(=) 访问权限
> chmod o=rw file
3、权限掩码
权限掩码由四个八进制的数字组成,它和默认权限一起,决定着新建文件和新建目录的权限
三者之间的关系如下:默认权限 - 权限掩码 = 新建文件或新建目录的权限
默认权限是确定的,在 Linux 中,文件的默认权限是 666
,目录的默认权限是 777
我们可以使用 umask
命令检查和修改权限掩码,如果不加修改,默认的权限掩码是 0022
那么此时,新建文件的权限是 666 - 0022 = 644
,新建目录的权限是 777 - 0022 = 755
4、目录权限
最后还要注意一下,对于目录而言,读取权限 ®、写入权限 (w)、执行权限 (x) 所代表的含义
- 可读取 (
r
):可以使用ls
命令列出目录中的内容 - 可写入 (
w
):可以在目录中新建、删除、修改文件 - 可执行 (
x
):可以使用cd
命令切换到该目录