直接运行md5sum filename即可获取32位MD5哈希值和文件路径,输出格式为“哈希值 空格 文件名”;文件名含空格需加引号,提取纯哈希值用cut -d' ' -f1,校验时须确保路径一致、换行符为LF且文件可读。

直接运行 md5sum 就能拿到结果,不需要装包、不依赖网络,但输出带文件名、空格敏感、路径写错就报错——不是命令不会用,是细节没对齐。
md5sum 命令怎么用(基础场景)
绝大多数 Linux 发行版默认自带 md5sum,终端里敲完回车就出结果。输出格式固定为「32 位小写十六进制哈希值 + 空格 + 文件路径」:
-
md5sum /tmp/data.bin→ 输出类似d41d8cd98f00b204e9800998ecf8427e /tmp/data.bin - 文件名含空格、中文或括号?必须加引号:
md5sum "my file.tar.gz",否则 shell 会拆成多个参数,报No such file or directory - 想只取哈希值(比如塞进脚本比对)?用
cut切字段:md5sum "config.json" | cut -d' ' -f1 - 别用
awk '{print $1}'提哈希——万一文件名里有空格,awk会按空格切错字段
为什么 md5sum -c 校验总失败
md5sum -c 报 FAILED 几乎从不因为哈希算错了,而是环境没对齐。常见真实原因:
- 校验清单里写的是
./archive.zip,但你在/home/user/下执行命令 → 报No such file or directory - 清单文件是从 Windows 编辑或传过来的,含
\r\n换行符 →md5sum -c静默失败,先跑dos2unix checksums.md5 - 权限不足时不会提示
Permission denied,只显示FAILED;用ls -l确认文件是否可读 - 生成清单时没加
-b(二进制模式),文本模式会归一化换行符,导致校验失准
安全场景下为什么不能只用 md5sum
MD5 已被证实可碰撞,攻击者能构造不同内容却产生相同哈希值的文件。检测是否被篡改,应直接换 sha256sum:
- 命令用法完全一致:
sha256sum document.pdf输出 64 位哈希值 - 生成基线清单建议用
-b:sha256sum -b /etc/passwd > /root/baseline.sha256 - 校验时路径、换行符、权限问题和
md5sum完全一样,只是哈希更强 - 所有空文件的 MD5 都是
d41d8cd98f00b204e9800998ecf8427e,批量中容易误判为“未变”,SHA256 没这个问题
管道中实时计算哈希值(不落地文件)
有些场景根本不想存中间文件,比如验证远程资源或压缩流内容:
- 下载时直接算 SHA256:
curl -s https://example.com/app.bin | sha256sum - 验证 tar 包本身:
cat archive.tar.gz | sha256sum - 验证解压后内容:
gzip -dc archive.tar.gz | sha256sum - ⚠️ 管道方式无法同时保存文件和校验值;如果既要校验又要存文件,得用
tee:例如curl -s https://example.com/app.bin | tee app.bin | sha256sum
真正难的不是命令本身,是校验清单生成时的 -b、路径一致性、换行符处理这三件事——漏一个,-c 就失效。


















