Ln
ln:使用另一個符號連結創建符號連結
假設我有一個文件和一個目錄:
$ ls -l total 4 drwxrwxr-x. 2 user user 4096 Oct 8 09:53 dir -rw-rw-r--. 1 user user 0 Oct 8 09:53 file
我創建了一個符號連結到
file
被呼叫symlink1
,以及一個符號連結到dir
被呼叫dirslink1
:$ ls -l drwxrwxr-x. 2 user user 4096 Oct 8 09:53 dir lrwxrwxrwx. 1 user user 3 Oct 8 10:03 dirslink1 -> dir -rw-rw-r--. 5 user user 0 Oct 8 09:53 file lrwxrwxrwx. 1 user user 4 Oct 8 09:53 symlink1 -> file
現在我創建了
symlink1
使用ln -s
and的符號連結ln -sL
:$ ln -s symlink1 symlink2 $ ln -sL symlink1 symlink3 $ ln -s dirslink1 dirslink2 $ ln -sL dirslink1 dirslink3
現在,據我了解,
symlink3
應該指向file
並且dirslink3
應該指向dir
. 但是當我檢查它時,symlink[23]
並沒有dirslink[23]
指向原始文件或目錄:$ ls -l drwxrwxr-x. 2 user user 4096 Oct 8 09:53 dir lrwxrwxrwx. 1 user user 3 Oct 8 10:03 dirslink1 -> dir lrwxrwxrwx. 1 user user 9 Oct 8 10:03 dirslink2 -> dirslink1 lrwxrwxrwx. 1 user user 9 Oct 8 10:03 dirslink3 -> dirslink1 -rw-rw-r--. 5 user user 0 Oct 8 09:53 file lrwxrwxrwx. 1 user user 4 Oct 8 09:53 symlink1 -> file lrwxrwxrwx. 1 user user 8 Oct 8 09:54 symlink2 -> symlink1 lrwxrwxrwx. 1 user user 8 Oct 8 09:54 symlink3 -> symlink1
問題是:是否有可能/如何使用另一個符號連結創建指向原始文件的符號連結?
-L
僅適用於硬連結;如POSIX 中指定的:如果指定了**-s選項,則-L和-P**選項應被忽略。
如果你有
readlink
你可以使用它:ln -s -- "$(readlink symlink1)" symlink4
如果您
readlink
支持該-f
選項,您可以使用它來完全規範化目標(即,如果目標符號連結包含其他符號連結,則解析目標路徑中的所有符號連結)。
您可以
cp -P
用來製作符號連結的副本:cp -P symlink2 symlink3
(假設
symlink3
尚未作為目錄或目錄符號連結存在,請參閱-T
GNU 的選項以cp
了解這些情況)。請注意,如果符號連結的目標是相對的,如果副本與原始文件不在同一目錄中,則上述內容可能會導致連結斷開。
與
zsh
,ln -s -- symlink2(:P) symlink3
將創建
symlink3
為完整規範(無符號連結)路徑的符號連結symlink2
,例如,ln -s -- "$(readlink -f symlink2)" symlink3
但更可靠的是,如果該路徑以換行符結尾,它仍然可以正常工作。與上述相同的警告和相同的解決方法 GNU
ln
。