Linux命令-sum计算文件校验和快速参考基本用法两种算法对比选项说明sum vs 现代哈希工具使用场景与限制在脚本中使用sum是一个轻量级的文件校验和计算工具输出文件的 16 位校验和与块数。它实现了两种算法BSDsum默认和 System Vsum-s选项。需要明确的是sum仅用于检测意外数据损坏不应用于安全性校验——对于安全需求请使用md5sum、sha256sum等加密哈希工具。快速参考sum[选项][文件...]sum是 Unix 年代遗留下来的校验工具。它的 16 位校验和极易发生碰撞只能用于检测简单的传输错误不能防御恶意篡改。基本用法# 计算文件的 BSD 校验和默认sumfile.txt# 输出: 校验和 块数# 计算文件的 System V 校验和sum-sfile.txt# 计算多个文件的校验和sum*.txt# 从标准输入读取echohello world|sum# 仅显示校验和不含块数——用 awk 提取sumfile.txt|awk{print $1}# 计算目录下所有文件的总校验和cat*.txt|sum两种算法对比# BSD sum默认# 算法: 以 1024 字节为块进行 CRC 校验# 输出格式: 校验和 块数 文件名sumfile.txt# 12345 2 file.txt# System V sum (-s)# 算法: 以 512 字节为块进行 16 位累加# 输出格式: 校验和 块数 文件名sum-sfile.txt# 56789 4 file.txt# 两者的差异echotest/tmp/testfile.txtechoBSD sum:$(sum/tmp/testfile.txt)echoSysV sum:$(sum-s/tmp/testfile.txt)选项说明选项说明-rBSD 算法默认等同无选项-sSystem V 算法使用 512 字节块--help显示帮助--version显示版本# 验证两个算法一致性的脚本checksum_compare(){localfile$1echo文件:$fileechoBSD 校验和:$(sum$file)echoSysV 校验和:$(sum-s$file)echoMD5:$(md5sum$file|cut-d -f1)echoSHA256:$(sha256sum$file|cut-d -f1)}checksum_compareimportant_data.datsum vs 现代哈希工具特性summd5sumsha256sum校验和位数16 位128 位256 位碰撞可能性极高中等已知碰撞极低安全性无低已破解高速度快中中适用场景简单传输验证文件完整性安全校验推荐使用不建议非安全场景安全场景# 简单完整性验证sum 足够# 场景检查文件是否在传输中损坏sumoriginal_file.txtsumreceived_file.txt# 如果校验和一致说明传输大概率正确# 安全场景必须使用 SHA256sha256sum software_package.tar.gz# 与官方发布的哈希值对比# 不要使用 sum 来验证下载的软件包# 错误示范# wget https://example.com/package.iso# sum package.iso ← 不安全攻击者可以轻松伪造## 正确示范# sha256sum package.iso# 对比官方发布的 SHA256 值使用场景与限制# sum 仅适合的场景快速检测无心之失# 1. 文件传输后快速检查sum/source/data.binsum/destination/data.bin# 2. 在低资源嵌入式系统中无 crypto 库# 嵌入式设备可能无 sha256sum 命令# 3. 教学演示——展示校验和原理create_test_files(){echoHello/tmp/file1.txtechohello/tmp/file2.txtechoHello/tmp/file3.txtechofile1:$(sum/tmp/file1.txt)echofile2:$(sum/tmp/file2.txt)echofile3:$(sum/tmp/file3.txt)# file1 和 file3 的校验和相同内容相同}create_test_files# sum 不适用于# ❌ 安全验证防篡改→ 使用 sha256sum# ❌ 密码存储 → 使用 bcrypt/argon2# ❌ 数字签名 → 使用 PGP/SSH 签名# ❌ 防碰撞需求 → 使用 SHA-256 或更高在脚本中使用# 文件传输验证脚本verify_transfer(){localsource$1dest$2localsrc_sum$(sum$source|awk{print $1})localdst_sum$(sum$dest|awk{print $1})if[$src_sum$dst_sum];thenecho✅ 传输验证成功:$source→$destreturn0elseecho❌ 文件校验和不匹配:$source($src_sum) vs$dest($dst_sum)return1fi}# 目录完整性清单create_manifest(){localdir${1:-.}echo 文件清单:$direcho生成时间:$(date)echofind$dir-typef-execsum{}\;|sort}create_manifest/etc# 备份前后对比# 备份前sum/var/lib/mysql/important.db/tmp/before_backup.sum# 执行备份...# 备份后验证sum/var/lib/mysql/important.db/tmp/after_backup.sumdiff/tmp/before_backup.sum /tmp/after_backup.sum\echo备份前后数据一致||\echo⚠️ 文件已被修改重要建议在日常工作中应该优先使用sha256sum进行文件完整性校验。sum的存在价值主要是历史兼容性和在极低资源环境中的轻量级需求。将sum用于安全目的是危险的——它的 16 位校验和有 1/65536 的碰撞概率对于有意篡改来说几乎毫无防护能力。