鏈接是 Linux 文件系統共享數據的核心機制。本文從 inode 概念出發,深度對比硬鏈接與符號鏈接(軟鏈接)的本質差異、創建命令、屬性表現及適用場景,助你精準選型。
為同一 inode 增加一個目錄項(新文件名)。同一 inode,鏈接計數 +1。
ln 目標文件 鏈接名 ln 目標文件列表 目標目錄
| 屬性 | 表現 |
|---|---|
| inode 號 | 與源文件完全相同 |
| 文件大小 | 與源文件完全相同 |
| 鏈接計數 | 源文件與硬鏈接共享,均顯示計數值 |
| 權限/時間戳 | 完全同步(因為是同一 inode) |
| 刪除行為 | 刪除任一目錄項僅計數 -1;計數歸 0 時數據塊才真正釋放 |
創建一個新文件,其數據塊存儲目標文件的路徑字符串。獨立 inode,獨立數據塊。
ln -s 目標文件 鏈接名
| 屬性 | 表現 |
|---|---|
| 文件類型 | l(ls -l 首字符),權限 lrwxrwxrwx |
| inode 號 | 與源文件不同 |
| 文件大小 | 路徑字符串長度(如 "file1" → 5 bytes) |
| 鏈接計數 | 不增加源文件計數 |
| 目標移動/刪除 | 鏈接失效(斷鏈),訪問報 No such file |
| 維度 | 硬鏈接 | 符號鏈接 |
|---|---|---|
| 跨文件系統 | ❌ | ✅ |
| 鏈接目錄 | ❌ | ✅ |
| 目標移動後有效性 | ✅ | ❌ |
| 佔用額外 inode/塊 | ❌ | ✅ |
| 刪除源文件後數據是否保留 | ✅(計數>0) | ❌(斷鏈) |
| 典型場景 | 同分區備份、節省空間、原子替換 | 跨分區/網絡引用、目錄鏈接、版本切換 |
ls -l(首字符 l 為符號鏈接);stat 顯示 inode 與鏈接計數。理解 inode 與目錄項的關系,是掌握 Linux 文件系統的鑰匙。