iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
Security

從0基礎開始起飛,一起一步步踏入資安系列 第 21

[ Day 21 ] 硬連結? inode? ( Linux )

  • 分享至 

  • xImage
  •  

在 Linux/Unix 系統中,硬連結( Hard Link ) 是一種給檔案取「別名」的方法。它讓多個檔名指向同一個檔案的資料( inode ),就算原本的檔名被刪除了,其他硬連結依然可以存取檔案內容。

什麼是 inode?

在 Linux/Unix 系統中,檔案並不是直接由檔名指向內容。
事實上,檔名只是「標籤」,真正存放檔案資訊的地方叫做 inode( index node,索引節點)。
每個檔案在檔案系統中都會有一個 唯一的 inode 編號,它負責存放檔案的「中繼資料( metadata )」,也就是除了檔名以外的所有資訊。

硬連結就是讓不同的檔名,指向同一個 inode。

inode 裡面包含哪些資訊?

  • 檔案類型(一般檔案、資料夾、符號連結...)
  • 檔案大小
  • 檔案的權限與擁有者( rwx、UID、GID )
  • 檔案的時間戳記(建立時間、修改時間、存取時間)
  • 硬連結數量
  • 資料區塊的位置(檔案內容實際存放在哪些磁碟區塊)

inode 不包含檔名

檔名是存在目錄( directory )裡,目錄會建立一個檔名 → inode 編號的對應表。

也就是說:

  • 「目錄」負責存檔名
  • 「inode」負責存檔案內容的真實資訊

inode 的運作方式

在 Linux 終端機輸入:

ls -li

輸出範例:

123456 -rw-r--r-- 2 user user  12 Sep 17 23:10 file1.txt
123456 -rw-r--r-- 2 user user  12 Sep 17 23:10 file2.txt
  • 123456 → 這就是 inode 編號
  • 2 → 硬連結數量(有兩個檔名指向這個 inode)
  • file1.txtfile2.txt 雖然有不同的名字,但它們的 inode 編號一樣,所以它們其實是同一個檔案。

inode 的限制

每個檔案系統(filesystem)在建立時就會分配固定數量的 inode。
即使磁碟還有空間,如果 inode 用完了,也無法再建立新檔案。

可以用以下指令查看 inode 使用情況:

df -i

輸出範例:

Filesystem     Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1    6553600 1200000 5353600   18% /

硬連結

建立硬連結

使用 ln 指令來建立硬連結

ln [原始檔案名稱] [新檔案名稱]

範例 :

echo "Hello World" > file1.txt
ln file1.txt file2.txt
  • 現在 file1.txtfile2.txt 都指向同一個 inode。
  • cat file1.txtfile2.txt 都會輸出 Hello World ,不過兩者是獨立的檔案。

硬連結的特性

  1. 同一個 inode:硬連結與原始檔案共享同一份資料。
  2. 刪除安全性:刪掉 file1.txtfile2.txt 仍然能使用。
  3. 相同權限與大小:因為都是同一個檔案。
  4. 不能跨檔案系統:硬連結無法建立在不同磁碟分割(不同 filesystem)之間。
  5. 不能對資料夾建立(除非使用特殊選項,且可能導致循環問題,一般使用者不建議)。

軟硬連結差異

特性 軟連結 (symlink) 硬連結 (hard link)
指向 檔案路徑 檔案內容 (inode)
類似 Windows 捷徑 同一份檔案的另一個檔名
是否可跨檔案系統 可以 不行
原始檔刪除後 連結失效 另一個仍可用
建立在目錄上 可以 不行
使用場景 建立捷徑、快速存取 檔案多個名稱、確保資料一致性

軟連結

ls -l
-rw-r--r--  1 user user   12 Sep 17 file.txt
lrwxrwxrwx  1 user user    8 Sep 17 softlink.txt -> file.txt
  • l 開頭代表這是連結檔
  • softlink.txt 指向 file.txt

硬連結

ls -l
-rw-r--r--  2 user user   12 Sep 17 file.txt
-rw-r--r--  2 user user   12 Sep 17 hardlink.txt
  • rw-r--r-- → 檔案的權限
  • 2硬連結數(這個檔案有多少個檔名指向同一個 inode)

ls -l 內容說明補充

-rw-r--r--  2 user user  4096 Sep 17 22:30 hello.txt
  • user → 檔案的擁有者(owner)
  • user → 檔案的群組(group)
  • 4096 → 檔案大小(bytes)
  • Sep 17 22:30 → 修改時間
  • hello.txt → 檔案名稱

小結

  • 軟連結:指向檔案的路徑(像捷徑)。
  • 硬連結:指向檔案的內容(多個檔名共享同一份資料)。
  • 查詢連結用:ls -l
  • 建立連結用:ln(硬連結)、ln -s(軟連結)

上一篇
[ Day 20 ] 軟連結? symlink? ( Linux)
下一篇
[ Day 22 ] 古典密碼學 - 凱薩密碼、維吉尼亞、仿射密碼...
系列文
從0基礎開始起飛,一起一步步踏入資安23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言