了解硬連結

了解硬連結

我在主目錄中建立了一個檔案。

touch demo
echo "This is demo" > demo

現在我在 /tmp 中創建了一個硬鏈接

ln /home/leo/demo demoLink

現在檢查 inode 時使用

ls -ltri demoLink

它顯示與原始檔案相同的索引節點號。我能消化這個。但硬連結的文件類型是常規的!怎麼會是普通文件呢?它與原始文件有什麼不同?我讀取的檔案是匿名資料區塊。那麼這兩個檔案指向相同的資料呢?硬連結和原始檔案的檔案大小是否相同?

答案1

硬連結其實並不是一個「連結」。指向同一檔案 inode 的第一個、第二個、第三個、第 N 個硬連結都彼此相等。 「原始條目」和「硬連結」之間沒有區別。

比方說,如果建立 file1,然後將硬連結 file2 加到相同文件 inode,則沒有方法可以找出給定 inode 的哪個連結是原始的。

IE

cryo@CryoNest:~ $ touch file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file1

cryo@CryoNest:~ $ ln file1 file2

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ rm file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ ln file2 file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

如您所見,所有硬連結的 inode 編號 (9505656) 和儲存在 inode 中的所有屬性都是相同的。包括尺寸、日期、款式等。

注意第3個字段,這是指向inode的連結數。此欄位可用於理解「刪除」檔案(實際上是硬連結的目錄條目之一)但空間使用情況沒有改變時的「神秘」情況:)

如果想要尋找給定文件的所有硬鏈接,“查找”工具有選項“-inum”

cryo@CryoNest:~ $ ln file1 tmp/file3

cryo@CryoNest:~ $ find . -maxdepth 2 -inum 9505656 -ls
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./tmp/file3
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./file1

相關內容