Appearance
ln 怎么用:软链接和硬链接到底有什么区别
ln 命令本身不复杂,真正容易混乱的是:
- 软链接到底是不是“快捷方式”
- 硬链接为什么删掉原文件还能访问
- 什么场景该用
ln -s
先说结论
可以先这样理解:
- 软链接更像“记录目标路径的引用”
- 硬链接更像“给同一个 inode 再起一个名字”
所以它们在删除目标文件、跨文件系统和目录支持上,行为完全不一样。
一、最常见的创建方式
软链接
bash
ln -s /data/releases/current /opt/app硬链接
bash
ln source.txt target.txt工程里更常见的是软链接,因为它更适合做目录切换、版本切换和路径兼容。
二、软链接和硬链接的本质区别
软链接
特点:
- 记录的是目标路径
- 可以跨文件系统
- 可以指向目录
当目标文件被删除后:
- 软链接还在
- 但它会变成失效链接
硬链接
特点:
- 和原文件共享同一个 inode
- 本质上是同一份数据的多个文件名
- 不能跨文件系统
- 通常不能给目录随意创建硬链接
当你删除“原文件”时,如果还有其他硬链接存在:
- 数据不会立刻消失
- 因为真正的数据仍然被其他目录项引用着
三、为什么硬链接删除原文件后还能访问
因为 Linux 里“文件名”和“文件内容”不是一回事。
可以粗略理解成:
- 文件名只是目录项
- 真正的数据由 inode 和数据块承载
硬链接的关键点就在这里:
- 多个文件名可以指向同一个 inode
所以删除某一个文件名,只是少了一个入口,不代表数据就没了。
四、怎么判断一个文件是不是硬链接
可以用:
bash
ls -li如果两个文件 inode 一样,通常说明它们是同一个文件内容的不同目录项。
五、实际开发里更常见的用法
1. 软链接做版本切换
例如:
/opt/app/current -> /opt/app/releases/20260418
上线时只切换 current 指向,回滚也方便。
2. 软链接做兼容路径
有些程序固定读某个路径,但真实目录想放到别处,这时软链接很实用。
3. 硬链接做同文件多入口
这个场景在普通业务里相对少一些,但在某些备份、快照、文件系统工具里会碰到。
六、容易踩的几个坑
1. 以为软链接删除目标文件后还能正常用
不会。目标一删,软链接就只是一个失效入口。
2. 以为硬链接可以随便链接目录
通常不这么做,系统也会限制。
3. 混淆“路径相同”和“内容相同”
硬链接不是复制一份内容,而是多个名字共用同一份内容。
一句话总结
软链接是“指向路径”,硬链接是“共用 inode”。
如果你做部署切换、路径兼容、目录映射,优先想到软链接;如果你在理解文件系统行为,就要真正把硬链接看成“同一个文件的多个名字”。