【linux】md5文件相似校验介绍与实战示例
在 Linux 中,你可以使用以下几种方式对一个文件进行 MD5 校验,即生成其 MD5 值。
✅ 常用命令:md5sum
md5sum 文件路径
示例:
md5sum test.txt
输出示例:
5eb63bbbe01eeed093cb22bb8f5acdc3 test.txt
✅ 如果只想获取 MD5 值本身(不显示文件名):
md5sum test.txt | awk '{print $1}'
输出:
5eb63bbbe01eeed093cb22bb8f5acdc3
✅ 如果系统没有 md5sum
(极少数情况下),可以使用:
1. openssl
:
openssl md5 文件路径
示例:
openssl md5 test.txt
输出:
MD5(test.txt)= 5eb63bbbe01eeed093cb22bb8f5acdc3
🔍 常见用途:
- 比对两个文件是否一致(内容相同):
md5sum file1 file2
如果输出的 MD5 值一样,说明内容一致。
实战示例
好的,下面是一个实用的 Shell 脚本,可用于校验文件的 MD5 值是否符合预期,或比对两个文件内容是否一致。
✅ 脚本 1:校验文件是否匹配指定 MD5 值
#!/bin/bash# 使用方法: ./check_md5.sh <文件路径> <预期MD5值>FILE=$1
EXPECTED_MD5=$2if [ ! -f "$FILE" ]; thenecho "❌ 文件不存在: $FILE"exit 1
fiACTUAL_MD5=$(md5sum "$FILE" | awk '{print $1}')if [ "$ACTUAL_MD5" == "$EXPECTED_MD5" ]; thenecho "✅ MD5 校验通过"
elseecho "❌ MD5 校验失败"echo "期望值: $EXPECTED_MD5"echo "实际值: $ACTUAL_MD5"
fi
使用示例:
chmod +x check_md5.sh
./check_md5.sh test.txt 5eb63bbbe01eeed093cb22bb8f5acdc3
✅ 脚本 2:比对两个文件是否相同(通过 MD5)
#!/bin/bash# 使用方法: ./compare_md5.sh file1 file2FILE1=$1
FILE2=$2if [ ! -f "$FILE1" ] || [ ! -f "$FILE2" ]; thenecho "❌ 某个文件不存在"exit 1
fiMD5_1=$(md5sum "$FILE1" | awk '{print $1}')
MD5_2=$(md5sum "$FILE2" | awk '{print $1}')if [ "$MD5_1" == "$MD5_2" ]; thenecho "✅ 两个文件内容一致"
elseecho "❌ 文件内容不一致"echo "$FILE1: $MD5_1"echo "$FILE2: $MD5_2"
fi
使用示例:
chmod +x compare_md5.sh
./compare_md5.sh test1.txt test2.txt
好的!接下来给你一个更实用的 目录下所有文件批量计算和校验 MD5 的脚本。你可以用它来:
- 快速计算某个目录下所有文件的 MD5;
- 保存为参考值文件;
- 后续对比是否有文件内容被修改(如备份校验、防篡改等)。
✅ 脚本 3:计算并保存目录中所有文件的 MD5
#!/bin/bash# 使用方法: ./generate_md5_list.sh <目标目录> <输出文件>TARGET_DIR=$1
OUTPUT_FILE=$2if [ ! -d "$TARGET_DIR" ]; thenecho "❌ 目录不存在: $TARGET_DIR"exit 1
fiecho "📦 正在生成 $TARGET_DIR 下所有文件的 MD5..."# 清空输出文件
> "$OUTPUT_FILE"# 遍历目录并计算 MD5
find "$TARGET_DIR" -type f | while read -r file; domd5sum "$file"
done >> "$OUTPUT_FILE"echo "✅ 已写入: $OUTPUT_FILE"
使用示例:
chmod +x generate_md5_list.sh
./generate_md5_list.sh /path/to/mydir md5_list.txt
✅ 脚本 4:校验目录中的文件是否被修改(基于 MD5 清单)
#!/bin/bash# 使用方法: ./verify_md5_list.sh <md5清单文件>MD5_LIST_FILE=$1if [ ! -f "$MD5_LIST_FILE" ]; thenecho "❌ 清单文件不存在: $MD5_LIST_FILE"exit 1
fiecho "🔍 正在校验文件完整性..."md5sum -c "$MD5_LIST_FILE"# 提示:md5sum -c 会自动逐行读取,格式要求是:<md5值><空格><空格><文件路径>
使用示例:
chmod +x verify_md5_list.sh
./verify_md5_list.sh md5_list.txt
✅ 输出说明:
- 如果文件没有改动,会显示
OK
。- 如果文件内容变了、或丢失了,会显示
FAILED
或No such file
.
🧠 实战用途举例
- 🛡️ 部署时验证文件完整性;
- 💾 备份后验证文件是否损坏;
- 🔄 监控文件是否被非法修改(搭配 cron job 定时运行);
- 📂 保证文件同步的一致性。
封装成一个工具包脚本【升级款】
我们现在来写一个 交互式 MD5 工具脚本 md5tool.sh
,让你可以轻松选择功能:
✅ 功能菜单设计
我们将包含以下选项:
- 生成目录下所有文件的 MD5 清单
- 校验文件是否与 MD5 匹配
- 比对两个文件是否一致
- 批量校验目录文件完整性(基于 MD5 清单)
- 退出
🧰 脚本内容 md5tool.sh
#!/bin/bash# md5tool.sh - 多功能 MD5 工具while true; doecho "==============================="echo " 🧰 MD5 工具菜单"echo "==============================="echo "1. 生成目录文件 MD5 清单"echo "2. 校验单个文件是否与指定 MD5 匹配"echo "3. 比对两个文件是否内容一致"echo "4. 校验目录文件完整性(使用 MD5 清单)"echo "5. 退出"echo "-------------------------------"read -p "请选择操作 [1-5]: " CHOICEcase $CHOICE in1)read -p "请输入目标目录路径: " DIRread -p "请输入输出清单文件路径 (如 md5_list.txt): " OUTFILEif [ ! -d "$DIR" ]; thenecho "❌ 目录不存在!"elseecho "📦 正在生成 MD5 清单..."> "$OUTFILE"find "$DIR" -type f | while read -r file; domd5sum "$file"done >> "$OUTFILE"echo "✅ MD5 清单已保存到: $OUTFILE"fi;;2)read -p "请输入文件路径: " FILEread -p "请输入预期 MD5 值: " EXPECTEDif [ ! -f "$FILE" ]; thenecho "❌ 文件不存在!"elseACTUAL=$(md5sum "$FILE" | awk '{print $1}')if [ "$ACTUAL" == "$EXPECTED" ]; thenecho "✅ 校验通过,MD5 匹配"elseecho "❌ 校验失败!"echo "期望: $EXPECTED"echo "实际: $ACTUAL"fifi;;3)read -p "请输入第一个文件路径: " FILE1read -p "请输入第二个文件路径: " FILE2if [ ! -f "$FILE1" ] || [ ! -f "$FILE2" ]; thenecho "❌ 某个文件不存在!"elseMD5_1=$(md5sum "$FILE1" | awk '{print $1}')MD5_2=$(md5sum "$FILE2" | awk '{print $1}')if [ "$MD5_1" == "$MD5_2" ]; thenecho "✅ 两个文件内容一致"elseecho "❌ 文件不一致!"echo "$FILE1: $MD5_1"echo "$FILE2: $MD5_2"fifi;;4)read -p "请输入 MD5 清单文件路径: " LISTFILEif [ ! -f "$LISTFILE" ]; thenecho "❌ 清单文件不存在!"elseecho "🔍 开始校验..."md5sum -c "$LISTFILE"fi;;5)echo "👋 退出 MD5 工具,再见!"exit 0;;*)echo "❌ 无效选择,请输入 1-5!";;esacecho "" # 添加换行
done
🚀 使用方式
- 保存为脚本文件:
nano md5tool.sh
# 粘贴脚本后保存
- 添加执行权限:
chmod +x md5tool.sh
- 运行脚本:
./md5tool.sh
你就能看到一个简单交互式菜单,按数字选功能即可!
💡 可选增强功能(可按需添加):
- 导出失败项到日志文件;
- 支持排除某些文件/目录;
- 支持 SHA256/SHA512 算法选择;
- 集成定时任务(
cron
)每天自动校验。