在 Linux/Unix-like 系统中,文件权限是保障系统安全和实现多用户协作的基础。每个文件或目录都有一套权限规则,规定了谁可以对其进行何种操作。本文旨在简洁地解释这套权限系统的内在逻辑。
我们通常使用 ls -l 命令查看文件权限,会看到类似 -rwxr-xr-- 这样的字符串。这套系统由三个核心部分组成:权限类型、用户身份和它们的数字表示法。
1. 基础概念:权限三要素 (r, w, x)
这三个字母分别代表三种基本权限:
- r (Read): 读权限
- w (Write): 写权限
- x (Execute): 执行权限
它们的含义根据作用对象的不同而有所区别:
| 权限 | 对于文件 (File) | 对于目录 (Directory) |
|---|---|---|
| r | 可以读取文件的内容 (e.g., cat, less) |
可以列出目录中的文件和子目录列表 (e.g., ls) |
| w | 可以修改文件的内容 (e.g., vim, echo >) |
可以在目录中创建、删除、重命名文件 (e.g., touch, rm) |
| x | 可以将文件作为程序执行 (e.g., ./myscript.sh) |
可以进入该目录 (e.g., cd) |
特别注意:对目录的 x 权限是关键。如果没有 x 权限,即使有 r 权限,也无法 cd 进去,也无法查看其下文件的详细信息。
2. 身份识别:三类用户 (u, g, o)
Linux将用户分为三类,以便进行精细的权限控制:
- u (User/Owner): 文件所有者,即创建文件的用户。
- g (Group): 文件所属的用户组。一个组可以包含多个用户,方便进行协作。
- o (Others): 其他人,既不是文件所有者,也不在文件所属组内的所有其他用户。
3. 数字表示法:内在逻辑
为了方便设置权限(例如使用 chmod 命令),系统引入了数字表示法。其逻辑非常简单,源于二进制思想:
- r = 4 (二进制
100) - w = 2 (二进制
010) - x = 1 (二进制
001)
核心逻辑:将所需权限的数字相加,即可得到该用户类别的总权限值。
rwx= 4 + 2 + 1 = 7rw-= 4 + 2 + 0 = 6r-x= 4 + 0 + 1 = 5r--= 4 + 0 + 0 = 4
一个三位数的权限码(如 755)正好分别对应 u、g、o 三类用户的权限。
示例:解析 755
– 第1位 7: 对应 User -> 4+2+1 -> rwx
– 第2位 5: 对应 Group -> 4+1 -> r-x
– 第3位 5: 对应 Others -> 4+1 -> r-x
所以,755 等同于 rwxr-xr-x。
4. 常见权限组合解析
下表列出了一些常见的权限组合及其典型用途。
| 权限码 | 符号表示 | 用户(u) | 组(g) | 其他(o) | 常见用途 |
|---|---|---|---|---|---|
| 777 | rwxrwxrwx |
rwx |
rwx |
rwx |
极不安全。任何人都有完全权限。通常只用于临时目录(如 /tmp)或特定场景。 |
| 755 | rwxr-xr-x |
rwx |
r-x |
r-x |
标准权限。对于可执行文件和目录。所有者可读写执行,其他人可进入和执行。 |
| 666 | rw-rw-rw- |
rw- |
rw- |
rw- |
所有人可读写,但不可执行。适用于多用户共享写入的文件,但有安全风险。 |
| 644 | rw-r--r-- |
rw- |
r-- |
r-- |
标准权限。对于普通文本文件。所有者可读写,其他人只能读取。 |
| 660 | rw-rw---- |
rw- |
rw- |
--- |
文件所有者和同组用户可读写,其他人无任何权限。适用于项目组内部协作的文件。 |
| 600 | rw------- |
rw- |
--- |
--- |
私密文件。只有文件所有者能读写。例如SSH私钥 ~/.ssh/id_rsa、bash历史记录等。 |
总结
Linux 文件权限的核心就是回答两个问题:“谁 (u, g, o)” 和 “能做什么 (r, w, x)”。通过将 rwx 映射为 421 的数字,我们可以用一个简单的三位数(如 755)快速、精确地描述和设置权限,这是 Linux 系统设计中优雅与效率的体现。理解这套逻辑是每一位 Linux 用户的必备技能。
本文由 Gemini 2.5 Pro Preview 05-06 生成原稿加整理。