符号链接级别过多

符号链接级别过多

我创建了这个文件结构:

test/src
test/firefox

当我运行这个命令时:

ln -s test/src test/firefox

我希望test/firefox/src创建一个指向 的符号链接test/src,但是我收到此错误:

-bash: cd: src: Too many levels of symbolic links
  • 我究竟做错了什么?
  • 您是否无法创建一个指向存储在该文件夹同级文件夹中的文件夹的符号链接?
  • 这有什么意义呢?

答案1

正如Dubu在评论中指出的那样,问题在于你的相对路径。我在将 nginx 配置从 符号链接/usr/local/etc/nginx到 时遇到了类似的问题/etc/nginx。如果您像这样创建符号链接:

cd /usr/local/etc
ln -s nginx/ /etc/nginx

事实上,您将创建链接 /etc/nginx -> /etc/nginx,因为源路径是相对于链接路径的。解决方案就像使用绝对路径一样简单:

ln -s /usr/local/etc/nginx /etc/nginx

如果您想使用相对路径并让它们按照您可能期望的方式运行,您可以使用该$PWD变量轻松地将路径添加到当前工作目录路径,如下所示:

cd /usr/local/etc
ln -s "$PWD/nginx/" /etc/nginx

确保路径用双引号引起来,以确保当前路径中的空格等内容被转义。请注意,执行此操作时必须使用双引号,因为$PWD如果使用单引号,则不会被替换。

答案2

从表面上看,您所建议的尝试对我有用。

例子

$ mkdir -p test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    `-- [drwxrwxr-x]  ./test/src

建立符号链接:

$ ln -s test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    |   `-- [lrwxrwxrwx]  ./test/firefox/src -> test/src
    `-- [drwxrwxr-x]  ./test/src

第二次运行它通常会产生以下结果:

$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists

所以你可能还有其他事情发生。我怀疑您有一个循环引用,其中链接指向自身。

您可以使用find以下方法来侦查一下:

$ cd /suspected/directory
$ find -L ./ -mindepth 15

答案3

符号链接是相对于链接的父目录,而不是相对于进程的当前目录ln

当你这样做时:

cd /top/dir
ln -s test/src test/firefox

(其中test/firefox是目录),您正在创建一个test/firefox/src目标为test/src.

test/src是相对于test/firefox目录的,所以这是一个到/top/dir/test/firefox/test/src.

如果您希望该符号链接成为 的链接/top/dir/test/src,则需要编写:

ln -s ../src test/firefox/

或者

ln -s /top/dir/test/src test/firefox/

尽管创建绝对路径的符号链接通常是一个坏主意,因为当重命名目录或在其他地方安装文件系统时,它们很容易被破坏。

使用 GNU ln,您可以使用它的-r选项让它自己进行计算:

$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src

答案4

答案是使用绝对路径。但输入当前目录中某些内容的完整路径可能会很烦人。您可以使用 pwd 命令替换来避免这种情况。如果您的目标位于当前目录中:

ln -s "$(pwd)"/target abs/path/to/link 

如果您的链接应该在当前目录中:

ln -s /abs/path/to/target "$(pwd)"

相关内容