md5sum命令-计算和校验文件的MD5值

659 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

一、命令详解

1.1【功能说明】

md5sum命令用于计算和校验文件的MD5值。MD5的全名为Message-Digest Algorithm(信息-摘要算法)5,它是一种不可逆的加密算法。

软件或文件一般都有自己固定的文件格或信息,简单一点说就是“世界上没有完全相同的两片叶子”,那么对于某些网上公开下载的软件、视频,尤其在是镜像文件,如果被修改了可能会导致用不了或其他的问题。因此发布者首先要通过MD5算法得出一组数值,然后下载的用户通过进行MD5的数值对比,确认文件没有被篡改过,即MD5校验。基于MD5加密不可逆的特性,如果数值一样,那么就表示文件没有被修改,反之,则表示修改了。

1.2 【语法格式】

[root@7bfe451a2fe1 ~]# md5sum --help
Usage: md5sum [OPTION]... [FILE]...
Print or check MD5 (128-bit) checksums.
With no FILE, or when FILE is -, read standard input.

1.3 【选项说明】

  • -b 二进制模式读取文件
  • -c 从指定文件中读取MD5校验值,并进行校验
  • -t 文本模式读取文件,这是默认模式
  • --quiet 校验文件使用的参数,验证不通过输出OK
  • --status 校验文件使用的参数,不输出任何信息,可以通过命令的返回值来判断

二、使用范例

2.1 生成一个文件的MD5值

[root@7bfe451a2fe1 ~]# md5sum a.txt
6f5902ac237024bdd0c176cb93063dc4  a.txt

2.2 校验文件是否发生改变

# 生成校验文件
md5sum a.txt > md5.log

# 校验文件是否发生改变
md5sum -c md5.log

image.png

2.3 利用md5sum命令来检验备份文件是否遭到损坏

md5sum命令用于备份任务的指纹检查。每次在备份完成之后生成指纹文件,将备份文和指纹文件发送到备份服务器上,在备份服务器上又会通过md5sum命令和校验文件校验备份是否正确。这样做的目的是为了在第一时间发现可能因为网络传输而造成的文件损坏。

下面脚本实现 打包、生成备份文件并将其发送到备份服务器

backup_send.sh

#!/bin/bash

# 定义变量
IP=$(ifconfig eth1|awk -F'[:]+' 'NR==2 {print $4}')
Path="/data/backup/$IP"
TIME="/bin/date +%F"
BackupFile=/server/scripts/backuplist

# 判断变量对应的路径是否存在
[! -d $Path ] && mkdir -p $Path
[! -d $Backupfile ] && {
	echo "Please give me $BackupFile"
	exit 1
}

# 定义返回的结果函数
function Msg() {
	if [$? -eq 0];then
		action "$*" /bin/true
	else
	  action "$*" /bin/false
	fi
}

# 备份配置文件
tar -zcfh $Path/conf_${TIME}.tar.gz `cat $BackupFile` &>/dev/null
Msg 'Backup config files'

# 给备份文件生成校验文件
find $Path -type f -name "*${TIME}.tar.gz"|xargs md5sum > $Path/flag_${TIME} 2>/dev/null
Msg 'Make a flag for backup'

# 将备份文件与校验文件发送到备份服务器
rsync -az $Path rsync_backup@rsync.org::backup --password-file=/etc/rsync.password &>/dev/null
Msg 'Send backup to backup server'

下面脚本检查服务器备份情况,并邮件通知管理员

backup_check.sh

#!/bin/bash
DIR=/data/backup
TIME='/bin/date +%F'
log=/tmp/$TIME-check.log

[ -d $DIR ] && {
  # 查找指纹库列表,重新验证所有文件对应的指纹与刚打包生成的指纹是否一致
	find $DIR -type -f -name "flag_$TIME"|xargs md5sum -c >$log 2>/dev/null
	mail -s "$(date +%F_%T) backup check result" xxx@xx.com < $log
}

# 删除一周前的备份
find $Path -type f -name "*.tar.gz" -mtime +7|xargs rm -f &>/dev/null
Msg 'Delete backup a week ago'

三、扩展知识

3.1 创建指纹数据库,让文件系统更安全

可以为系统或服务器上重要的文件创建指纹数据库

/etc/passwd
/etc/shadow
/etc/group
/usr/bin/passwd
/sbin/rpcbind
/bin/login
/bin/ls
/bin/ps
/bin/top

这几个文件最容易被修改了,我们使用md5sum检查一次,将这些文件指纹记录下来,然后常常以shell script的方式由程序自行检查指纹表是否不同,那么对于文件系统会比较安全

四、命令总结

  • 2022/12/7 到年底了,一切都变得忙碌起来了