优先使用 sha256sum 而非 md5sum 进行安全校验,因 MD5 已可碰撞;两者用法一致,但 sha256sum 生成 64 位哈希,更安全可靠。

别用 md5sum 做安全校验,优先用 sha256sum;两者命令用法一致,但 MD5 已被证实可碰撞,仅适合非敏感场景下的快速比对。
直接计算单个文件的哈希值
终端里敲一行就出结果,不用装包——几乎所有 Linux 发行版都预装了 md5sum 和 sha256sum。
-
md5sum filename.txt输出形如d41d8cd98f00b204e9800998ecf8427e filename.txt,左边是 32 位哈希,右边是路径 -
sha256sum document.pdf输出 64 位哈希,例如a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a0b0 document.pdf - 文件名含空格、中文或特殊字符?必须加引号:
sha256sum "my report v2.tar.gz" - 只要纯哈希值(比如喂给脚本)?用
cut切字段:sha256sum file.bin | cut -d' ' -f1,别用awk '{print $1}'——文件名里有空格会切错
生成和验证校验清单(.sha256 或 .md5 文件)
批量校验多个文件时,得先存一份“指纹清单”,后续用 -c 模式比对。关键不是命令写不写得对,而是三件事对不对齐:路径、换行符、模式。
- 生成清单推荐加
-b(二进制模式):sha256sum -b *.deb > packages.sha256,避免文本模式下换行符归一化干扰 - 校验时必须在和清单中路径一致的位置执行:
sha256sum -c packages.sha256;如果清单里写的是./data/config.json,你就得在data/目录的父目录下运行 - Windows 上编辑过清单?大概率是
\r\n换行符惹的祸,用dos2unix packages.sha256修复后再校验 - 只想看失败项?加
--quiet:sha256sum -c --quiet packages.sha256;想检查清单格式是否合法?加-w警告非法行
为什么 sha256sum -c 报 FAILED 却不是文件问题?
90% 的 “FAILED” 不是哈希算错了,而是环境细节没卡准。最常漏掉的点是权限和路径解析逻辑。
-
file.tar.gz: FAILED→ 先ls -l file.tar.gz看文件是否真存在、大小是否为 0、是否被截断或覆盖 -
file.tar.gz: No such file or directory→ 检查清单里记录的路径(比如downloads/file.tar.gz),再确认当前工作目录是不是downloads/ - 明明文件没动却报错?可能是权限不足:
sha256sum -c遇到Permission denied不提示,只默默返回 FAILED - 手动生成清单?别用
echo拼接,容易混入不可见字符;一律用sha256sum -b命令生成
真正麻烦的不是命令本身,而是校验清单生成时的路径写法、换行符来源、以及执行校验时的当前工作目录——这三者错一个,sha256sum -c 就会静默失败。


















