当你下载 ISO 镜像、备份归档或大型发布包(tarball)时,仅凭肉眼观察无法轻易判断文件是否完整到达。一个翻转的比特位就可能破坏启动镜像,或将压缩归档变成垃圾文件;而被入侵的镜像站点可能会提供一个看起来合法但已被篡改的文件。解决办法是将文件的加密指纹与发布者在你信任的地方签名或公布的值进行比对。
本指南介绍如何在 Linux 上使用 sha256sum 和 md5sum 生成、比较和验证校验和,以及何时使用哪一个。
sha256sum 和 md5sum 语法
两个命令遵循相同的格式:
sha256sum [OPTIONS] [FILE]...
md5sum [OPTIONS] [FILE]...不加选项时,每个命令都会输出一个十六进制摘要,后跟两个空格和文件名。传递 -c 可根据之前生成的校验和列表来验证文件。
sha256sum 与 md5sum
这两个工具的作用相同:读取文件并输出固定长度的指纹。区别在于算法,进而决定了结果在抵御故意篡改时的安全性。
md5sum 使用 MD5 算法并生成 128 位摘要。MD5 速度很快,但多年来已被攻破:可以构造出两个具有相同 MD5 哈希值的不同文件。请仅将其视为用于检测意外损坏的校验和,而非用于真实性或安全性验证。
sha256sum 使用 SHA-2 系列中的 SHA-256 算法并生成 256 位摘要。它是验证下载内容、发布产物以及任何威胁模型包含恶意中间人场景时的默认选择。大多数 Linux 发行版正是出于这个原因,在其 ISO 镜像旁提供 SHA256SUMS 文件。
如果不确定,请使用 sha256sum。只有在发布者仅提供 MD5 值而没有更强的校验方式,或者你需要对已知完好的文件进行快速一致性检查时,才使用 md5sum。
为文件生成校验和
要为单个文件生成 SHA-256 摘要,请将其作为参数传入:
终端sha256sum ubuntu-24.04.4-desktop-amd64.iso输出3a4c9877b483ab46d7c3fbe165a0db275e1ae3cfe56a5657e5a47c2f99a99d1e ubuntu-24.04.4-desktop-amd64.iso输出为一行:十六进制摘要、两个空格和文件名。同一文件始终生成相同的摘要,因此你可以在复制或下载后再次运行该命令,并通过肉眼比较这些值。
md5sum 的行为方式相同。下面它对本地归档文件计算哈希:
md5sum backup-2026-04-01.tar.gz输出2e3720b76b2f9f96edc43ec4d87d7d52 backup-2026-04-01.tar.gz注意 MD5 摘要更短。这是用 32 个十六进制字符编码的 128 位哈希,而 SHA-256 使用 64 个十六进制字符。
为多个文件生成校验和
两个命令都接受任意数量的文件参数,并为每个文件输出一行:
终端sha256sum *.tar.gz输出b2b09c1e04b2a3a4c5d6e7f890123456789abcdef0123456789abcdef0123456 backup-2026-04-01.tar.gz
c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f8 backup-2026-04-08.tar.gz要将输出保存到稍后可共享或验证的校验和文件中,请进行重定向:
终端sha256sum *.tar.gz > SHA256SUMS生成的 SHA256SUMS 文件可以与归档文件一起发布,任何下载它们的人都可以通过一条命令确认其副本是否匹配。
根据已知校验和验证文件
最常见的任务是检查下载的文件是否与发布者公布的摘要匹配。发行版通常会附带一个 SHA256SUMS 文件,列出每个发布文件及其摘要。切换到同时包含归档文件和校验和文件的目录,然后传递 -c:
sha256sum -c SHA256SUMS输出ubuntu-24.04.4-desktop-amd64.iso: OK
ubuntu-24.04.4-live-server-amd64.iso: OKsha256sum 会逐行读取 SHA256SUMS,重新计算指定文件的摘要,并在匹配时输出 OK。任何缺失文件或摘要不匹配的行都会输出明确的错误信息,并使命令以非零状态退出,这在脚本中非常方便。
当你只关心众多文件中的某一个时,可以用 grep 将相关行筛选出来进行检查:
grep "ubuntu-24.04.4-desktop-amd64.iso" SHA256SUMS | sha256sum -c -末尾的 - 告诉 sha256sum 从标准输入读取校验和列表。这样可以将验证范围限定在单个文件上,而无需创建第二个校验和文件。
将文件与已发布的摘要进行比较
有时发布者并不提供完整的 SHA256SUMS 文件,而是在发布页面上显示单个摘要。你可以直接进行比较而无需创建文件:
echo "3a4c9877b483ab46d7c3fbe165a0db275e1ae3cfe56a5657e5a47c2f99a99d1e ubuntu-24.04.4-desktop-amd64.iso" | sha256sum -c -输出ubuntu-24.04.4-desktop-amd64.iso: OKsha256sum 会在摘要和文件名之间输出两个字符:文本模式下是一个空格后跟另一个空格,二进制模式下是一个空格后跟 *。Ubuntu 的 SHA256SUMS 文件使用 * 形式,而 -c 两种都能接受。手动粘贴摘要时,请保留这两种分隔符之一,以便该行能被正确解析。
静默和警告模式
在自动化检查过程中,每个文件的 OK 行可能会显得嘈杂。--quiet 选项会抑制成功的行,只显示失败项:
sha256sum -c --quiet SHA256SUMS如果所有文件都通过,该命令不会输出任何内容并以状态 0 退出。如果有文件失败,你会看到一行失败信息和非零退出状态,这非常适合 CI 任务或备份脚本。
要标记校验和文件中格式不正确的行,请添加 --warn。当文件是手动组装且你希望确保每个条目都能被正确解析时,这很有帮助。
常用选项
以下是你日常可能用到的标志:
-c、--check- 从文件中读取摘要并逐一验证。-b、--binary- 在输出中用*标记文件。在 Linux 上,两种模式的读取方式完全相同。-t、--text- 以文本模式读取文件,这是 Linux 上的默认模式。--quiet- 检查时抑制OK行。--status- 不输出任何内容;仅依赖退出状态。--ignore-missing- 跳过摘要文件中列出但不存在的文件。--tag- 输出 BSD 风格的标记格式,在混合使用多种哈希算法时很有用。
md5sum 接受相同的标志,这使得在算法变更时可以轻松地将一个命令替换为另一个。
验证 Ubuntu ISO 下载
在 Ubuntu 上,受信任的镜像签名密钥位于 /usr/share/keyrings/ubuntu-archive-keyring.gpg。使用 wget 下载 ISO、校验和列表和分离式签名,然后在检查 ISO 之前先验证签名:
wget https://releases.ubuntu.com/24.04/ubuntu-24.04.4-desktop-amd64.iso
wget https://releases.ubuntu.com/24.04/SHA256SUMS
wget https://releases.ubuntu.com/24.04/SHA256SUMS.gpg
gpgv --keyring /usr/share/keyrings/ubuntu-archive-keyring.gpg SHA256SUMS.gpg SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS在信任这些校验和之前,gpgv 命令必须报告签名有效。随后,--ignore-missing 标志可使校验和测试专注于你下载的 ISO,而不会因为 SHA256SUMS 中列出的其他未下载版本而报错失败。
在其他发行版上,请遵循 Canonical 的镜像验证说明,在运行 gpgv 之前获取并验证 Ubuntu 签名密钥。有关密钥和签名的更多背景信息,请参阅 GPG 指南。
快速参考
如需可打印的快速参考,请参阅 sha256sum 速查表。
| 命令 | 描述 |
|---|---|
sha256sum file.iso | 为单个文件生成 SHA-256 校验和 |
md5sum file.iso | 为单个文件生成 MD5 校验和 |
sha256sum *.tar.gz > SHA256SUMS | 保存多个文件的校验和 |
sha256sum -c SHA256SUMS | 根据校验和列表验证文件 |
grep "file.iso" SHA256SUMS | sha256sum -c - | 从较大的校验和列表中验证单个文件 |
sha256sum -c --quiet SHA256SUMS | 验证时仅显示失败项 |
sha256sum -c --ignore-missing SHA256SUMS | 仅验证存在的文件 |
故障排除
刚下载的文件校验和不匹配
请重新下载该文件,最好从另一个镜像站点下载。最常见的原因是传输被截断或出现网络错误。如果第二次下载仍然失败,则镜像上的文件可能已过时或被篡改,您应向项目方报告此问题。
使用 -c 运行时出现 No such file or directory
校验和文件中的文件名是相对于当前目录解析的。请切换到存放这些文件的目录,或编辑校验和文件,使其使用的路径与文件的实际位置相匹配。
improperly formatted checksum line 警告
摘要长度错误、缺少文件名或存在多余文本都可能导致解析器出错。请使用类似 sha256sum file.iso > SHA256SUMS 的命令重新生成列表。当前的 GNU Coreutils 接受 Windows CRLF 换行符,但较旧的或非 GNU 的实现可能需要先执行 dos2unix SHA256SUMS。
MD5 摘要匹配,但您仍然不信任该文件
您的谨慎是正确的。MD5 碰撞在实际中已经可以实现,因此 MD5 仅适用于检测意外损坏。请向发布者索取 SHA-256 摘要或已签名的校验和文件。
常见问题解答
sha256sum 和 md5sum 哪个更快?md5sum 更快,在处理大文件时有时差异明显。但在现代硬件上,速度差异很少成为问题,这也不是在对安全性要求较高的校验中选择 MD5 而非 SHA-256 的好理由。
可以在目录上使用 sha256sum 吗?
不能直接使用。哈希工具操作的对象是文件。要生成代表整个目录的摘要,可以将确定性的文件列表(如 find ... -type f -print0 | sort -z | xargs -0 sha256sum)通过管道传递给另一个 sha256sum。xargs 指南解释了参数传递的工作原理。
在哪里可以找到 Linux 发行版 ISO 的预期摘要?
大多数主流发行版会在其 ISO 下载链接旁发布校验和文件或单独的摘要,但名称各不相同。请查找诸如 SHA256SUMS、CHECKSUM 或以 .sha256 结尾的文件,并优先使用发行版官方下载页面提供的已签名校验和。
Linux 默认提供 sha256sum 吗?
在大多数主流 Linux 发行版中,这两个命令都是默认可用的。GNU 实现包含在 coreutils 软件包中,而基于 BusyBox 的系统可能会提供兼容的 sha256sum 和 md5sum 小程序。