# `ln` 指令筆記
`ln` 用來建立**連結(link)**,讓不同的檔案路徑可以指向同一份資料。語法:
```bash
ln [選項] 目標檔案 連結名稱
```
## 兩種連結類型
### 1. 硬連結(Hard Link)
```bash
ln 原始檔 連結名
```
- 硬連結是替同一個 **inode**(檔案在磁碟上的實際資料)再建立一個目錄項目(檔名)。
- 兩個檔名的地位完全平等,沒有「誰是原始、誰是連結」的分別。
- 刪除其中一個檔名,資料不會消失,只有當所有指向該 inode 的檔名都被刪除,資料才會真正釋放。
- **限制:**
- 不能跨檔案系統(不同硬碟分割區/掛載點)建立。
- 不能對目錄建立硬連結(避免造成循環)。
### 2. 軟連結 / 符號連結(Symbolic Link, Symlink)
```bash
ln -s 原始檔 連結名
```
- 軟連結是一個**獨立的小檔案**,內容只是「指向目標路徑的文字」,類似捷徑(shortcut)。
- 有明確的方向性:連結檔 → 目標檔。
- 若刪除或搬移原始檔案,軟連結會變成「失效連結」(dangling link),讀取時會出錯。
- 可以跨檔案系統、也可以指向目錄。
- 用 `ls -l` 查看時會顯示 `連結名 -> 目標路徑`。
## 快速比較
| 特性 | 硬連結 | 軟連結 |
|---|---|---|
| 本質 | 同一 inode 的多個檔名 | 指向路徑的獨立小檔 |
| 跨檔案系統 | ❌ 不行 | ✅ 可以 |
| 可連結目錄 | ❌ 不行 | ✅ 可以 |
| 原始檔案被刪除 | 資料仍在(仍有其他檔名指向) | 連結失效 |
| `ls -l` 顯示 | 一般檔案 | 有 `->` 箭頭指向目標 |
## 常用範例
```bash
# 建立硬連結
ln original.txt hardlink.txt
# 建立軟連結
ln -s /path/to/original.txt symlink.txt
# 檢查連結資訊(含 inode 編號、連結數)
ls -li
# 強制覆蓋已存在的連結
ln -sf 新目標 連結名
```
一個記憶方式:**軟連結像 Windows 的捷徑,硬連結像同一份東西貼了兩張標籤。**