本篇介紹如何使用 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