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 权限有更深刻的理解。