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
相关推荐
资深技术分享员2 小时前
Geejing WebBuilder 数据库连接配置与在线 SQL 工具,运维的左右手
运维·数据库·sql·低代码
高山有多高2 小时前
【Linux笔记】UpdSocket
linux·运维·笔记
皓月盈江2 小时前
Linux系统grep、sed 、awk介绍下,使用方法及区别?
linux·运维·服务器·sed·grep·awk
宵时待雨2 小时前
MySQL数据库1:数据库基础
服务器·数据库·mysql
云栖梦泽2 小时前
Linux内存管理
linux·运维·服务器
吴声子夜歌2 小时前
Nginx应用与运维——Nginx Web服务应用实战(静态文件服务器的搭建)
运维·前端·nginx
Lucis__3 小时前
编译链接全链路解析:ELF形成到可执行加载的发展历程
linux·程序·elf文件
海宇服务3 小时前
零信任架构实战:基于海宇身份证OCR构建自动化自助终端核验网关
运维·人工智能·架构·自动化
开开心心就好3 小时前
图片白底怎么去掉?抠图工具抠完背景透明
java·服务器·开发语言·pdf·ocr·散列表·启发式算法
ken22323 小时前
ubuntu 24.04, audacity 4 AppImage 加载 libavdevice.so.62 /.61 /.63 失败:依赖缺失?
linux·运维·ubuntu