🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:Linux,本专栏目的在于,记录学习Linux操作系统的总结 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

特性 | 硬链接 | 软链接 |
|---|---|---|
本质 | 多个文件名指向同一个 inode | 存储路径的特殊文件 |
inode 号 | 与源文件相同 | 有独立的 inode 号 |
跨文件系统 | ❌ 不支持 | ✅ 支持 |
链接目录 | ❌ 不支持(root 可创建但有风险) | ✅ 支持 |
源文件删除 | 仍可访问,直到所有链接删除 | 链接失效(悬空) |
文件大小 | 与源文件相同大小 | 存储的路径字符串长度 |
创建命令 | ln source link_name | ln -s source link_name |
辨别方式 | ls -l 显示普通文件 | ls -l 显示 lrwxrwxrwx |
更新同步 | 自动同步(同一数据) | 自动重定向到目标 |
# 创建硬链接
ln file.txt hardlink.txt
# 创建软链接(绝对路径更可靠)
ln -s /path/to/source symlink_name
ln -s ../relative/path symlink_name
# 创建目录软链接
ln -s /path/to/directory dir_link# 查看文件类型和链接
ls -l
# 硬链接显示:-rw-r--r-- 2 user group ...
# 软链接显示:lrwxrwxrwx 1 user group ... -> target
# 查看 inode 编号(硬链接相同,软链接不同)
ls -i file.txt hardlink.txt
# 查看硬链接计数
ls -l # 第二列的数字表示硬链接数
# 查找所有硬链接(需知道一个硬链接的路径)
find / -samefile file.txt 2>/dev/null# 删除硬链接或软链接(不影响源文件,除非删除最后一个硬链接)
rm link_name
# 只删除软链接(使用unlink)
unlink symlink_name# 创建配置文件硬链接作为备份
cp -l config.conf config.conf.backup
# 或 ln config.conf config.conf.backup
# 修改config.conf时,backup保持原始版本# 日志文件需要从多个位置访问
ln -s /var/log/app/current.log ~/logs/app_current.log
ln -s /var/log/app/current.log /etc/monitoring/app_log# 使用软链接管理多个版本
ln -s python3.9 /usr/bin/python
# 切换到另一个版本
rm /usr/bin/python && ln -s python3.11 /usr/bin/python# 库文件版本管理
libfoo.so.1.2.3
ln -s libfoo.so.1.2.3 libfoo.so.1 # 软链接
ln libfoo.so.1 libfoo.so # 硬链接或软链接目录结构:
/home/user/file.txt --> inode 1000
/tmp/backup.txt --> inode 1000 (同一个!)
inode 1000:
- 数据块位置
- 权限信息
- 所有者
- 链接计数: 2symlink.link --> inode 2000 (类型: symlink)
inode 2000 内容: "/path/to/target"
访问 symlink.link -> 读取内容 -> 跳转到 /path/to/targetln -s link1 link2
ln -s link2 link1
# 访问时无限循环# 在 /home/user 执行:
ln -s ../file.txt link1 # 链接指向 /home/file.txt
# 移动 link1 到其他位置会失效
# 最佳实践:尽量使用绝对路径
ln -s $(pwd)/file.txt link_absolute# 尝试链接目录会失败
ln dir1 dir2_hardlink # 错误:不允许将硬链接用于目录# 软链接权限总是 777,但实际访问权限由目标文件决定
# 硬链接权限与源文件相同# 为目录中所有 .conf 文件创建软链接
for file in *.conf; do
ln -s "$(pwd)/$file" ~/.config/"$file"
donefind /path -type l ! -exec test -e {} \; -print
# 或
find /path -type l -xtype l# 默认情况下,tar 会归档软链接指向的文件
# 只归档链接本身:
tar -chf archive.tar symlink # -h 选项:跟随链接# 保持软链接
rsync -a --links source/ destination/
# 将软链接转为硬链接(相同文件系统)
rsync -a --link-dest=参照目录/ source/ destination/# 创建一个测试环境
mkdir link_test && cd link_test
echo "Original Content" > original.txt
# 创建两种链接
ln original.txt hard.txt
ln -s original.txt soft.txt
# 查看区别
ls -li
cat hard.txt
cat soft.txt
# 删除源文件
rm original.txt
# 再次查看
cat hard.txt # 仍然可以访问
cat soft.txt # 报错:No such file or directory
ls -l soft.txt # 显示红色(悬空链接)验证测试:
