当前位置: 首页 > news >正文

【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
  • 如果文件内容变了、或丢失了,会显示 FAILEDNo such file.

🧠 实战用途举例

  • 🛡️ 部署时验证文件完整性
  • 💾 备份后验证文件是否损坏
  • 🔄 监控文件是否被非法修改(搭配 cron job 定时运行);
  • 📂 保证文件同步的一致性

封装成一个工具包脚本【升级款】

我们现在来写一个 交互式 MD5 工具脚本 md5tool.sh,让你可以轻松选择功能:


✅ 功能菜单设计

我们将包含以下选项:

  1. 生成目录下所有文件的 MD5 清单
  2. 校验文件是否与 MD5 匹配
  3. 比对两个文件是否一致
  4. 批量校验目录文件完整性(基于 MD5 清单)
  5. 退出

🧰 脚本内容 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

🚀 使用方式

  1. 保存为脚本文件:
nano md5tool.sh
# 粘贴脚本后保存
  1. 添加执行权限:
chmod +x md5tool.sh
  1. 运行脚本:
./md5tool.sh

你就能看到一个简单交互式菜单,按数字选功能即可!


💡 可选增强功能(可按需添加):

  • 导出失败项到日志文件;
  • 支持排除某些文件/目录;
  • 支持 SHA256/SHA512 算法选择;
  • 集成定时任务(cron)每天自动校验。

http://www.xdnf.cn/news/1202707.html

相关文章:

  • 零基础学习性能测试第九章:全链路追踪-项目实操
  • 设计模式(十七)行为型:迭代器模式详解
  • react前端样式如何给元素设置高度自适应
  • debian系统分卷是不会影响系统启动速度?
  • 内存分页机制分析在海外VPS系统的测试流程
  • C语言:20250728学习(指针)
  • 如何给电脑换个ip地址?电脑换ip几种方法
  • 从零开始的云计算生活——第三十七天,跬步千里,ansible之playbook
  • linux_centos7安装jdk8_采用jdk安装包安装
  • 电脑出现英文字母开不了机怎么办 原因与修复方法
  • 【Java EE】多线程-初阶-线程的状态
  • 云原生作业(haproxy)
  • 设计模式十二:门面模式 (FaçadePattern)
  • C++11之lambda及包装器
  • java设计模式 -【责任链模式】
  • 【智慧物联网平台】编译jar环境 Linux 系统Maven 安装——仙盟创梦IDE
  • RK3568基于mpp实现硬解码(二):FFmpeg + mpp实现ipc摄像头图像解码
  • C++---初始化列表(initializer_list)
  • maven 打包报错 process terminated
  • 数据库原理
  • MCP资源管理深度实践:动态数据源集成方案
  • 终结集成乱局:模型上下文协议(MCP)如何重构AI工具生态?
  • 深入探索Linux:忙碌的车间“进程”间通信
  • 四、计算机组成原理——第6章:总线
  • 微信小程序——早餐小程序
  • LeetCode 85. 最大矩形
  • 「源力觉醒 创作者计划」_文心大模型4.5系列开源模型,意味着什么?对开发者、对行业生态有何影响?
  • SpringBoot 发送邮件
  • Datawhale AI夏令营--Task2:理解项目目标、从业务理解到技术实现!
  • 数值计算 | 图解基于龙格库塔法的微分方程计算与连续系统离散化(附Python实现)