md5sum命令可直接获取文件MD5值,无需安装,输出格式为“32位哈希值 文件名”,文件名含空格需加引号,提取纯哈希值推荐md5sum file | awk '{print $1}',跨平台校验建议用-b二进制模式,安全场景应改用sha256sum。

md5sum 命令能直接获取文件的 MD5 校验值,无需额外安装(coreutils 包自带),但要注意输出格式、换行符干扰和二进制/文本模式差异。
直接运行 md5sum 文件名 就能拿到结果
这是最常用也最不容易出错的方式。命令会输出一长串 32 位十六进制字符串,后跟一个空格和文件路径:
-
md5sum document.pdf输出类似d41d8cd98f00b204e9800998ecf8427e document.pdf - 校验值本身是左侧那串 32 个字符,不是带空格或冒号的变形
- 如果文件路径含空格或特殊字符,建议用引号包裹:
md5sum "my file.txt" - 多个文件可一次计算:
md5sum file1.zip file2.tar.gz,每行一个结果
脚本里提取纯 MD5 值要用 cut 或 awk
自动化处理时不能依赖整行输出,必须剥离文件名。常见写法有:
-
md5sum file.txt | cut -d' ' -f1—— 按空格切,取第 1 字段(注意:若文件名含空格,此法会失效) -
md5sum file.txt | awk '{print $1}'—— 更健壮,awk默认按空白分隔,自动跳过首尾空格 - 绝对安全的做法是先生成标准校验文件再读取:
md5sum file.txt > checksum.md5,再用head -n1 checksum.md5 | cut -d' ' -f1
用 echo 计算字符串 MD5 时别漏掉 -n
很多人误以为 echo "hello" | md5sum 算的是 hello 的 MD5,其实它算的是 hello\n(含换行符):
- 错误:
echo "hello" | md5sum→ 得到5d41402abc4b2a76b9719d911017c592(其实是hello\n的) - 正确:
echo -n "hello" | md5sum→ 得到5eb63bbbe01eeed093cb22bb8f5acdc3 -
-n参数禁用自动换行,否则所有字符串 MD5 都会因隐式换行而偏差
校验值不一致?检查是否混用了二进制/文本模式
md5sum 默认以文本模式(-t)读取,但 Windows 生成的文件可能含 \r\n 换行符,导致 Linux 下校验失败:
- 跨平台传输后校验不通过,优先试
md5sum -b file.txt(强制二进制模式) -
-b和-t在 GNU 系统中读取行为一致,但输出格式不同:文本模式输出为hash filename,二进制模式为hash *filename - 若你从别人那里拿到
.md5文件,注意看里面是hash filename还是hash *filename,对应用-t或-b验证
真正容易被忽略的是:MD5 碰撞虽罕见,但已不适用于安全敏感场景;校验通过只代表“内容未变”,不代表“来源可信”。如果用于下载验证,务必确认 .md5 文件本身是从可信渠道获得的,而不是和文件一起被篡改过的副本。


















