Linux

太多級別的符號連結

  • September 30, 2021

我創建了這個文件結構:

test/src
test/firefox

當我執行這個命令時:

ln -s test/src test/firefox

我希望test/firefox/src創建一個指向的符號連結test/src,但是我得到了這個錯誤:

-bash: cd: src: Too many levels of symbolic links
  • 我究竟做錯了什麼?
  • 您不能創建指向儲存在該文件夾兄弟姐妹中的一個文件夾的符號連結嗎?
  • 這有什麼意義?

從表面上看,你建議你嘗試過的東西對我有用。

例子

$ 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

正如 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如果使用單引號,則不會被替換。

引用自:https://unix.stackexchange.com/questions/141436