介紹如何在 Linux 系統中使用 ln
指令建立各種連結檔案。
ln
指令預設會建立硬連結(hard link):
# 建立 file.txt 的硬連結(hard link)
ln file.txt hard_link.txt
執行這行指令之後,會建立一個新的 hard_link.txt
硬連結檔案,此檔案與原始檔案 file.txt
具有相同的 inode:
# 列出檔案的 inode 資訊 ls -li
total 8 774210 -rw-rw-r-- 2 ubuntu ubuntu 1097 6月 1 14:09 file.txt 774210 -rw-rw-r-- 2 ubuntu ubuntu 1097 6月 1 14:09 hard_link.txt
在這個 ls
的輸出中,第三欄的 2
是檔案的連結數量(link count),當新的硬連結建立之後,此數值就會增加。
ln
指令加上 -s
參數可以用來建立檔案的軟連結(soft link):
# 建立 file.txt 的軟連結(soft link) ln -s file.txt soft_link.txt
軟連結實際上是另外一個獨立的檔案,指向其所連結的目標檔案,所以它的 inode 跟原本的檔案是不同的:
# 列出檔案的 inode 資訊 ls -li
total 8 774210 -rw-rw-r-- 2 ubuntu ubuntu 1097 6月 1 14:09 file.txt 774210 -rw-rw-r-- 2 ubuntu ubuntu 1097 6月 1 14:09 hard_link.txt 776759 lrwxrwxrwx 1 ubuntu ubuntu 8 6月 1 14:52 soft_link.txt -> file.txt
下圖是軟連結與硬連結的差異。
軟連結也可以用於目錄,建立一個連結至目錄的軟連結:
# 建立 myfolder 目錄的軟連結 ln -s myfolder folder_link
查看新建立的目錄軟連結:
# 列出檔案的 inode 資訊 ls -li
total 4 776760 lrwxrwxrwx 1 ubuntu ubuntu 8 6月 1 15:37 folder_link -> myfolder 790308 drwxrwxr-x 2 ubuntu ubuntu 4096 6月 1 15:30 myfolder
如果要建立的軟連結檔案已經存在時,就會出現這樣的錯誤訊息:
ln: failed to create symbolic link 'soft_link.txt': File exists
這時候可以加上 -i
參數,以互動式確認的方式覆蓋檔案:
# 以互動式方式確認覆蓋檔案 ln -si file.txt soft_link.txt
或是加上 -f
參數,強制覆蓋檔案:
# 強制覆蓋檔案 ln -sf file.txt soft_link.txt
在 Linux 系統上時常會遇到串連的軟連結,也就是一個軟連結又連到另外一個軟連結。例如 /etc/vtrgb
連到 /etc/alternatives/vtrgb
:
# 串連的軟連結 ls -l /etc/vtrgb
lrwxrwxrwx 1 root root 23 6月 26 2019 /etc/vtrgb -> /etc/alternatives/vtrgb
而 /etc/alternatives/vtrgb
又連到 /etc/console-setup/vtrgb
:
# 串連的軟連結 ls -l /etc/alternatives/vtrgb
lrwxrwxrwx 1 root root 24 6月 26 2019 /etc/alternatives/vtrgb -> /etc/console-setup/vtrgb
如果需要顯示串連的軟連結最後所連結到的檔案,可以使用 readlink
指令:
# 顯示串連軟連結最後的原始檔案 readlink -f /etc/vtrgb
/etc/console-setup/vtrgb