Linux
太多級別的符號連結
我創建了這個文件結構:
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
如果使用單引號,則不會被替換。