Linux 软连接与硬连接比较

特性 软连接(符号链接) 硬连接
本质 指向另一个文件的路径的特殊文件 文件数据的另一个目录项(多个文件名指向同一inode)
inode 有自己的独立inode 与原文件共享同一个inode
跨文件系统 ✅ 可以 ❌ 不可以
链接目录 ✅ 可以 ❌ 不可以
原文件删除后 变成悬空链接(失效) 仍然可以访问数据
大小 存储路径字符串,很小 与原文件相同(不额外占用)
创建命令 ln -s 源文件 链接名 ln 源文件 链接名
文件类型标识 l(ls -l 显示) -(普通文件)

核心原理图解

bash 复制代码
硬连接:
[inode 12345] ← 文件名A
              ← 文件名B  (硬连接)

软连接:
[inode 11111] → 存储路径 "/path/to/target" → [inode 12345] ← 原文件名
[inode 22222] ← 软连接文件名

使用场景建议

软连接适合:

  • 需要跨文件系统

  • 链接目录

  • 快捷方式、版本切换(如 python -> python3.11

  • 需要明确知道原文件是否还存在

硬连接适合:

  • 同一文件系统的备份/快照

  • 需要防止误删除(类似引用计数保护)

  • 节省磁盘空间的多个入口


注意事项

  1. 硬连接不能跨设备(不同分区/磁盘有不同的inode空间)

  2. 硬连接不能链接目录(防止循环引用和无限递归)

  3. 修改任一连接的内容,其他连接都会同步变化(指向同一份数据)

  4. 软连接可以形成循环(例如 A→B,B→A),需注意避免

  5. 软连接的目标路径 :建议使用绝对路径,避免移动后失效


快速验证示例

bash 复制代码
# 创建原文件
echo "hello" > original.txt

# 创建硬连接和软连接
ln original.txt hardlink.txt
ln -s original.txt softlink.txt

# 查看 inode 信息
ls -li original.txt hardlink.txt softlink.txt
# 输出示例:
# 123456 -rw-r--r-- 2 user user 6  original.txt
# 123456 -rw-r--r-- 2 user user 6  hardlink.txt  (相同 inode)
# 789012 lrwxrwxrwx 1 user user 12 softlink.txt -> original.txt

# 删除原文件
rm original.txt

# 硬连接仍可读取
cat hardlink.txt   # 输出: hello

# 软连接失效
cat softlink.txt   # 错误: No such file or directory
相关推荐
zzzzzz31012 小时前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode13 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒3 天前
TShark:基础知识
linux
AlfredZhao3 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao3 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪4 天前
linux 拷贝文件或目录到指定的位置
linux
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai