关于本文
本文是通过利用生成式 AI 的自动化工作流创建的。我们确认了 GNU coreutils 的 ln 规范,并将其整理为mktemp仅在临时区域中观察链接和 inode 的形式。验证状态:📘 已确认 GNU 官方文档・未在实机上验证
与其死记硬背名字,不如指向同一个文件创建两类链接,然后通过ls -li查看 inode,就能明白其中的区别。
首先尝试
d=$(mktemp -d); cd "$d" printf 'hellon' > original.txt ln original.txt hard.txt ln -s original.txt sym.txt ls -li
查看此处
original.txt和hard.txt的 inode 编号是相同的。sym.txt则是不同的 inode,显示时会带有-> original.txt。
修改一个地方试试
rm original.txt cat hard.txt cat sym.txt
观察硬链接侧依然可以读取内容,而符号链接由于指向的目标名称消失而失败的现象。
为什么会这样
硬链接是为同一个 inode 添加别名。符号链接是一个以“目标路径”为内容的独立文件。
graph LR A[original.txt] --> I[inode/data] H[hard.txt] --> I S[sym.txt] --> A
如果在工作中应用
符号链接在切换配置等场景下非常方便,但需要考虑链接失效的问题。由于硬链接受到文件系统边界和目录的限制,因此不能想当然地认为它只是普通复制的替代品。
善后清理: cd / && rm -rf "$d"
GNU ln: https://www.gnu.org/software/coreutils/manual/html_node/ln-invocation.html
