参考文章:https://www.baeldung.com/linux/too-many-levels-of-symlinks
使用ln命令创建符号链接
要使用ln命令创建符号链接,我们需要传递 –s或–符号选项:
$ ln -s A B 源文件即A,目的地是B。
意义:从 /B/A 中读取源A的内容。
有两个文件夹data和model在同一个目录下,想要将data链接到model下,从而可以从model/data中读取源data的内容。
└── [drwxr-xr-x] ./mydir
├── [drwxr-xr-x] ./mydir/data
└── [drwxr-xr-x] ./mydir/model
$ cd /mydir
$ ln -s data model
.
├── [drwxr-xr-x] ./data
└── [drwxr-xr-x] ./model
└── [lrwxrwxrwx] ./model/data -> data
符号链接已创建,但实际上已损坏。
可以使用find命令找到所有损坏的符号链接:
$ find -L -xtype l
find: ‘./test/model/data’: Too many levels of symbolic links
此错误的原因是,具有相对源的符号链接始终相对于符号链接目录,而不是我们创建链接的目录。
解决方案:
1.相对路径
2.绝对路径
1. 使用相对路径
因为是相对于目标文件,我们可以通过目标文件相对路径来指定源文件,但要注意指定的源文件路径都将拼接在目标链接之后成为真正用于创建的源路径,可以使用以下方式:
ln -s ../data model
以vscode为例,可以看到model下有了data软链接文件,即model/data(如图后面会有一个反回车一样的图标):

2. 使用绝对路径
我们可以为源参数使用绝对路径:
$ cd /mydir
$ ln -s "$(pwd)/data" model
$ tree --noreport -fp
.
├── [drwxr-xr-x] ./data
└── [drwxr-xr-x] ./model
└── [lrwxrwxrwx] ./model/data -> /mydir/data
验证链接是否正常工作:
├── [drwxr-xr-x] ./data
│ └── [-rw-r--r--] ./data/sample.txt
└── [drwxr-xr-x] ./model
└── [lrwxrwxrwx] ./model/data -> /mydir/data
$ cd mydir/data
$ ls -l
total 0
-rw-r--r-- 1 baeldung baeldung 0 Aug 3 20:51 sample.txt
如上,已经成功地使用符号链接访问源目录并列出所有文件。
将符号链接到绝对路径的缺点是,当目录名称更改时,它们很容易被破坏。
删除软连接
正确的是:rm -rf hb_link, 这里的f是强制的意思。
错误的是:rm -rf hb_link/ 这个会把整个目录都删了
备注:想要删除链接文件要用以下命令 rm /home/hb_link 只是少了一个“ / ” 删除的 就是链接文件, 也就是在文件的最后不要加上/
问题: ln: failed to create symbolic link ‘/usr/bin/xx’: File exists
把 -s 命令修改成 -sf 命令;-f 命令的意思是强制执行,也就意味着如果不存在就执行创建,存在就执行覆盖掉
本文介绍了在Linux中遇到'Too many levels of symbolic links'错误时如何解决。通过理解错误原因,可以采取使用相对路径或绝对路径创建符号链接的方式避免问题。同时,提供了正确和错误的删除软链接的方法,并给出了解决'File exists'错误的技巧。
2450

被折叠的 条评论
为什么被折叠?



