背景

今天我在尝试使用 ln -s命令尝试创建一个目录的软连接时,发现创建了一个错误的软连接。这个软连接并没有像预期一样通过 cd 命令进入正确的路径下。

[root@node01 ~]# cd demo
[root@node01 demo]# pwd
/root/demo
[root@node01 demo]# ln -sfn code ~/code
[root@node01 demo]# cd ~
[root@node01 ~]# pwd
/root
[root@node01 ~]# cd code
-bash: cd: code: Too many levels of symbolic links

如上面所示,创建链接失败。

原因分析:

出现上述原因是由于我对于 ln -s命令创建软链接的原理不透彻导致的,ln -s 创建软链接命令的正确用法如下:

ln -s [源路径] [目标路径]
# 其中源路径要求为绝对路径,否则会导致创建的软链接不能用,示例:
ln -s /root/demo/code ~/code

在使用 ln -s创建软链接的时候要求源路径必需为绝对路径,否则创建好的软链接就会出现

  • Too many levels of symbolic links
  • No such file or directory

这两种错误。

Too many levels of symbolic links 原因分析

这个错误简单翻译过来就是符号链接中出现的目录层数过多,原因是由于我们在建立符号链接是源路径使用了相对路径的方式,而 linux 系统对于相对路径的计算方式是基于当前目录的路径+相对路径的方式计算的,而在进入这个计算得出的路径下时,发现这个路径中又包含了软链接,也就是自己包含自己的逻辑,从而触发了递归计算。而一个没有跳出条件的递归结果就是触发路径长度限制``Too many levels of symbolic links`。

No such file or directory 原因分析

这个错误的原因就很简单了。上面说过,在计算软链接的路径时,如果源路径是一个相对路径则会基于当前路径计算绝对路径,即当前目录的路径+相对路径的计算结果。当这个结果路径不对时,自然就 No such file or directory 了。

参考资料

软连接ln -s 创建以及删除
ln -s 软链接目录无法打开
用软链接建立循环目录

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐