在 CentOS(以及大多数 Linux 发行版)中,软链接(symbolic link,symlink)失效通常是指执行或访问软链接时报错,例如:
No such file or directoryToo many levels of symbolic links下面按常见原因逐一说明,并给出排查与解决方法。
软链接只是“指向路径”,不保存真实数据。
ln -s /opt/app/bin/start.sh start
# 如果 /opt/app 被删除或移动
现象
ls -l start
start -> /opt/app/bin/start.sh
cat start
# No such file or directory
排查
ls -l 软链接名
readlink 软链接名
ls -l 目标路径
解决
ln -sf 新路径 软链接名
软链接中的相对路径是相对于软链接所在目录,不是当前目录。
❌ 错误示例:
cd /opt/app
ln -s bin/start.sh /usr/local/bin/start
在 /usr/local/bin 下解析为:
/usr/local/bin/bin/start.sh (不存在)
✅ 正确做法:
cd /usr/local/bin
ln -s ../../opt/app/bin/start.sh start
或直接使用绝对路径。
ln -s a a
ln -s b a
ln -s a b
现象
Too many levels of symbolic links
解决
rm 软链接
# 重新创建正确指向
ln -s /data/app/app.sh link
# /data 未挂载
排查
df -h
mount | grep data
ls: cannot access 'link': No such file or directory
软链接本身权限通常无意义,但:
x 权限chmod +x 目标文件
chmod +x 父目录
CentOS 默认开启 SELinux。
现象
排查
getenforce
ausearch -m avc -ts recent
临时验证
setenforce 0
修复(示例)
restorecon -Rv /路径
dmesg | grep error
fsck(离线检查)
ls -l 软链接
↓
readlink 软链接
↓
ls 目标路径是否存在
↓
是否为相对路径错误
↓
是否循环链接
↓
是否跨挂载点 / NFS
↓
SELinux / 权限
如果你愿意,可以贴出:
ls -l 软链接readlink 软链接我可以直接帮你判断是哪一种原因。