Symlink

符號連結“ln”點斜線擴展

  • February 6, 2019

我想在目前工作目錄中創建指向文件的符號連結。

假設我有一個看起來像這樣的頂級樹:

.
├── dir1
│   └── hello.so
└── dir2

2 directories, 1 file

我將工作目錄更改為dir1. 現在,我想創建hello.soin的符號連結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將相對於連結所在的位置進行查找,它會找到您的文件。如果整個目錄樹被移動,這是健壯的,而絕對路徑則不會。根據您想要實現的目標,其中任何一個都可能是您的正確選擇。

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