要是你懷疑可能有很多文件具有相同的內(nèi)文,而是用 cmp
或 diff
進(jìn)行比較所有橫隊的比較,導(dǎo)致所花費(fèi)的時間會隨著文件數(shù)目增長成次方的增長。
這是可以使用 file checksum
(文件校驗和),取得近似線性的性能。有很多工具可用來計算文件與字符串的校驗和,包括 sum
,cksum
,以及 checksum
,消息摘要工具 md5
與 md5sum
,安全性散列算法工具 sha
,shalsum
,sha256
,以及 sha384
。
案例:
$echo -n "hello" | md5sum | cut -d ' ' -f1 5d41402abc4b2a76b9719d911017c592 分析:獲取字符串 hell 的 MD5。
md5sum
:顯示或檢查 MD5(128-bit) 校驗和,若沒有文件選項,或者文件處為”-”,則從標(biāo)準(zhǔn)輸入讀取。echo -n
:不打印換行cut
:cut
用來從標(biāo)準(zhǔn)輸入或文本文件中剪切列或域。剪切文本可以將之粘貼到一個文本文件。-d
指定域空格和 tab 鍵不同的域分隔符。-f1
表示第一個域。校驗程序用來從文件中生成校驗密鑰,然后利用這個校驗密碼核實文件的完整性。一般文件可以通過網(wǎng)絡(luò)分發(fā)帶不同的地點(diǎn)。出于多種原因,數(shù)據(jù)有可能在傳輸過程中丟失若干位,從而導(dǎo)致文件的破壞。因此我么需要采用一些測試方法去確定接收到的文件是否存在錯誤。我們可以對原始文件和接收到的文件進(jìn)行校驗。通過對比兩者的校驗結(jié)果,就能夠核實接收到的文件是否正確。校驗對于編寫備份腳本或系統(tǒng)維護(hù)腳本來說很重要。
使用 md5sum 或 shalsum 進(jìn)行校驗
最知名并且使用最廣泛的檢驗和技術(shù)是 md5sum
和 shalsum
。他們對文件內(nèi)容使用響應(yīng)的算法來生成校驗結(jié)果。
為了計算 md5sum
,使用下列命令:
$md5sum f1 42a6ab275d6ae3a62ab448fb44dffb8a f1
分析:
得到的結(jié)果是一個 32 個字符的十六進(jìn)制字符串后面跟文件名。
md5sum f1>f1.MD5
$md5sum -c f1.md5
shalsum
是另一個常用的檢驗算法。他從給定的輸入文件中生成一個長度為 40 個字符的十六進(jìn)制的字符串。其用法和 md5sum
非常相似??梢詫Χ鄠€文件進(jìn)行校驗
&md5sum f1 f2 > file.md5 $cat file.md5 42a6ab275d6ae3a62ab448fb44dffb8a f1 42a6ab275d6ae3a62ab448fb44dffb8a f2
分析:輸出中會在每行中包含單個文件的檢驗結(jié)果字符串。
可以按照下面的方法用生成的文件核實數(shù)據(jù)完整性:
$md5sum -c file.md5
f1:確定
f2:確定
分析:這個命令會輸出校驗結(jié)果是否匹配的消息
對目錄進(jìn)行校驗
對于目錄進(jìn)行校驗意味著我們需要對目錄中的所有文件以遞歸的方式進(jìn)行計算。他可以使用命令 md5deep
或者 shaldeep
來實現(xiàn)。首先,需要安裝 md5deep
軟件包可以確保能找到這些命令。用法如下: $md5deep -rl directory_path>directory.md5
分析:-r
選項代表使用遞歸的方式,-l
(小寫字母 L) 使用相對路徑。默認(rèn)情況下回話輸出絕對路徑。
使用下面的命令進(jìn)行核實:
$md5sum -c dircetory.md5