离线下载
PDF版 ePub版

见证大牛成长之路 · 更新于 2018-11-28 11:00:43

shell 学习四十八天---文件校验和匹配

要是你怀疑可能有很多文件具有相同的内文,而是用 cmp 或 diff 进行比较所有横队的比较,导致所花费的时间会随着文件数目增长成次方的增长.

这是可以使用 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)校验和,若没有文件选项,或者文件处为”-”,则从标准输入读取.
echo -n : 不打印换行
cut : cut 用来从标准输入或文本文件中剪切列或域.剪切文本可以将之粘贴到一个文本文件.-d 指定域空格和 tab 键不同的域分隔符.-f1 表示第一个域.

校验程序用来从文件中生成校验密钥,然后利用这个校验密码核实文件的完整性.一般文件可以通过网络分发带不同的地点.出于多种原因,数据有可能在传输过程中丢失若干位,从而导致文件的破坏.
因此我么需要采用一些测试方法去确定接收到的文件是否存在错误.我们可以对原始文件和接收到的文件进行校验.
通过对比两者的校验结果,就能够核实接收到的文件是否正确.校验对于编写备份脚本或系统维护脚本来说很重要.

使用 md5sum 或 shalsum 进行校验
最知名并且使用最广泛的检验和技术是 md5sum 和 shalsum.他们对文件内容使用响应的算法来生成校验结果.
为了计算 md5sum,使用下列命令:
$md5sum f1
42a6ab275d6ae3a62ab448fb44dffb8a f1
分析:得到的结果是一个 32 个字符的十六进制字符串后面跟文件名.

将输出的校验结果重定向到一个文件,然后用这个 md5 文件核实数据的完整性:
md5sum f1>f1.MD5
可以按照下面的方法永盛成的文件何时数据完整性:
$md5sum -c f1.md5
f1: 确定
分析:如果出现确定,则证明文件无损.

shalsum 是另一个常用的检验算法.他从给定的输入文件中生成一个长度为 40 个字符的十六进制的字符串.其用法和 md5sum 非常相似.

可以对多个文件进行校验

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

分析:输出中会在每行中包含单个文件的检验结果字符串.

可以按照下面的方法用生成的文件核实数据完整性:

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

分析:这个命令会输出校验结果是否匹配的消息

对目录进行校验

对于目录进行校验意味着我们需要对目录中的所有文件以递归的方式进行计算.
他可以使用命令 md5deep 或者 shaldeep 来实现.首先,需要安装 md5deep 软件包可以确保能找到这些命令.用法如下:
$md5deep -rl directory_path>directory.md5
分析:-r 选项代表使用递归的方式,-l(小写字母 L)使用相对路径.默认情况下回话输出绝对路径.

使用下面的命令进行核实:
$md5sum -c dircetory.md5

上一篇: 文件比较 cmp,di... 下一篇: 学习小结