深色模式
软硬链接 ln -s
摘要:想让一个文件在多处出现、升级只需换一处?本文带你创建软链接,并用 ls -i 看 inode 弄清软硬链接差别。前提:任意 Linux,理解"文件=inode+名字"。
适用环境
bash
cd ~ && echo "real content" > app.conf
ls -i app.conf # 记住这个 inode 号1
2
2
一、创建软链接
bash
ln -s app.conf app.conf.link # -s 软链接
ls -l app.conf.link
# 显示 app.conf.link -> app.conf
cat app.conf.link # 通过链接读到原内容1
2
3
4
2
3
4
二、用 inode 看本质
bash
ls -i app.conf app.conf.link
# 软链接有自己独立的 inode,大小=目标路径长度
# 硬链接(无 -s)与原文件共享同一 inode:
ln app.conf app.conf.hard
ls -i app.conf app.conf.hard # inode 号相同1
2
3
4
5
2
3
4
5
三、实战:用链接做"当前版本"指针
bash
mkdir -p /opt/myapp && cd /opt/myapp
echo v1 > release-v1 && ln -s release-v1 current
cat current # 读 current 即读 v1
# 升级时:echo v2 > release-v2 && ln -sf release-v2 current1
2
3
4
2
3
4
验证
- [ ]
ls -l能看到link -> 目标的箭头 - [ ] 软链接有独立 inode(与源不同)
- [ ] 硬链接与源 inode 相同,
ls -l第二列链接数变 2
常见坑
- 删了源,软链接变"断链":
ls显示红色,访问报 No such file。硬链接不受影响(数据还在)。 - 跨文件系统不能用硬链接:硬链接要求同文件系统,软链接可以跨。
ln -sf覆盖已存在的链接:不加-f若目标已存在会报错。- 相对路径 vs 绝对路径:用相对路径(相对于链接位置)便于整个目录迁移。