一、文件链接
硬链接(Hard Link)
- 通过
ln 源文件 新文件名命令创建。 - 本质:多个文件名指向同一个索引节点(inode),共享文件数据块。
- 特点:
- 不支持跨文件系统(因为不同文件系统的 inode 编号可能重复)。
- 删除一个硬链接不会影响其他链接,只有当所有链接都被删除时,文件数据才被真正释放。
- 使用
ls -l查看时,第二列数字表示该文件的硬链接数(即 inode 被引用的次数)。
- 通过
符号链接(Symbolic Link / Soft Link)
- 通过
ln -s 源文件 新链接名创建。 - 本质:创建一个特殊的“link 文件”,内容是目标文件的路径字符串。
- 特点:
- 可以跨文件系统,甚至指向网络上的远程文件(如 NFS)。
- 链接数始终为 1(因为它是一个独立的文件)。
- 访问效率较低,需先读取链接文件内容,再根据路径查找目标文件(多一次磁盘 I/O)。
- 若原文件被删除或移动,符号链接会变成“悬空链接”(dangling link),访问时报错。
- 通过
二、文件保护:存取控制矩阵
原理:使用一个二维矩阵来描述系统中每个用户对每个文件的访问权限。
- 行表示用户(主体),列表示文件(客体)。
- 矩阵元素 A[i][j] 表示第 i 个用户对第 j 个文件的操作权限,如 R(读)、W(写)、X(执行)等。
示例(表 4-5):
用户 文件 权限 张军 ALPHA RWX 王伟 BETA RWX 赵凌 SQRT RWX 李晓钢 REPORT RWX 优缺点分析:
- 优点:逻辑清晰,权限管理直观。
- 缺点:稀疏矩阵导致空间浪费严重(大多数用户对大多数文件无权限),难以扩展到大型系统。
- 实际应用中通常采用更高效的替代方案,如:
- 访问控制列表(ACL):按文件维护权限列表。
- 能力表(Capability List):按用户维护可访问文件及其权限。
- 权限位(如 Unix 的 rwx):简化模型,分为 owner/group/others 三类用户。
补充说明:
这部分内容属于操作系统中的“文件管理”核心模块,尤其在 UNIX/Linux 系统中体现明显。理解硬链接与符号链接的区别有助于掌握文件系统的底层结构;而存取控制矩阵则是现代权限系统的设计基础,在软件设计师考试、系统安全设计等领域频繁考查。
硬链接和符号链接在 inode 上的区别如下:
硬链接(Hard Link)
- 硬链接与原文件共享同一个 inode 编号。
- 实际上,硬链接只是给已有文件增加了一个新的目录项(文件名),所有硬链接都指向同一个物理 inode。
- 文件的链接计数(link count)会随着硬链接的创建而增加(可通过
ls -l第二列查看)。 - 只有当所有硬链接都被删除、链接计数为 0 时,系统才会真正释放该文件的数据块和 inode。
符号链接(Symbolic Link / Soft Link)
- 符号链接拥有自己独立的 inode,它是一个特殊类型的文件(link 类型)。
- 其 inode 中记录的内容是目标文件的路径字符串(例如
/home/user/file.txt)。 - 不影响原文件的链接计数(原文件的 link count 不变)。
- 即使符号链接存在,原文件被删除后,符号链接将失效(称为“悬空链接”)。
📌 示例说明:
# 创建测试文件$echo"hello">original.txt# 创建硬链接$lnoriginal.txt hardlink.txt# 创建符号链接$ln-s original.txt softlink.txt# 查看 inode 信息$ls-li131073-rw-r--r--2user user6Apr510:00 original.txt131073-rw-r--r--2user user6Apr510:00 hardlink.txt# 相同 inode131074lrwxrwxrwx1user user12Apr510:00 softlink.txt ->original.txt# 不同 inodeoriginal.txt和hardlink.txt的 inode 编号相同(131073),属于硬链接。softlink.txt的 inode 编号不同(131074),类型为l(link),内容是指向原文件的路径。
✅ 总结对比表:
| 特性 | 硬链接 | 符号链接 |
|---|---|---|
| 是否共享 inode | 是(同一 inode) | 否(独立 inode) |
| 链接数是否增加 | 是 | 否 |
| 能否跨文件系统 | 否 | 是 |
| 能否链接目录 | 通常不允许(防止循环) | 可以 |
| 原文件删除后状态 | 仍可访问(数据未删) | 失效(悬空链接) |
| inode 类型 | 普通文件类型 | 特殊 link 类型 |