校验和(checksum)程序用来从文件中生成相对较小的唯一密钥。我们可以重新计算该密钥,用以检查文件是否发生改变。修改文件可能是有意为之(添加新用户会改变密码文件),也可能是无意而为(从CD-ROM中读取到了错误数据),还可能是恶意行为(插入病毒)。校验和能够让我们核实文件中所包含的数据是否和预期的一样。
通过比对下载文件和原始文件的校验和,就能够核实接收到的文件是否正确。如果源位置上的原始文件的校验和与目的地上接收文件的校验和相等,就意味着我们接收到的文件没有问题。
有些系统维护了重要文件的校验和。如果恶意软件修改了其中的某些文件,我们就可以通过
发生变化的校验和发现这一情况。
本文描述在Linux系统下,如何计算校验和来验证数据完整性。
Unix和Linux支持多种校验和程序,但强健性最好且使用最为广泛的校验和算法是MD5和
SHA-1。md5sum和sha1sum程序可以对数据应用对应的算法来生成校验和。
md5sum:
$ md5sum filename
68b329da9893e34099c7d8ad5cb9c940 filename
$ md5sum -c file_sum.md5
如上所示, md5sum 是一个长度为32个字符的十六进制串。 把输入的内容重定向存储为file_sum.md5,然后就可以用它校验原文件的完整性了。
SHA-1
SAH-1是另一种常用的校验和算法。它从给定的输入中生成一个长度为40个字符的十六进制
串。用来计算SAH-1校验和的命令是 sha1sum ,其用法和 md5sum 的类似。只需要把前面的
命令中的 md5sum 改成 sha1sum 就行了,记住将输出文件名从file_sum.md5改为file_sum.sha1。
md5deep
md5deep 或 sha1deep 命令可以遍历目录树,计算其中所有文件的校验和。一般系统缺省不会安装。如果需要,可以自己安装。常用参数:
# -r使用递归遍历
# -l使用相对路径。默认情况下,md5deep会输出文件的绝对路径
或者也可以结合 find 来递归计算校验和:
$ find directory_path -type f –print0 | xargs -0 md5sum >> directory.md5