本篇介紹如何使用 Linux 的 ln
指令建立各種連結檔案。
所謂的硬連結就是使用相同 inode 的連結檔案,ln
指令預設就是建立硬連結:
# 建立硬連結
ln test.txt test_hardlink.txt
這樣就會建立一個 test_hardlink.txt
硬連結檔,指向 test.txt
這個檔案。
建立了硬連結之後,可以查看一下 inode:
# 查看 inode ls -i test.txt test_hardlink.txt
787682 test_hardlink.txt 787682 test.txt
硬連結會跟原來的檔案有相同的 inode。
軟連結(符號連結)則是靠著絕對路徑或相對路徑來指向目標檔案的連結檔,若要使用 ln
指令建立軟連結,可以加上 -s
參數:
# 建立軟連結 ln -s test.txt test_softlink.txt
這樣就會建立一個 test_softlink.txt
軟連結檔,指向 test.txt
這個檔案。
查看一下 inode:
# 查看 inode ls -i test.txt test_softlink.txt
792852 test_softlink.txt 787682 test.txt
軟連結的 inode 就會跟原始的檔案不相同。
在預設的狀況下,如果指定的目標連結檔案已經存在的話,ln
在建立連結檔案時就會出現錯誤:
# 建立軟連結 ln -s test.txt test_softlink.txt
ln: failed to create symbolic link 'test_softlink.txt': 檔案已存在
若要強制覆蓋舊檔,可以加上 -f
參數:
# 強制覆蓋舊檔 ln -f -s test.txt test_softlink.txt
在目標連結檔案已經存在的狀況下,除了強制覆蓋掉之外,也可以使用 -b
參數,自動將舊檔備份起來,再建立新的連結檔:
# 自動備份舊檔 ln -b -s test.txt test_softlink.txt
ln
會將原本的檔案名稱後方加上一個 ~
,作為備份檔的檔名:
ls -lart test_softlink.txt*
lrwxrwxrwx 1 gtwang gtwang 8 9月 20 11:21 test_softlink.txt~ -> test.txt lrwxrwxrwx 1 gtwang gtwang 8 9月 20 11:22 test_softlink.txt -> test.txt
若要更改備份檔名的結尾名稱,可以使用 -S
參數指定新的名稱:
# 指定備份檔結尾名稱 ln -b -S ".backup" -s test.txt test_softlink.txt
這樣 ln
就會使用原本的檔案名稱加上 .backup
作為備份檔案名稱。
在建立連結檔案時,亦可使用相對路徑或是絕對路徑,例如:
# 使用相對路徑 ln -s ../source/test.txt test.txt # 使用絕對路徑 ln -s /home/gtwang/source/test.txt test.txt
由於軟連結是直接靠著路徑來指向目標檔案的,所以對於軟連結來說,使用相對路徑與絕對路徑所建立的連結檔案效果會有不同,在搬移軟連結檔案時,以絕對路徑所建立的連結檔還是會指向相同的位置,而以相對路徑所建立的連結檔,其指向的位置就會跟著連結檔的位置而有變動。
至於硬連結檔是直接使用相同的 inode,所以不管是用相對路徑或絕對路徑,效果都相同。
參考資料:HowtoForge