Linux 文件权限详解
掌握 Linux 文件权限
在 Linux 世界中,权限是保证系统安全与稳定的基石。理解并正确设置文件和目录的权限,可以有效防止意外修改、删除重要文件,并保护个人隐私。本教程将带你深入浅出地学习 Linux 权限系统。
什么是权限?—— 权限的三要素
Linux 的权限系统可以归结为三个核心要素:三类用户身份、三种基本权限。
1. 三类用户身份
系统中的每个文件和目录都定义了三类可以访问它的用户:
- 所有者 (Owner/User):文件的创建者,对文件拥有最高控制权。通常用
u表示。 - 所属组 (Group):一个用户组。组内的所有成员都拥有该文件或目录的组权限。一个文件只能属于一个组。通常用
g表示。 - 其他人 (Others):除了所有者和所属组成员之外的所有用户。通常用
o表示。 - 所有人 (All):代表以上三者。通常用
a表示。
2. 三种基本权限
对于每一类用户,都可以授予或撤销以下三种基本权限:
- 读 (read - r):
- 对于文件:可以查看文件内容。
- 对于目录:可以列出目录中的文件和子目录列表(如使用
ls命令)。
- 写 (write - w):
- 对于文件:可以修改文件内容。
- 对于目录:可以在目录中创建、删除、重命名文件或子目录。
- 执行 (execute - x):
- 对于文件:如果文件是程序或脚本,可以运行它。
- 对于目录:可以进入(
cd)该目录。
如何查看权限?
使用 ls 命令的 -l 选项(长列表格式)可以查看文件和目录的详细权限信息。
ls -l filename.txt
你会看到类似这样的输出:
-rwxr-xr-- 1 bob developers 4.2K Sep 04 15:30 filename.txt
我们重点关注开头的 10 个字符 -rwxr-xr--,它们包含了所有的权限信息:
| 位置 | 字符 | 含义 |
|---|---|---|
| 第 1 位 | - |
文件类型 (- 代表普通文件, d 代表目录) |
| 第 2-4 位 | rwx |
所有者 (u) 的权限 (读、写、执行) |
| 第 5-7 位 | r-x |
所属组 (g) 的权限 (读、执行,无写权限) |
| 第 8-10 位 | r-- |
其他人 (o) 的权限 (只有读权限) |
注意:权限位的顺序永远是 r、w、x。如果某个权限不存在,则用 - 占位。
如何修改权限?—— chmod 命令
chmod (change mode) 命令是修改文件或目录权限的专用工具。它支持两种模式:符号模式和数字模式。
方法一:符号模式(易于理解)
符号模式的格式是 chmod [身份][操作符][权限] 文件名。
- 身份 (可选, 默认为 a):
u(所有者),g(所属组),o(其他人),a(所有人)。 - 操作符:
+(添加权限),-(移除权限),=(精确设置权限)。 - 权限:
r(读),w(写),x(执行)。
示例:
假设我们有一个文件 script.sh,初始权限为 -rw-r--r--。
- 为所有者添加执行权限:
chmod u+x script.sh # 权限变为: -rwxr--r--
- 为所属组移除读权限,并添加写权限:
chmod g-r,g+w script.sh # 或者合并为一条: chmod g-r+w script.sh # 权限变为: -rwx-w-r--
- 为其他人移除所有权限:
chmod o-rwx script.sh # 权限变为: -rwx-w----
- 为所有用户设置相同的权限(读和执行):
chmod a=rx script.sh # 权限变为: -r-xr-xr-x
方法二:数字模式(高效快捷)
数字模式使用三位八进制数字来一次性设置所有者、所属组和其他人的权限。这种方法在熟练后非常高效。
原理很简单:将每种权限用一个数字代表:
r= 4w= 2x= 1- 无权限 = 0
将每类用户身份所需的权限数字相加,得到一个 0-7 之间的数字。
| 数字 | 权限组合 | 含义 |
|---|---|---|
| 7 | 4+2+1 |
rwx (读、写、执行) |
| 6 | 4+2 |
rw- (读、写) |
| 5 | 4+1 |
r-x (读、执行) |
| 4 | 4 |
r-- (只读) |
| 3 | 2+1 |
-wx (写、执行) |
| 2 | 2 |
-w- (只写) |
| 1 | 1 |
--x (只执行) |
| 0 | 0 |
--- (无权限) |
格式:chmod [所有者数字][所属组数字][其他人数字] 文件名
示例:
- 设置权限为
rwxr-x---(所有者读写执行,所属组读执行,其他人无权限)- 所有者:
rwx-> 4+2+1 =7 - 所属组:
r-x-> 4+0+1 =5 - 其他人:
----> 0+0+0 =0 - 命令:
chmod 750 script.sh
- 所有者:
- 设置权限为
-rw-rw-r--(所有者和所属组可读写,其他人只读)- 所有者:
rw--> 4+2+0 =6 - 所属组:
rw--> 4+2+0 =6 - 其他人:
r---> 4+0+0 =4 - 命令:
chmod 664 config.conf
- 所有者:
常用权限组合:
755: 对于目录和脚本很常见。所有者可完全控制,其他人可读可执行。644: 对于普通文件很常见。所有者可读写,其他人只读。700: 对于私密目录或脚本。只有所有者能访问。
特别注意:目录的权限
目录的权限含义与文件略有不同,这非常重要:
- r (读):可以列出目录下的内容(
ls)。如果你没有r权限,即使能进入目录,也无法看到里面有什么。 - w (写):可以在目录内创建、删除、移动文件或子目录。注意:删除一个文件,需要对该文件所在的目录有写权限,而不是对文件本身有写权限。
- x (执行):可以进入该目录(
cd)。这是访问目录下任何文件或子目录的前提。没有x权限,你连目录都进不去,即使你拥有目录下文件的所有权限也没用。
查看目录自身权限:
使用 ls -ld directory_name 可以查看目录本身的权限,而不是其内容。
ls -ld my_docs
drwx------ 2 bob users 4.0K Sep 04 15:35 my_docs
超级用户 root
在 Linux 系统中,root 用户是超级管理员,它不受权限系统的限制,可以读取、修改或删除系统上的任何文件。因此,root 权限应谨慎使用。
总结
| 命令 | 功能 |
|---|---|
ls -l |
查看文件或目录的详细权限 |
ls -ld |
查看目录本身的详细权限 |
chmod |
修改文件或目录的权限 |
核心要点:
- 权限分为读(r)、写(w)、执行(x)。
- 用户分为所有者(u)、所属组(g)、其他人(o)。
- 目录的
x权限是访问其内部所有内容的基础。 - 正确配置权限是保障 Linux 系统安全的关键。
动手实践
现在,轮到你来练习了!
- 进入你的工作目录(例如
~/linuxtutorialwork)。 - 创建一个新文件
test.txt和一个新目录test_dir。 - 使用
ls -l和ls -ld查看它们的默认权限。 - 使用符号模式 (
u+x,go-r等) 修改test.txt的权限,并验证结果。 - 使用数字模式 (
755,600等) 修改test_dir的权限。 - 尝试移除
test_dir的x权限 (chmod u-x test_dir),然后试着cd进去,看看会发生什么。再把它加回来。 - 尝试移除
test_dir的r权限,然后cd进去,再用ls命令,看看会发生什么。
通过实践,你会对 Linux 权限有更深刻的理解。