跟老男孩学Linux运维-核心系统命令实战-第2章-文件和目录操作命令-md5sum计算和校验文件的 MD5 值

2.21.md5sum 计算和校验文件的 MD5 值(*****)

2.21.1.命令详解

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

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

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

2.21.2.使用范例

1.基础范例

#生成一个文件的 MD5 值
md5sum oldboy.txt

#校验文件是否发生改变
md5sum oldboy.txt >md5.log
cat md5.log
md5sum -c oldboy.txt
echo "oldboy">oldboy.txt
md5sum -c oldboy.txt
md5sum --status -c oldboy.txt
echo $?

2.生产案例

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

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

#!/bin/bash

# Source function library
. /etc/init.d/functions

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

# Judged the existence of variables
[ ! -d $Path ] && mkdir -p $Path
[ ! -f $BackupFile ] && {
    echo "Please give me $BackupFile"
    exit 1
}

# Defined result function
function Msg() {
    if [ $? -eq 0 ];then
        actiion "$*" /bin/true
    else    
        actiion "$*" /bin/false
    fi
}

# Backup config files
tar zcfh $Path/conf_${TIME}.tar.gz 'cat $BackupFile' &>/dev/null
Msg 'Backup config files'

# Make a flag for backup
find $Path -type f -name "*${TIME}.tar.gz"|xargs md5sum >$Path/flag_$TIME 2>/dev/null
Msg 'Make a flag for backup'

# Send backup to backup server
rsync -az $Path rsync_backup@rsync.etiantian.org::backup --password-file=/etc/rsync.password &>/dev/null
Msg 'Send backup to backup server'

现在检查服务器备份情况,并邮件通知管理员:

cat 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" 12345679@qq.com <$log
}
# Delete backup a week ago
find $Path -type f -name "*.tar.gz" -mtime +7|xargs rm -f &>/dev/null
Msg 'Delete backup a week ago'

  

posted on 2019-11-28 06:31  herisson_pan  阅读(38)  评论(0)    收藏  举报

导航