返回首页 两个月精通 Shell 脚本

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

文件校验和匹配

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

这是可以使用 file checksum(文件校验和),取得近似线性的性能。有很多工具可用来计算文件与字符串的校验和,包括 sumcksum,以及 checksum,消息摘要工具 md5md5sum,安全性散列算法工具 shashalsumsha256,以及 sha384

案例:

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

  • md5sum:显示或检查 MD5(128-bit) 校验和,若没有文件选项,或者文件处为”-”,则从标准输入读取。
  • echo -n:不打印换行
  • cutcut 用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。-d 指定域空格和 tab 键不同的域分隔符。-f1 表示第一个域。

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

使用 md5sum 或 shalsum 进行校验

最知名并且使用最广泛的检验和技术是 md5sumshalsum。他们对文件内容使用响应的算法来生成校验结果。

为了计算 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