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