日常使用过程中,对于文件的完整性的校验比较重要,最简单常见的方式是哈希值计算。主要使用场景:
- 为传给他人文件生成哈希值,便于对方校验;
- 对下载得到的文件校验哈希值。
macOS 和 Linux 都自带了相应工具,Windows 可以通过三方工具实现。
本文以 SHA256 进行演示。
一、批量生成
macOS
# 生成哈希值
$ find . -maxdepth 目录深度 -type f -exec shasum -a 256 {} \; > sha256.sum
# 校验哈希值
$ shasum -c sha256.sum
Linux
# 生成哈希值
$ find . -maxdepth 目录深度 -type f -exec sha256sum {} \; > sha256.sum
# 校验哈希值
$ sha256sum -c sha256.sum
原理及注意事项
对于上面在 macOS 和 Linux 中使用 find 命令的例子,原理是将 -exec
参数后面的内容作为一个命令行来执行,并使用找到结果的每一项内容替换 {}
,这会导致两个问题:
1、可能会导致构建的命令行过长,系统报错
2、为每个找到的结果都执行一次命令,可能会导致运行的进程过多
解决方法:使用 -print
参数结合 xargs
命令使用,如:
# 在 macOS 测试通过
$ find . -maxdepth 目录深度 -type f -print | xargs -I{} shasum -a 256 "{}"
这里 xargs
命令使用 -I
参数,是因为直接执行的话,当文件名中有空格的时候,会被解释为两个参数。使用 -I 参数则可以进行替换处理,这样可以实现格式化字符串的效果。
更多详情参见《Linux命令学习之文件查找命令——find》
Windows
二、单个操作
SHA256:
# 文件
$ openssl sha256 文件名
# 标准输入
$ echo -n abcde | openssl sha256
MD5:
# 文件(-q 参数不显示相关提示信息)
$ md5 -q 文件名
# 标准输入(-s 参数表示计算字符串,-q 参数不显示相关提示信息)
$ md5 -q -s abcde
三、参考资料
- How to verify checksum on a Mac - MD5, SHA1, SHA256, etc
- Create checksum sha256 of all files and directories?
- SHA256 Checksum Utilities
- Linux命令学习之文件查找命令——find
- find 命令
- xargs 命令
(完)