2017-05-24 212 views
-1

我一直在尋找一段時間,我無法理解爲什麼符號鏈接的md5校驗和等於它指向的文件。在我的理解a symbolic link is still a file。鑑於它是空的,我期望一個符號鏈接有一個md5的d41d8cd98f00b204e9800998ecf8427e。 (見here爲什麼符號鏈接的md5校驗和等於原始文件

然而在實踐中檢驗:

echo Hello World > test 
ln -s test test_symlink 

然後運行:

md5deep test test_symlink 

產量:

e59ff97941044f85df5297e1c302d260 /tmp/test 
e59ff97941044f85df5297e1c302d260 /tmp/test_symlink 

有誰知道我在這裏失蹤?

+0

符號鏈接的全部*點*可用作目標的透明*指針*,即您可以對其進行操作,就像操作目標一樣(打開和讀取數據,檢查元數據等)。有些調用可以識別象'ls'這樣的符號鏈接和工具。 'md5deep'工具顯然沒有被打擾,可能是因爲沒有人對此感興趣。 –

+0

與'cat test'和'cat test_symlink'打印相同的輸出的原因相同。 – Barmar

回答

1

符號鏈接對於幾乎都是透明的文件系統操作;這就是它的重點。當你使用符號鏈接open時,它實際上會打開目標文件,並且它是獲取MD5'd的目標文件的內容。只有readlinklstat(以及更常用的lchown,lutimesopen(..., O_PATH|O_NOFOLLOW))能夠「看到」符號鏈接而不是其後面的文件。

+0

我看到md5s確實是平等的。實際上,我應該意識到這個工具並沒有將symlink的性質考慮爲刪除目標文件,並試圖在斷開的鏈接上計算md5會產生'md5sum:test_symlink:沒有這樣的文件或目錄。感謝您的解釋。 – Adonis