在 Ubuntu(以及 Linux generally)里,软链接(symbolic link,软连接)指向错误通常不是“系统 bug”,而是创建方式或路径理解有误。下面按最常见原因给你梳理,并给出对应解决办法。
软链接里写的相对路径,是相对于「软链接所在目录」的,不是你当前 shell 的目录。
❌ 错误示例:
cd /home/user
ln -s data/file.txt /tmp/link
如果 /tmp/link 是软链接,它真正指向的是:
/tmp/data/file.txt
而不是 /home/user/data/file.txt
✅ 正确做法(二选一):
# 方法1:用绝对路径
ln -s /home/user/data/file.txt /tmp/link
# 方法2:先进入软链接目录,再写相对路径
cd /tmp
ln -s ../home/user/data/file.txt link
软链接只保存“路径字符串”,不会跟着原文件走。
ln -s a.txt link
mv a.txt b.txt
此时:
link -> a.txt (已不存在)
✅ 解决:
例如:
ln -s /opt/app/ /usr/local/app
结果:
/usr/local/app -> /opt/app/
一般是没问题的,但如果你后面又:
cd /usr/local/app
却提示错误,可能是:
/opt/app 不存在软链接可以跨磁盘,但如果:
就会“看起来指向错误”。
✅ 检查:
mount | grep 相关路径
ls -l link
输出:
link -> /wrong/path
这是软链接本身存的内容,不是系统算错了。
readlink link
readlink -f link
ls -l link
namei -l link
ln -s ./config ~/.config
如果:
~/.config 已存在且是目录
结果会变成:~/.config/config -> ./config
✅ 正确写法:
ln -s ./config ~/.config/config
或先删除原有目录。
Ubuntu 软连接“指向错误”,90% 是因为:相对路径理解错 + 原文件移动/删除。
如果你愿意,可以把:
ls -l 软链接贴出来,我可以直接帮你指出是哪一步错了。