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

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

文件校驗和匹配

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

這是可以使用 file checksum(文件校驗和),取得近似線性的性能。有很多工具可用來計算文件與字符串的校驗和,包括 sum,cksum,以及 checksum,消息摘要工具 md5md5sum,安全性散列算法工具 shashalsum,sha256,以及 sha384。

案例:

$echo -n "hello" | md5sum | cut -d ' ' -f1 5d41402abc4b2a76b9719d911017c592 分析:獲取字符串 hell 的 MD5。

  • md5sum:顯示或檢查 MD5(128-bit) 校驗和,若沒有文件選項,或者文件處為”-”,則從標(biāo)準(zhǔn)輸入讀取。
  • echo -n:不打印換行
  • cutcut 用來從標(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ù)是 md5sumshalsum。他們對文件內(nèi)容使用響應(yīng)的算法來生成校驗結(jié)果。

為了計算 md5sum,使用下列命令: $md5sum f1 42a6ab275d6ae3a62ab448fb44dffb8a f1

分析:
得到的結(jié)果是一個 32 個字符的十六進(jìn)制字符串后面跟文件名。

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

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