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
相关推荐
火云代理32 分钟前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
坤坤子吖1 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
AI_Gump1 小时前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
星恒随风3 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
少司府3 小时前
嵌入式入门篇(二):初识STM32F103ZET6
linux·python·stm32·单片机·嵌入式硬件·mcu·嵌入式软件
无足鸟ICT4 小时前
【RHCA+】IO调度算法
linux·服务器
打工仔折腾 AI4 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
wacsii4 小时前
【Linux进程(四)】命令行参数与环境变量
linux·服务器
无奈笑天下4 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
fengkai45454 小时前
Prometheus+K8s弹性伸缩综合项目
运维·kubernetes·k8s·prometheus·hpa·vpa