md5sum校验失败时需看完整三行输出:第一行ok/failed、第二行warning、第三行真实原因;生成校验清单必须用-b参数,脚本验证应依赖退出码而非输出文本,提取哈希值推荐cut -d' ' -f1。

md5sum校验失败时先看这三行输出
报FAILED不等于文件损坏,报No such file or directory也不一定是路径写错——关键得看md5sum -c输出的完整三行:第一行是校验结果(OK/FAILED),第二行可能带WARNING,第三行才是真正的错误原因。比如:archive.zip: FAILEDsha256sum: WARNING: 1 computed checksum did NOT matchsha256sum: archive.zip: No such file or directory——最后一行才说明当前目录下根本找不到archive.zip。
- 只看到
FAILED?先用ls -l确认文件是否存在、大小是否和预期一致 - 看到
No such file?检查校验文件里写的路径(比如downloads/app.jar),再确认你是不是在downloads/目录下执行的md5sum -c - 看到
WARNING但没报错?大概率是校验文件里混入了Windows换行符(\r\n),用dos2unix checksum.md5修复
生成校验清单必须加-b参数
用md5sum *.jar > checksum.md5生成的清单,默认按文本模式处理,会把换行符统一转成\n再计算哈希——如果文件本身是Windows生成的(含\r\n),校验时就会Mismatch。正确做法是强制二进制模式:md5sum -b *.jar > checksum.md5。这时输出每行开头会多一个*,比如:*d41d8cd98f00b204e9800998ecf8427e app.jar,这个*表示“按原始字节算”,后续md5sum -c才能对上。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 不加
-b,md5sum -c仍能跑,但对含CRLF的文件必然失败 - 清单里出现空格开头的行(如
d41... app.jar),说明是文本模式生成的,别用它校验二进制文件 - 生成后用
head -n1 checksum.md5 | od -c看首字符:如果是*就对了,是空格就重生成
脚本里静默验证只靠退出码
别在脚本里靠grep OK判断成功——md5sum -c默认输出所有结果,哪怕全OK也会打印一堆xxx: OK,干扰解析。真正可靠的是退出状态:md5sum -c --status checksum.md5成功返回0,失败返回非0,且完全不输出任何文字。
- 写if判断直接用
if md5sum -c --status checksum.md5; then ...,别管道grep - 加
--quiet只是隐藏OK行,但失败时仍会输出FAILED,退出码才是唯一可信依据 - CI/CD里用
set -e配合--status,失败自动中断流程
只比对哈希值别用awk切字段
想从md5sum file.bin输出中提取纯哈希值,cut -d' ' -f1最稳;awk '{print $1}'在文件名含空格时会崩——因为awk默认按任意空白分隔,而md5sum输出是“哈希值+单个空格+文件名”,cut按第一个空格切就刚好。
- 正确:
md5sum "my file.tar" | cut -d' ' -f1 - 错误:
md5sum "my file.tar" | awk '{print $1}'($2会是my,$3才是file.tar) - 更极端情况:文件名以空格开头?
md5sum输出会把空格当分隔符,导致哈希值被吞——必须加引号,且优先用cut










