Linux ln 建立連結檔 (Hard/Symbolic Link)

在 Windows 中我們習慣建立「捷徑」,在 Linux 中也有類似的概念,稱為 連結 (Link)。 Link 分為兩種:Symbolic Link (軟連結)Hard Link (硬連結)

ln 指令語法

ln [參數] [來源檔案] [連結名稱]

這就是 Linux 世界的「捷徑」。它只是一個指向原始檔案路徑的一種特殊檔案。 如果原始檔案被刪除或移動,這個連結就會失效 (Broken Link)。

建立方式:加上 -s 參數

這是最常用的方式! 99% 的情況你都是要用這個。

# 建立一個指向 /var/www/html/index.html 的捷徑,放在家目錄
ln -s /var/www/html/index.html ~/my_web_page

建立後,你可以像操作一般檔案一樣操作連結檔,實際上都是在操作原始檔案。

軟連結的特性

  • 可以對「目錄」建立連結。
  • 可以跨不同的檔案系統 (Partition)。
  • 源檔案刪除,連結失效。

Hard Link 比較抽象。它不是捷徑,而是「分身」。 在 Linux 檔案系統中,檔案內容與檔名是分開儲存的。Hard Link 就是指「兩個不同的檔名,指向硬碟上的同一個資料區塊 (Inode)」。

建立方式:不加參數

ln source.txt hardlink.txt

硬連結的特性

  • 兩個檔案地位平等。刪除 source.txt,hardlink.txt 的內容依然存在(因為資料還在)。
  • 修改其中一個,另一個也會跟著變(因為根本是同一份資料)。
  • 不能 對目錄建立 Hard Link。
  • 不能 跨檔案系統。

什麼時候該用哪種?

特性Symbolic Link (軟連結)Hard Link (硬連結)
參數ln -sln
類似概念Windows 捷徑檔案分身
跨檔案系統✅ 可以❌ 不行
連結目錄✅ 可以❌ 不行
原始檔刪除❌ 連結失效✅ 資料還在
常用程度⭐⭐⭐⭐⭐ (極高)⭐ (極低)
除非你有非常特殊的備份需求,否則請一律使用 ln -s 建立 Symbolick Link 即可。這也是最符合直覺的用法。

實戰範例:Nginx/Apache 設定

Linux 網頁伺服器常利用 Soft Link 來管理網站啟用狀態。 例如 /etc/nginx/sites-enabled/ 裡的檔案,通常都是指向 /etc/nginx/sites-available/ 的軟連結。

# 啟用 default 網站設定
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/