md5sum命令默认自带,直接运行md5sum filename即可输出32位哈希值和文件名;文件名含空格等特殊字符须加引号,提取纯哈希值用cut -d' ' -f1,校验时需路径一致、换行符为lf、避免权限问题,安全场景应改用sha256sum。

md5sum 直接就能看,不用装,但输出带文件名、空格位置敏感、路径写错就报错——不是命令不会用,是细节没对齐。
直接运行 md5sum filename 就出结果
绝大多数 Linux 发行版默认自带 md5sum,不需要额外安装。执行后输出形如:d41d8cd98f00b204e9800998ecf8427e filename.txt,左边 32 位小写十六进制是哈希值,右边是文件路径(含相对/绝对路径)。
- 文件名含空格、中文或括号?必须加引号:
md5sum "my file.tar.gz",否则会拆成多个参数,报No such file - 只想取纯哈希值(比如塞进脚本比对)?用
cut -d' ' -f1:md5sum "data.bin" | cut -d' ' -f1 - 别用
awk '{print $1}'提哈希——万一文件名里有空格,awk会按空格切错字段 - 不能对目录、符号链接或
/dev/sda这类设备文件直接跑;先确认是普通文件:test -f filename && md5sum filename
md5sum -c 校验失败,90% 是路径或换行符问题
生成清单时用 md5sum *.log > logs.md5,校验时必须在同目录下执行 md5sum -c logs.md5。失败不等于内容变了,大概率是环境没对齐。
- 校验文件里写的是
./config.json,但你在/tmp/下执行命令 → 报No such file or directory - 清单文件是从 Windows 编辑或传过来的,含
\r\n换行符 →md5sum -c静默失败,先跑dos2unix logs.md5 - 权限不足时不会提示
Permission denied,只显示FAILED;用ls -l确认文件是否可读 - 想只看异常项?加
--quiet:md5sum -c --quiet logs.md5,成功项完全不输出
安全场景下别用 md5sum,优先换 sha256sum
MD5 已被证实可碰撞,攻击者能构造不同内容却产生相同哈希值的文件。检测是否被篡改,应直接用 sha256sum 替代。
- 命令用法完全一致:
sha256sum document.pdf输出 64 位哈希值 - 生成基线清单建议用
-b(二进制模式):sha256sum -b /etc/passwd > /root/baseline.sha256 - 校验时路径、换行符、权限问题和
md5sum完全一样,只是哈希更强;sha256sum -c同样需要dos2unix和路径一致性 - 如果已用
md5sum做了长期比对,注意所有空文件的 MD5 都是d41d8cd98f00b204e9800998ecf8427e,批量中容易误判为“未变”
哈希值不一致?先查这四件事再怀疑命令
哈希不同几乎一定意味着内容不同,而不是命令错了。重点排查输入源本身:
- 文件末尾有没有换行符?
echo "hello" > a.txt和printf "hello" > a.txt的 MD5 不同 - 换行符类型:Windows(CRLF)vs Linux(LF),
file a.txt能看出端倪 - BOM 头:UTF-8 带 BOM 的文件开头多
EF BB BF三个字节,哈希必然变 - 下载中断:用
curl -O断过重下,文件大小可能对得上,但末尾缺字节 →head -c 16和tail -c 16对比首尾字节最直观
真正麻烦的不是算不出哈希,而是校验时路径、换行符、空格、权限这些细节藏在输出背后,不显式报错,只默默标 FAILED。动手前先 pwd、ls -l、file 看一眼,比重跑十遍命令更省时间。











