Symlink

ln 中帶有硬連結和軟連結的路徑

  • January 9, 2018

相對路徑如何工作ln (-s or not)?例如,如果我輸入ln -s foo bar/banana.txt這是什麼意思?foo 相對於什麼?因為它似乎與目前路徑無關。如果我刪除-s或不刪除,它也會有所不同嗎?我已經對其進行了測試,結果對我來說沒有意義,並且手冊頁似乎沒有解釋這一點。誰能解釋一下?

有和沒有是不同的-s

-s

ln -s path/to/file some/dir/link

path/to/file設置為some/dir/link(或者some/dir/link/file如果link是目錄)的符號連結目標。

符號連結是一種特殊類型的文件,它/包含/一個路徑(可以是任何非 0 字節的數組,某些系統甚至允許空字元串),它是符號連結的目標。ln將其設置為第一個參數。

解析連結後(稍後使用連結時),path/to/file路徑將相對於link(硬)連結到的目錄(some/dir此處some/dir/link通過其some/dir/link路徑訪問時)。

請注意,在命令執行時(或曾經)path/to/file不需要存在。ln

而在:

ln path/to/file some/dir/link

它類似於:

cp path/to/file some/dir/link

path/to/file相對於正在執行的程序的目前工作目錄ln

沒有什麼能阻止您創建指向符號連結的多個(硬)連結。例如:

$ mkdir -p a b/c b/a
$ ln -s ../a b/L # b/L a symlink to "a"
$ ln b/L b/c/L

b/L並且b/c/L是同一個文件:相同的 inode 但連結到兩個不同的目錄。它們都是與 target 的符號連結../a。但是當b/L解決時,那個指向./ab/c/L,那個指向./b/a

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