Appearance
硬链接和软链接
考情分析
硬链接与软链接是文件共享的实现方式,在 408 真题中常以选择题形式考查两者的区别。属于 🔥🔥 中高频考点。
同一份数据,两个用户都想通过自己的路径访问到——文件系统提供了两种"共享"机制,它们在删除行为、跨文件系统能力上有本质区别。
文件共享的两种方式
在无环图目录中,多个路径可以指向同一个文件。实现这种共享的方式有两种:硬链接和软链接(符号链接)。
硬链接
硬链接是让多个目录项指向同一个 inode。硬链接就像同一栋房子有两个门牌号,拆掉一个门牌号房子还在。
目录A: report.txt → inode 42 (links=2)
目录B: 共享文件.txt → inode 42 (links=2)
│
┌─────┴─────┐
│ 数据块... │
└───────────┘创建硬链接时,inode 中的**引用计数(link count)**加 1。
删除行为
删除一个硬链接时:
- 从目录中移除对应的目录项
- inode 引用计数减 1
- 只有当引用计数变为 0 时,才真正释放 inode 和数据块
硬链接的限制
- 不能跨文件系统:因为 inode 号只在同一文件系统内有效
- 不能链接目录:防止形成环路导致遍历死循环(部分系统允许 root 创建)
软链接(符号链接)
软链接是一个独立的文件,它的内容是目标文件的路径名字符串。软链接就像桌面上的快捷方式——它只记了一个路径,原文件被删了快捷方式就失效了。
目录A: report.txt → inode 42 (links=1)
目录B: shortcut.txt → inode 99 (links=1)
│
┌─────┴─────────┐
│ "/A/report.txt"│ ← 存的是路径
└───────────────┘访问软链接时,系统读取链接文件的内容,解析出目标路径,再按路径去查找真正的文件。
删除行为
- 删除软链接本身:只删除这个链接文件,目标文件不受影响
- 删除目标文件:软链接变成「悬空链接(dangling link)」,访问时报错「文件不存在」
硬链接 vs 软链接对比
| 特性 | 硬链接 | 软链接 |
|---|---|---|
| 本质 | 多个目录项指向同一 inode | 独立文件,存储目标路径 |
| inode | 共享同一个 inode | 有自己独立的 inode |
| 引用计数 | 创建时 +1 | 不影响目标文件的引用计数 |
| 跨文件系统 | 不可以 | 可以 |
| 链接目录 | 不可以(防止环路) | 可以 |
| 删除目标文件 | 其他链接仍可访问 | 链接悬空,无法访问 |
| 访问速度 | 直接访问 inode,快 | 需要解析路径,多一次间接寻址 |
| 占用空间 | 仅多一个目录项 | 占一个 inode + 存储路径的数据块 |
| 文件大小 | 无此概念 | 等于路径字符串的长度 |
一句话记忆
硬链接 = 给 inode 多取了一个名字;软链接 = 给文件建了一个快捷方式。
举例说明
# 假设 file.txt 的 inode 号为 42,初始 links=1
# 创建硬链接
ln file.txt hard_link.txt
# 结果:hard_link.txt → inode 42, links=2
# 创建软链接
ln -s file.txt soft_link.txt
# 结果:soft_link.txt → inode 99(新inode), 内容="/path/file.txt"
# file.txt 的 links 仍为 2
# 删除原文件
rm file.txt
# inode 42 的 links 变为 1(hard_link.txt 仍可访问)
# soft_link.txt 变成悬空链接(访问会报错)考研高频考点
- 🔥🔥🔥 硬链接和软链接的区别(选择题必考)
- 🔥🔥🔥 删除文件后硬链接/软链接的行为差异
- 🔥🔥 硬链接不能跨文件系统、不能链接目录的原因
- 🔥 引用计数在硬链接删除中的作用
- 🔥 软链接的悬空问题
链接解决了文件共享的问题,但文件系统整体是怎么在磁盘上布局的?下一篇来看文件系统的全局结构。