Dav*_*hta 151 linux filesystems ln
我创建了这个文件结构:
test/src
test/firefox
Run Code Online (Sandbox Code Playgroud)
当我运行此命令时:
ln -s test/src test/firefox
Run Code Online (Sandbox Code Playgroud)
我希望test/firefox/src创建一个指向的符号链接test/src,但是我收到了这个错误:
-bash: cd: src: Too many levels of symbolic links
Run Code Online (Sandbox Code Playgroud)
Ste*_*ütt 251
正如 Dubu 在评论中指出的那样,问题在于您的相对路径。我在将我的 nginx 配置从/usr/local/etc/nginx到符号链接时遇到了类似的问题/etc/nginx。如果您像这样创建符号链接:
cd /usr/local/etc
ln -s nginx/ /etc/nginx
Run Code Online (Sandbox Code Playgroud)
实际上,您将创建链接 /etc/nginx -> /etc/nginx,因为源路径是相对于链接路径的。解决方案就像使用绝对路径一样简单:
ln -s /usr/local/etc/nginx /etc/nginx
Run Code Online (Sandbox Code Playgroud)
如果您想使用相对路径并让它们按照您可能期望的方式运行,您可以使用pwd将当前工作目录路径放入,如下所示:
cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx
Run Code Online (Sandbox Code Playgroud)
您可能希望在路径周围加上引号,以确保对当前路径中的空格等内容进行转义。请注意,执行此操作时必须使用双引号,因为$(pwd)如果使用单引号,则不会被替换。
slm*_*slm 46
从表面上看,您所建议的尝试对我有用。
$ mkdir -p test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    `-- [drwxrwxr-x]  ./test/src
Run Code Online (Sandbox Code Playgroud)
制作符号链接:
$ 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
Run Code Online (Sandbox Code Playgroud)
第二次运行它通常会产生这样的结果:
$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists
Run Code Online (Sandbox Code Playgroud)
所以你可能有其他事情在这里发生。我怀疑您有一个循环引用,其中链接指向自身。
你可以用它find来侦查一下:
$ cd /suspected/directory
$ find -L ./ -mindepth 15
Run Code Online (Sandbox Code Playgroud)
        Sté*_*las 17
符号链接相对于链接的父目录,而不是ln进程的当前目录。
当你这样做时:
cd /top/dir
ln -s test/src test/firefox
Run Code Online (Sandbox Code Playgroud)
(其中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/
Run Code Online (Sandbox Code Playgroud)
或者
ln -s /top/dir/test/src test/firefox/
Run Code Online (Sandbox Code Playgroud)
尽管创建指向绝对路径的符号链接通常是一个坏主意,因为当重命名目录或将文件系统挂载到其他地方时,它们很容易被破坏。
使用 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
Run Code Online (Sandbox Code Playgroud)
        小智 12
使用绝对路径而不是相对路径,那么它将起作用。
例如:
ln -s /home/user/test/src /home/user/test/firefox
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           369484 次  |  
        
|   最近记录:  |