ln 是 Linux 檔案系統管理的核心指令,用於建立「硬連結」與「符號連結(軟連結)」。兩者機制迥異:硬連結共享 inode,符號連結僅記錄路徑字串。本文透過實驗驗證兩者差異,並說明實務應用場景與陷阱。
ln [選項] 目標檔案 連結名稱
ln [選項] 目標檔案... 目標目錄
| 選項 | 功能 |
|---|---|
-s, --symbolic | 建立符號連結(預設為硬連結) |
-f, --force | 移除既有同名檔案後再建立 |
-i, --interactive | 覆蓋前詢問 |
-n, --no-dereference | 目標為符號連結目錄時,視為一般檔案處理 |
-v, --verbose | 顯示處理過程 |
touch /tmp/source_file
ln -s /tmp/source_file /tmp/symlink
ls -lhi /tmp/source_file /tmp/symlink
輸出:
3441 -rw-r--r-- 1 user user 0 Mar 15 10:00 /tmp/source_file
3647 lrwxrwxrwx 1 user user 17 Mar 15 10:01 /tmp/symlink -> /tmp/source_file
觀察重點:
lrwxrwxrwx,l 表符號連結,權限固定 777(實際存取受限於目標檔案)。/tmp/source_file。echo "link test" > /tmp/source_file
cat /tmp/symlink # 輸出: link test
rm /tmp/symlink
cat /tmp/source_file # 輸出: link test (目標檔案未受影響)
ln -s /tmp/source_file /tmp/symlink
rm /tmp/source_file
cat /tmp/symlink # 錯誤: No such file or directory
ls -l /tmp/symlink # 顯示斷連結 (紅色標示)
# 此時 symlink 成為「懸空連結」
結論: 刪除連結不影響目標;刪除目標導致連結失效(懸空連結)。
touch /tmp/hard_source
ln /tmp/hard_source /tmp/hardlink
ls -lhi /tmp/hard_source /tmp/hardlink
輸出:
4001 -rw-r--r-- 2 user user 0 Mar 15 10:05 /tmp/hard_source
4001 -rw-r--r-- 2 user user 0 Mar 15 10:05 /tmp/hardlink
觀察重點:
-d,極不建議,破壞檔案系統結構)。| 特性 | 硬連結 | 符號連結 |
|---|---|---|
| Inode | 共享 | 獨立 |
| 跨檔案系統 | 不可 | 可 |
| 連結目錄 | 不可 | 可 |
| 目標不存在 | 不可能(建立時必須存在) | 可(懸空連結) |
| 刪除目標檔案 | 資料保留(連結計數-1,歸零才釋放區塊) | 連結失效 |
| 權限顯示 | 同目標 | lrwxrwxrwx |
| 相對/絕對路徑 | 無路徑概念 | 支援相對路徑(建議使用) |
/opt/app/v1.0 # 實際安裝目錄
/opt/app/v1.1
/opt/app/current -> /opt/app/v1.1 # 部署新版後切換連結
# systemd/service 腳本皆指向 /opt/app/current
ln -s /mnt/shared/config /etc/myapp/config
ln -s /data/logs /var/log/myapp
# rsync --link-dest=/backup/yesterday /src /backup/today
# 未變更檔案僅建立硬連結,佔用極小額外空間
ln /important/file /root/protect/file
# 即使原路徑被刪除,/root/protect/file 仍保留資料
ln -s ../config/app.conf /etc/app.conf 遷移目錄樹時不失效。ln -s a b; ln -s b a 導致遞迴存取爆炸。tar 預設解析符號連結(存目標內容),cp -a 保留連結屬性,rsync -l 保留符號連結,-H 保留硬連結結構。find / -type l 找符號連結,find / -links +1 找硬連結檔案。掌握 ln 核心在於理解 Inode 機制:硬連結 = 同一 Inode 多個目錄項;符號連結 = 含路徑字串的特殊檔案。選擇原則:跨檔案系統、連結目錄、需懸空特性 → 符號連結;同檔案系統、追求空間效率、防誤刪 → 硬連結。