md5sum 默认自带,但需注意输出格式、路径一致性、换行符和空文件四类易错点;单文件用md5sum filename,取哈希值加| cut -d' ' -f1,含空格路径须加引号;校验需同目录执行且避免Windows编辑导致CRLF问题。

直接用 md5sum 就能看,不需要额外安装(绝大多数 Linux 发行版默认自带),但要注意输出格式、路径一致性、换行符和空文件这四个最容易翻车的点。
查看单个文件的 MD5 值
运行 md5sum filename 即可,输出形如:d41d8cd98f00b204e9800998ecf8427e filename。左边是 32 位小写十六进制哈希值,右边是文件名(含相对/绝对路径)。
- 如果只想要纯哈希值(比如用于脚本比对),加管道:
md5sum filename | cut -d' ' -f1 - 文件名含空格或中文?必须用引号包裹,否则报
No such file;更稳妥的做法是配合-print0(见下文) - 不要对目录、符号链接或设备文件(如
/dev/sda)直接运行,会失败或返回无意义结果;先用test -f filename判断是否为常规文件
生成并校验多个文件的 MD5 清单
批量生成清单用 md5sum * 或 md5sum *.jar,保存到文件后才能用 -c 校验。关键不是“能不能跑”,而是“校验时能不能准确定位文件”。
- 校验文件里写的路径是
./data.bin,但当前目录下只有data.bin→ 报file not found,不是 FAILED - 校验文件在 Windows 下编辑过(CRLF 换行),Linux 下
md5sum -c会静默失败,先用dos2unix checksum.md5 - 权限不足时不会提示
Permission denied,只会显示FAILED,需单独检查ls -l - 推荐生成方式:
md5sum *.log > logs.md5,校验时确保在同目录执行md5sum -c logs.md5
用 find + md5sum 查重复文件(避坑重点)
这不是“多算几个 MD5”的事,而是要让哈希计算不中断、不误判、不漏文件。实际脚本里最常崩在这三步。
- 跳过空文件:
! -size 0,否则所有空文件都变成d41d8cd98f00b204e9800998ecf8427e,导致假阳性 - 跳过特殊路径:
-not -path "/dev/*" -not -path "/proc/*" -not -path "/sys/*",否则md5sum报错并终止整个管道 - 处理含空格路径:必须用
find ... -print0 | xargs -0 md5sum,用-exec md5sum {} \;在路径含空格时会切碎文件名 - 静默错误:加
2>/dev/null,否则权限问题会让后续sort和awk收不到完整输入
为什么校验有时显示 OK 有时没输出?
取决于你加了什么选项。md5sum -c 默认每行输出 filename: OK 或 filename: FAILED;加 --status 后完全不输出,只靠退出码判断(0=全通过,1=有失败,2=读取错误)。
- 自动化脚本中必须用
--status,不能依赖 stdout 是否含OK -
--quiet会抑制成功项,只输出失败和警告,适合人工快速扫错 -
--warn能发现校验文件里格式异常的行(比如多了一个空格、少了文件名),但不会阻止校验继续 - 注意:
--strict在遇到任何警告(包括换行符不匹配)时直接返回失败,比--warn更硬核
真正难的不是算出 MD5,而是让校验过程不被路径、权限、换行符、空文件这些细节打断——它们不出现在文档首页,但几乎每次跨环境部署或批量运维都会撞上。


















