文件校验和匹配
要是你怀疑可能有非常多文件具有同样的内文,而是用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表示第一个域.
校验程序用来从文件里生成校验密钥,然后利用这个校验password核实文件的完整性.一般文件能够通过网络分发带不同的地点.出于多种原因,数据有可能在传输过程中丢失若干位,从而导致文件的破坏.
因此我么须要採用一些測试方法去确定接收到的文件是否存在错误.我们能够对原始文件和接收到的文件进行校验.
通过对照两者的校验结果,就行核实接收到的文件是否正确.校验对于编写备份脚本或系统维护脚本来说非常重要.
使用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