首页/操作系统/04-file/硬链接与软链接 🔗 在 Obsidian 中打开
操作系统 · 04-file

硬链接与软链接

重要度 ⭐⭐⭐⭐ 难度 ⭐⭐⭐考查频率 高 操作系统/文件管理硬链接软链接符号链接link count
速查
硬链接:多个文件名指向同一个 inode(同一文件实体);软链接:新文件内部存储目标文件的路径名(快捷方式)。删除原文件时——硬链接不受影响(引用计数 > 0),软链接失效(悬空指针)。硬链接不能跨文件系统、不能链目录;软链接都可以。

速查

项目
硬链接多个文件名指向同一个 inode(同一文件实体)
软链接新文件中存储目标文件的路径名(快捷方式)
删除原文件硬链接不受影响(inode 引用计数 > 0),软链接失效(悬空指针)
跨文件系统硬链接不能跨文件系统,软链接可以

核心概念

硬链接(Hard Link)

  • 多个文件名指向同一个 inode(同一个文件实体)
  • ln 命令创建:ln source target
  • 文件的引用计数(inode 的 link count)记录有多少个硬链接
  • 只有当引用计数为 0 时,文件才真正被删除
  • 不能跨文件系统(inode 在同一文件系统内唯一)

软链接(符号链接,Symbolic Link)

  • 创建一个新文件,内容是目标文件的路径名
  • ln -s 命令创建:ln -s source target
  • 类似 Windows 的快捷方式
  • 可以跨文件系统
  • 可以链接目录(硬链接通常不允许链接目录)
  • 删除原文件后,软链接失效(悬空指针)
# 硬链接:两个名字共享同一 inode
ln file.txt hard_link.txt
ls -i file.txt hard_link.txt     # 两者 inode 号相同

# 软链接:新建一个独立 inode,内容存路径名
ln -s file.txt soft_link.txt
ls -l soft_link.txt              # soft_link.txt -> file.txt

关键性质

对比项硬链接软链接
本质多个文件名 → 同一 inode新文件存储目标路径
inode共享同一 inode有独立 inode
引用计数增加 link count不影响原文件 link count
删除原文件不受影响(计数 > 0)失效(悬空指针)
跨文件系统不能可以
链接目录通常不允许可以
存储空间不额外占用占用(存储路径名)

常见考法

考法解题套路
硬链接 vs 软链接硬链接共享 inode,软链接存储路径名
删除原文件后硬链接仍可用(link count > 0),软链接失效
引用计数硬链接增加 link count,创建文件时 $count=1$
跨文件系统硬链接不能跨,软链接可以跨

易错点

五个高频陷阱
  • 硬链接不占用额外数据块(只是目录项指向同一 inode),软链接占用(存储路径名)
  • 删除文件时检查的是引用计数——计数为 0 才释放 inode 和数据块
  • 硬链接不能链接目录(防止环的产生),软链接可以
  • 软链接是独立文件,有自己的 inode,只是内容是目标路径
  • 多个硬链接之间地位平等——没有「原文件」和「链接」之分

核心结论

  1. 硬链接是多个文件名指向同一 inode,共享文件实体
  2. 软链接是独立文件,存储目标文件的路径名
  3. 删除原文件后硬链接不受影响(引用计数 > 0),软链接失效
  4. 硬链接不能跨文件系统和链接目录,软链接都可以
  5. 文件真正删除的条件:引用计数为 0(所有硬链接都删除)

记忆卡片

硬链接和软链接的本质区别?
硬链接:多文件名 → 同一 inode;软链接:新文件存储目标路径名
删除原文件后两者的区别?
硬链接不受影响(link count > 0),软链接失效(悬空)
为什么硬链接不能链接目录?
防止目录结构中产生环
硬链接能跨文件系统吗?
不能——inode 在同一文件系统内唯一
文件何时真正被删除?
引用计数(link count)为 0 时
软链接多占什么空间?
独立 inode + 数据块(存储路径名)

交互动画

硬链接:多个文件名 → 同一 inode 文件名 A 文件名 B inode 12345 link count = 2 数据块 软链接:独立 inode,内容存路径名 符号链接名 inode 999 存储路径 "file.txt" inode 12345 目标文件实体
两个文件名共享同一 inode,引用计数为 2
点击「删除原文件」观察两种链接在删除原文件后的不同命运

相关知识点

directory-structure inode-detail

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。