Symlink
符號連結“ln”點斜線擴展
我想在目前工作目錄中創建指向文件的符號連結。
假設我有一個看起來像這樣的頂級樹:
. ├── dir1 │ └── hello.so └── dir2 2 directories, 1 file
我將工作目錄更改為
dir1
. 現在,我想創建hello.so
in的符號連結dir2
。我試試
ln -s ./hello.so ../dir2/
。但是,這不起作用,因為它創建了指向 的連結./hello.so
,而不是./
像我期望的那樣擴展 。
ln -s ${PWD}/hello.so ../dir2/
工作正常,但它有點冗長。我擔心我可能誤解了
./
擴展是什麼,但我無法弄清楚我做錯了什麼。如果這是我的環境特有的問題,我使用的是 Bash 5.0.2。我沒能在這個
ln
人身上找到任何花哨的旗幟。
./
不是擴展,而是文字相對路徑:.
在目前目錄中找到呼叫的條目,將其視為目錄(/
),然後從那裡繼續查找hello.so
。每個目錄都有一個
.
指向自身的條目。每個目錄也有一個..
指向其父目錄的條目(根目錄除外)。這些並不是特別特別:它們是普通的目錄條目,就像您的正常文件和目錄一樣,只是它們是自動創建的。符號連結在其中儲存一個文字字元串值,並
ln -s
準確儲存您給它的值而無需任何處理。這就是您看到的結果:./hello.so
完全按照您的指示放入連結中。如果您希望連結中包含完整路徑,則需要提供完整路徑,無論是寫出來
$PWD
還是$(pwd)
寫出來。但是,路徑是相對於位置解釋的,因此這將是該文件的有效連結:
ln -s ../dir1/hello.so dir2/hello.so
或您希望連結所在位置的任何其他路徑 -
../dir1/hello.so
無論如何都將以相同的方式儲存在連結中。在這種情況下,當連結被訪問時,
../dir1/hello.so
將相對於連結所在的位置進行查找,它會找到您的文件。如果整個目錄樹被移動,這是健壯的,而絕對路徑則不會。根據您想要實現的目標,其中任何一個都可能是您的正確選擇。