文档首页> 技术教程> 软链接与硬链接的区别及使用场景

软链接与硬链接的区别及使用场景

发布时间:2025-10-15 08:32        更新时间:2025-10-15 13:37
ln 不带参数建出来的硬链接,和 ln -s 建出来的软链接,很多人用了多年 Linux 也没认真分过。从 inode 的视角看,两者根本是两种东西。 inode 视角的区别 硬链接是同一个 inode 的第二个名字。ls -li 一下就能看出来:源文件和硬链接的 inode 号相同,链接计数从 1 变成 2。这也解释了一个常见现象:建了硬链接后 rm 掉原文件,空间不释放、用新名字照样能读,所有名字都删干净,空间才真正释放。 软链接则是一个独立的新文件,有自己的 inode,内容里存的只是一个路径。目标删掉或挪走,它就成了悬空链接,ls -l 里显示为断链,访问时报 No such file or directory。 两条硬性限制 硬链接不能跨文件系统,两个分区各有各的 inode 表,号对不上;也不能对目录创建,防止目录树成环。软链接没有这两条限制,跨盘、指目录都行,代价是依赖目标的存活。选择原则一句话:要一个"别名"用软链接,要多一个"名字"用硬链接,日常绝大多数场景是前者。 经典用法:版本目录切换 发布程序时用软链接指向当前版本,是硬链接给不了的手法: /opt/app -> /opt/app-1.8.0 升级时先解压好 1.9.0,然后 mv /opt/app /opt/app.old && ln -sfn /opt/app-1.9.0 /opt/app。配置文件里始终写 /opt/app,回滚只要把链接指回去,秒级完成。ln 的 -n 把指向目录的链接当文件处理,-f 允许覆盖,几个参数连用是标准写法。建链接优先用相对路径:cd /opt && ln -s app-1.8.0 app,整目录搬迁后链接依然有效,写死绝对路径的链接挪个家就全体断链。 顺着链接找真身用 readlink -f /opt/app,脚本里要取实际路径全靠它。接手陌生环境时,find /opt -maxdepth 1 -type l 一条命令把所有软链接列全,哪些是别名一眼分明。顺带提醒:备份工具对软链接默认不跟随,rsync 想传实体内容要加 -L。建完链接用 ls -li 确认 inode 号,是最省事的自查方式。