你是否曾困惑:
在类 Unix 操作系统(如 Linux)中,"万物皆文件",而文件本质上是一个指向 inode(一种存储文件所有信息的数据结构,不包括文件名和实际内容)的链接。
硬链接是一个指向相同底层 inode 的文件。当你删除其中一个文件时,只是移除了指向底层 inode 的一个链接。而符号链接(也称为软链接)则是指向文件系统中另一个文件名的链接。


inode 相当于身份证号:存储文件所有信息(除文件名) 文件名 相当于人名:只是inode的别名
特性 | 硬链接 | 符号链接 |
|---|---|---|
本质 | 同一inode的多个别名 | 指向另一个文件路径的指针 |
跨磁盘 | ❌ 不支持 | ✅ 支持 |
原文件删除 | 数据仍在(减少链接数) | 变成「断链」(红底白字❗) |
应用场景 | 备份防误删 | 软件版本切换 |
# 创建重要报告的硬链接备份(如同给文件加双保险)
ln ln_test.txt ln_test.bak
# 验证链接关系(查看inode号相同)
ls -i ln_test.txt ln_test.bak
# 输出示例:
# 115 ln_test.bak 115 ln_test.txt
关键提示:硬链接显示为普通文件,但共享inode
# 创建Python3.13的符号链接(灵活切换版本)
ln -s /usr/local/bin/python3.13 /usr/bin/python3
# 强制覆盖旧链接(版本升级时常用)
ln -sf /usr/local/bin/python3.13 /usr/bin/python3 # 权限不足请使用sudo
# 查看链接指向(箭头显示真实路径)
ls -l /usr/bin/python3
# 输出:lrwxrwxrwx 1 root root 25 Jul 16 12:01 /usr/bin/python3 -> /usr/local/bin/python3.13
硬链接限制
符号链接陷阱
# 错误示范:路径写反导致失效
ln -s /backup/data.txt ./link # ✅正确
ln -s ./link /backup/data.txt # ❌反向链接无效
readlink命令检查指向路径:
readlink -f ./link # 显示真实路径
找回被删文件
# 查看文件inode号
stat ln_test.txt
输出关键信息:
文件:ln_test.txt
Inode:115
链接数:2 # 表示有2个硬链接指向此inode
链接数为0时:系统自动删除文件数据!
检测重复文件
fdupes -r /project # 扫描目录内inode相同的重复文件,命令需要安装
批量创建版本链接
# 为所有.py文件创建符号链接到backup_dir
find . -name "*.py" -exec ln -s {} /backup_dir \;
当你下次用
ln命令时,记住:
技术提问: 如果对inode执行cp命令,会创建新inode吗? 评论区分享你的见解!