鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)四十八天---文件校驗(yàn)和匹配
shell 學(xué)習(xí)四十五天---xargs
shell學(xué)習(xí)第三天
shell 學(xué)習(xí)十五天---join 連接字段
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)四十三天---臨時(shí)性文件的建立與使用
shell 學(xué)習(xí)第六天---小結(jié)
shell 學(xué)習(xí)三十三天---關(guān)于重定向
shell 學(xué)習(xí)二十九天---循環(huán)
shell 學(xué)習(xí)二十四天---提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第十天---sed 查找與替換
shell 學(xué)習(xí)第十一天---sed 正則的精確控制
shell 學(xué)習(xí)三十天---break,continue,shift,getopts
shell 學(xué)習(xí)---小結(jié)
shell 學(xué)習(xí)三十一天---函數(shù)問題
shell 學(xué)習(xí)第四天---華麗的 printf 輸出
shell 學(xué)習(xí)三十五天---波浪號(hào)展開與通配符
shell 學(xué)習(xí)十九天---文本塊排序
shell 學(xué)習(xí)十二天---行與字符串
shell 學(xué)習(xí)二十一天---重新格式化段落
shell 學(xué)習(xí)十八天---文本排序
shell 學(xué)習(xí)十三天---sed 案例分析
shell 學(xué)習(xí)四十一天---列出文件 ls 和 od 命令
shell 學(xué)習(xí)十七天---awk 命令
shell 學(xué)習(xí)三十六天---命令替換
shell 學(xué)習(xí)十六天---join 練習(xí)
shell 學(xué)習(xí)三十二天---read 讀取一行
shell 學(xué)習(xí)二十二天---計(jì)算行數(shù),字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)小總結(jié)---本章小結(jié)
shell 學(xué)習(xí)第八天---擴(kuò)展正則表達(dá)式(ERE)
shell 學(xué)習(xí)四十二天---使用 touch 更新文件時(shí)間
shell 學(xué)習(xí)二十八天---case 語句
shell 學(xué)習(xí)三十九天---內(nèi)建命令
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)三十四天---printf 詳解
shell 學(xué)習(xí)二十六天---變量與算數(shù)
shell 學(xué)習(xí)三十八天---執(zhí)行順序和 eval
shell 學(xué)習(xí)四十四天---尋找文件
shell 學(xué)習(xí)二十五天---神器的管道符
shell 學(xué)習(xí)十四天---使用 cut 選定字段
shell 學(xué)習(xí)第五天---基本的I/O重定向
shell 學(xué)習(xí)四十天---awk 的驚人表現(xiàn)
shell 學(xué)習(xí)二十天---sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)二十三天---打印
shell 學(xué)習(xí)第九天---分組
shell 學(xué)習(xí)四十八天---文件校驗(yàn)和匹配
shell 學(xué)習(xí)二十七天---退出狀態(tài)和 if 語句
shell 學(xué)習(xí)四十七天---文件比較 cmp,diff,patch
shell 學(xué)習(xí)第七天---基礎(chǔ)正則表達(dá)式(BRE)
shell 學(xué)習(xí)四十六天---文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)三十七天---引用
shell 學(xué)習(xí)小結(jié)

shell 學(xué)習(xí)四十八天---文件校驗(yàn)和匹配

要是你懷疑可能有很多文件具有相同的內(nèi)文,而是用 cmp 或 diff 進(jìn)行比較所有橫隊(duì)的比較,導(dǎo)致所花費(fèi)的時(shí)間會(huì)隨著文件數(shù)目增長成次方的增長.

這是可以使用 file checksum(文件校驗(yàn)和),取得近似線性的性能.有很多工具可用來計(jì)算文件與字符串的校驗(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)和,若沒有文件選項(xiàng),或者文件處為”-”,則從標(biāo)準(zhǔn)輸入讀取.
echo -n : 不打印換行
cut : cut 用來從標(biāo)準(zhǔn)輸入或文本文件中剪切列或域.剪切文本可以將之粘貼到一個(gè)文本文件.-d 指定域空格和 tab 鍵不同的域分隔符.-f1 表示第一個(gè)域.

校驗(yàn)程序用來從文件中生成校驗(yàn)密鑰,然后利用這個(gè)校驗(yàn)密碼核實(shí)文件的完整性.一般文件可以通過網(wǎng)絡(luò)分發(fā)帶不同的地點(diǎn).出于多種原因,數(shù)據(jù)有可能在傳輸過程中丟失若干位,從而導(dǎo)致文件的破壞.
因此我么需要采用一些測試方法去確定接收到的文件是否存在錯(cuò)誤.我們可以對(duì)原始文件和接收到的文件進(jìn)行校驗(yàn).
通過對(duì)比兩者的校驗(yàn)結(jié)果,就能夠核實(shí)接收到的文件是否正確.校驗(yàn)對(duì)于編寫備份腳本或系統(tǒng)維護(hù)腳本來說很重要.

使用 md5sum 或 shalsum 進(jìn)行校驗(yàn)
最知名并且使用最廣泛的檢驗(yàn)和技術(shù)是 md5sum 和 shalsum.他們對(duì)文件內(nèi)容使用響應(yīng)的算法來生成校驗(yàn)結(jié)果.
為了計(jì)算 md5sum,使用下列命令:
$md5sum f1
42a6ab275d6ae3a62ab448fb44dffb8a f1
分析:得到的結(jié)果是一個(gè) 32 個(gè)字符的十六進(jìn)制字符串后面跟文件名.

將輸出的校驗(yàn)結(jié)果重定向到一個(gè)文件,然后用這個(gè) md5 文件核實(shí)數(shù)據(jù)的完整性:
md5sum f1>f1.MD5
可以按照下面的方法永盛成的文件何時(shí)數(shù)據(jù)完整性:
$md5sum -c f1.md5
f1: 確定
分析:如果出現(xiàn)確定,則證明文件無損.

shalsum 是另一個(gè)常用的檢驗(yàn)算法.他從給定的輸入文件中生成一個(gè)長度為 40 個(gè)字符的十六進(jìn)制的字符串.其用法和 md5sum 非常相似.

可以對(duì)多個(gè)文件進(jìn)行校驗(yàn)

&md5sum f1 f2 > file.md5  
$cat file.md5  
42a6ab275d6ae3a62ab448fb44dffb8a  f1  
42a6ab275d6ae3a62ab448fb44dffb8a  f2  

分析:輸出中會(huì)在每行中包含單個(gè)文件的檢驗(yàn)結(jié)果字符串.

可以按照下面的方法用生成的文件核實(shí)數(shù)據(jù)完整性:

$md5sum -c file.md5  
f1: 確定  
f2: 確定  

分析:這個(gè)命令會(huì)輸出校驗(yàn)結(jié)果是否匹配的消息

對(duì)目錄進(jìn)行校驗(yàn)

對(duì)于目錄進(jìn)行校驗(yàn)意味著我們需要對(duì)目錄中的所有文件以遞歸的方式進(jìn)行計(jì)算.
他可以使用命令 md5deep 或者 shaldeep 來實(shí)現(xiàn).首先,需要安裝 md5deep 軟件包可以確保能找到這些命令.用法如下:
$md5deep -rl directory_path>directory.md5
分析:-r 選項(xiàng)代表使用遞歸的方式,-l(小寫字母 L)使用相對(duì)路徑.默認(rèn)情況下回話輸出絕對(duì)路徑.

使用下面的命令進(jìn)行核實(shí):
$md5sum -c dircetory.md5