Linux md5sum 使用指南:文件、清单与换行

使用 GNU md5sum 计算文件摘要、核对可信清单,并分清整个文件与逐行文本的差别。

计算实际文件,而不是文件名

路径包含空格时使用引号。双连字符表示命令选项结束,避免以连字符开头的名称被误当成参数。命令读取的是文件字节,不是文件名文字;仅重命名一般不会改变内容摘要。

md5sum -- 'example.zip'

输出通常同时包含摘要与文件名标记。浏览器预期值框只需要其中 32 个十六进制字符。md5sum 清单有专门的格式,不能整行当作单个摘要粘贴,也不要省略开头的零或尾部字符。

使用可信校验清单

先确认清单来源及列出的路径,在与这些相对路径对应的目录执行检查。清单本身能被读取,不代表它来自真正的发布者;文件与参考值的可信来源仍需另外核查。

md5sum --check checksums.md5

阅读全部诊断信息和退出状态。找不到文件、没有读取权限,与已经读完但摘要不同,是不同问题。成功检查只表示计算结果与清单一致,不表示扫描过病毒,也不验证清单发布者身份。

重现不含结尾换行的 abc

printf 可以明确输出所需字节,不附加 echo 常见的结尾换行。不同 shell 的 echo 选项和转义行为可能不同,因此用 printf 做可控样本更清楚。

printf '%s' 'abc' | md5sum

预期 MD5 为 900150983cd24fb0d6963f7d28e17f72。若 abc 后面还有一个换行,得到不同值是正常的。本工具文本模式保留输入;验证磁盘上的实际文件时,应使用文件模式,避免编辑器或复制过程改变字节。

逐行批量不是文件清单校验

给整个文本文件计算一次摘要,与每行分别计算并不相同。浏览器逐行模式将换行用作记录分隔,保留原始行号,并允许明确包含空行。清单则是把已经生成的摘要关联到路径。下载的 CSV 有 CSV 引号规则,不能直接当成 md5sum 清单。

遇到特殊文件名,应保留工具生成的清单格式,不要凭肉眼重新拼接。发布者提供 SHA-256 时,使用 sha256sum 和对应参考值;算法变化不是简单的显示长度变化。

留下可复核记录

记录完整摘要、算法、文件版本和参考来源。MD5 可以用于旧系统兼容性检查及意外变更排查,但不适用于要求抗碰撞的安全设计。计算准确和来源可信,是必须分开判断的两件事。

相关工具与指南

GNU Coreutils md5sum

常见问题

为什么 echo 计算 abc 时可能得到不同 MD5?

echo 通常会附加结尾换行。示例使用 printf 只输出 abc 三个字节;换行或字节顺序标记都是额外输入,会改变摘要。

下载的 CSV 能直接用于 md5sum --check 吗?

不能直接使用。CSV 是标识、算法和结果组成的表格,md5sum 需要自己的清单格式。请保留发布者提供的可信清单,不要把 CSV 当成同一种文件。

其他哈希与校验工具