cksum v8.32不识别-a算法选项报错的原因及解决方法
问题原因
coreutils 8.32版本内置的cksum工具没有实现-a/--algorithm参数,多算法选择功能是coreutils 9.0及之后版本才新增的特性。
本地执行cksum --help的输出仅提及支持CRC校验和计算,无任何算法选择相关参数说明,属于典型的文档与本地程序版本不匹配问题:参考的是最新版工具文档,实际运行的是旧版本程序。
部分发行版存在软件包补丁回溯不完整、多版本coreutils共存时PATH优先级指向旧二进制文件的情况,也会触发相同报错。
实现方案
方案1:升级coreutils匹配新版文档功能
将系统coreutils包升级到9.0及以上版本,升级完成后执行cksum --version确认版本号符合要求,且cksum --help输出中存在-a/--algorithm选项说明,即可正常使用参数选择算法。升级后三种校验和的调用命令如下:
- 生成CRC32校验和:
cksum -a crc32 目标文件路径 - 生成SHA1校验和:
cksum -a sha1 目标文件路径 - 生成SHA256校验和:
cksum -a sha256 目标文件路径
方案2:使用系统预装的专用校验工具(兼容性最优)
无需升级任何软件,几乎所有类Unix系统都默认预装了对应算法的独立校验工具,不存在跨版本兼容问题,是批量生成校验和的首选方案:
- 生成CRC32校验和:直接调用旧版
cksum即可,默认输出的第一列就是CRC32校验值,命令为cksum 目标文件路径 - 生成SHA1校验和:调用
sha1sum工具,命令为sha1sum 目标文件路径 - 生成SHA256校验和:调用
sha256sum工具,命令为sha256sum 目标文件路径
如果需要批量遍历目录下所有文件生成三种校验和,可以直接执行如下shell脚本:
#!/bin/bash # 遍历当前目录下所有普通文件生成校验和 for target_file in *; do if [ -f "$target_file" ]; then echo "===== 文件: $target_file =====" echo "CRC32: $(cksum "$target_file" | awk '{print $1}')" echo "SHA1: $(sha1sum "$target_file" | awk '{print $1}')" echo "SHA256: $(sha256sum "$target_file" | awk '{print $1}')" echo "" fi done
内容的提问来源于stack exchange,提问作者Willis Hershey
相关产品推荐
相关产品推荐

