Skip to main content

Linux 软连接和硬连接的区别?

· 3 min read

Linux 中有 2 种链接方式,理解它们的区别是掌握文件系统的基础:

  1. 硬链接:同一个文件,多个文件名(共用 inode),删除本体不影响其他链接

  2. 软链接(符号链接):快捷方式,存储路径指向原文件,删本体就失效

硬链接不能跨分区、不能链接目录;软链接可以跨分区、可以链接目录。

核心区别对比

特性硬链接软链接(符号链接)
inode相同(同一个文件)不同(新文件)
跨分区❌ 不能✅ 可以
链接目录❌ 不能✅ 可以
删原文件✅ 不受影响,内容仍在❌ 失效变红,断链
文件大小和原文件一致(但不占额外空间)很小(只存路径)
相对/绝对路径无路径概念分绝对路径和相对路径

命令格式

# 硬链接
ln 源文件 链接名

# 软链接(常用)
ln -s 源文件 链接名

理解 inode

理解硬链接的关键是理解 Linux 文件系统的 inode:

  • 每个文件都有一个唯一的 inode 编号
  • inode 存储文件元数据:权限、大小、时间戳、数据块位置等
  • 文件名只是 inode 的一个"别名"
  • 硬链接就是给同一个 inode 增加一个别名

因此:

  • 硬链接和原文件地位完全平等
  • 删除任何一个文件名,文件内容仍然存在
  • 只有当所有链接都被删除时,文件内容才会被真正删除

软链接原理

软链接是一个独立的文件,它的内容是另一个文件的路径:

  • 读取软链接时,系统会自动跳转到指向的文件
  • 如果原文件被删除或移动,软链接就"断链"了
  • 软链接可以指向不存在的文件(悬空链接)

实战验证

最佳实践:用 ls -li 查看 inode 编号和链接信息
# 创建测试文件
echo "hello" > test.txt

# 创建硬链接
ln test.txt hard-link

# 创建软链接
ln -s test.txt soft-link

# 查看 inode 编号(硬链接和原文件相同)
ls -li

输出示例:

12345 -rw-r--r-- 2 user group 6 May 20 10:00 hard-link
12345 -rw-r--r-- 2 user group 6 May 20 10:00 test.txt
12346 lrwxr-xr-x 1 user group 8 May 20 10:00 soft-link -> test.txt

注意:硬链接的链接数是 2,软链接的类型是 l

常见使用场景

场景推荐方式
同一文件多个入口硬链接
快捷方式软链接
跨分区链接软链接
链接目录软链接
库文件版本管理软链接(如 libc.so.6 -> libc-2.31.so)

Reference

  1. ln 命令 man 手册
  2. 理解 Linux inode
  3. Linux 文件系统详解