Linux:文件权限详解及修改方法
本文最后更新于:2024年5月4日 凌晨
1、Linux文件权限
1.1、如何查看到文件权限
使用ls -l
或者ll
指令可以直接查看到如下的标记,这些标记代表的相关文件或文件夹的权限类型及所属:
其中分四段:
- 第一段,为文件/文件夹权限,其中首个bit位字符为文件类型,一共有如下的七种:前三种为常见类型
类型 | 说明 |
---|---|
- |
普通文件。 |
d |
目录,字母d 是dirtectory (目录)的缩写。 |
l |
符号链接。请注意,一个目录或者说一个文件夹是一个特殊文件,这个特殊文件存放的是其他文件和文件夹的相关信息。 |
b |
块设备文件。 |
c |
字符设备文件。 |
p |
管道文件 |
s |
套接口文件 |
像类型为文件,如下面这种:
之后跟随的会有9个bit位,分别代表不同的权限类型,后续再进一步讨论。
- 第二段,为文件/子目录的链接数量
像上述的文件结果中,1
表示有一个硬链接指向文件python.gram
,一般来说文件类型均为1。如果为文件夹类型则表示的是链接的子目录个数。
- 第三段,为权限所属用户
表示拥有当前文件或目录的用户。
- 第四段,为权限所属群组
表示所属的群组(group)。群组下的每一个使用者都具有该文件\路径的控制权限,一个用户可以拥有一个以上的组,大部分都只属于1个群组。
1.2、ll命令介绍
在Ubuntu中默认不含ll命令,其实质为ls -l
的别名,我们可以通过修改环境变量自行添加:
1 |
|
添加或将下面这一段去掉注释:
修改完成之后,使环境变量生效:
1 |
|
注:root环境变量和普通用户环境变量不共通,使用ll
指令,不同用户下需单独修改。
2、权限分类
2.1、文件权限
在文件类型字节位后,紧接着的3*3个字符分3组,各**表示不同角色对此文件的读(r)、写(w)、执行权限(x)**:
- 第一段:3bit,对应**文件所有者(owner)**的权限
1 |
|
- 第二段:3bit,对应**文件所属用户群组(group)**的权限
1 |
|
- 第三段:3bit,对应**其他用户(others)**的权限
1 |
|
上述权限对应下来则为八进制码表,二进制码的计算顺序为从右往左:
八进制位 | 权限 | 权限符号 | 二进制位 |
---|---|---|---|
7 | 读\写\执行 | rwx | 111 |
6 | 读\写 | rw- | 110 |
5 | 读\执行 | r-x | 101 |
4 | 读 | r– | 100 |
3 | 写\执行 | -wx | 011 |
2 | 写 | -w- | 010 |
1 | 执行 | –x | 001 |
0 | 无权限 | — | 000 |
举例:
权限符号为rw-
,其二进制位为110,则二进制转为八进制为,计算顺序为从右往左:$2^0$+$2^1$+$2^1$=6,即r为2号位值为1,w为1号为值为1,-为0号位值为0。
2.2、文件夹权限
文件夹的权限标识与文件相同,但所具有的含义不一样,对应如下:
r
:能够浏览目录信息,包括目录名称及所含文件等信息。无权限时无法查看对应内容
w
:能够删除新增或修改目录中的文件或目录。无权限时限制删除新增等操作
x
:当具有x
权限时,能够进入该目录。无权限时被限制进入
3、权限修改
3.1、修改文件/文件夹权限
1)chmod指令
chmod
修改文件权限:
1 |
|
[选项]为可选,支持以下常用参数:
参数 | 作用 |
---|---|
-c | 改变权限成功后再输出成功信息 |
-R | 递归处理所有子文件 |
-f | 改变权限失败后不显示错误信息 |
-v | 显示执行过程详细信息 |
示例:
1 |
|
注:只有**文件所有者(owner)或管理员(root)**才允许修改文件权限。
2)chmod指令符号
在chmod指令中,可以使用用户表示符和权限控制符号来简化指令,更为的清晰,其对应的不同符号如下:
- 用户表示符
用户表示符 | 说明 |
---|---|
u | 所有者 |
g | 拥有者同组用户 |
o | 其它用户 |
a | 所有用户 |
- 权限操作符
权限操作符 | 含义 |
---|---|
+ | 表示添加权限 |
- | 表示移除权限 |
= | 表示设置权限为特定的值 |
- 权限符号
符号 | 含义 |
---|---|
r | 读取权限 |
w | 写入权限 |
x | 执行权限 |
组合使用举例:
1 |
|
3.2、修改文件/文件夹所属用户
chown
修改文件/文件夹所属的用户:
1 |
|
chown
常用的[选项]参数:
常用参数 | 描述 |
---|---|
-R, --recursive |
递归地更改指定目录及其子目录中所有文件和目录的所有者。 |
--reference=RFILE |
把指定文件的拥有者和用户组应用到其他文件, RFILE为参考文件。 |
--from=CURRENT_OWNER[:CURRENT_GROUP] |
仅在文件的当前所有者或用户组匹配指定的值时才更改文件的所有者和/或用户组。 |
--preserve-root |
不允许在 “/“ 上递归操作 |
-v, --verbose |
显示详细的操作信息。 |
示例:
1 |
|
注:所修改的新用户,为存在的用户,否则会执行失败,提示无效用户。
--from=CURRENT_OWNER[:CURRENT_GROUP]
参数使用举例:当匹配到对应的所有者/用户组时才进行修改
1 |
|
3.3、修改文件/文件夹所属群组
chgrp
更改文件或文件夹所属用户组(group):
1 |
|
在[选项]参数方面与chown
类似,常用参数如下:
参数 | 描述 |
---|---|
-R, --recursive |
递归地更改指定目录及其子目录中所有文件和目录的所属用户组。 |
--reference=RFILE |
把指定文件的用户组应用到其他文件。 |
--preserve-root |
不要跨越文件系统的边界,这对于递归操作非常重要。 |
-v, --verbose |
显示详细的操作信息。 |
--dereference |
在符号链接指向文件本身时,处理符号链接指向的文件而不是符号链接文件本身。 |
使用示例:
1 |
|
chgrp
部分修改也能够通过chown
来实现,如修改拥有者和所属组:
1 |
|
注:只有超级用户(root)或者文件的当前所有者才能使用chgrp
命令。