linux命令之md5sum详解

主要参考:http://www.th7.cn/system/lin/201311/46777.shtml

md5sum是用来计算和校验文件报文摘要的工具程序,可以用来

判断一个文件经过传输后是否被改变。

在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。所以需要校验文件的完整性。

MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法,是hash算法的一种,此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。 简单来说就是计算文件,产生一个文件的hash值,用hash值来判断两个文件数据是否一样。

md5sum用法:

md5sum [OPTION]... [FILE]...

-b 或 --binary :把输入文件作为二进制文件看待。

-t 或 --text :把输入的文件作为文本文件看待(默认)。

-c 或 --check :用来从文件中读取md5信息检查文件的一致性。(不细说了参见info)

--status :这个选项和check一起使用,在check的时候,不输出,而是根据返回值表示检查结果。

md5是对文件按位校验,-b -t对md5结果无影响, 因为md5是对文件内容的hash,所以和文件名没有关系。

举例:

最简单用法 md5sum filename , 生成该文件的md5值。

1: [root@master lianxi]# md5sum data

2: 0a6de444981b68d6a049053296491e49 data

md5值重定向 将生成md5值重定向到指定的文件,通常文件的扩展名我们会命为.md5

md5sum filename > filename.md5

对文件进行校验,-c选项来对文件md5进行校验。校验时,根据已生成的md5来进行校验。生成当前文件的md5,并和之前已经生成的md5进行对比,如果一致,则返回OK,否则返回错误信息。

md5sum filename.bin -c filename.md5

返回

data: OK

以下对目录和多个文件校验,暂时用不到,先不看.

===============================================

对多个文件,md5sum *.bin ,对目录下所有bin执行,逐一生成多个md5值

1: [root@master lianxi]# md5sum *

2: 0a6de444981b68d6a049053296491e49 data

3: 13df384c47dd2638fd923f60c40224c6 data2

生成多个文件md5

1: [root@master lianxi]# ls

2: data data.bak data.md5 d.md5

3: [root@master lianxi]# md5sum data* > d.md5

4: [root@master lianxi]# cat d.md5

5: 0a6de444981b68d6a049053296491e49 data

6: 0a6de444981b68d6a049053296491e49 data.bak

7: 0bd94658869c53cdcdf35a0f7de93e01 data.md5

将一个文件的md5追加到已有md5文件 md5sum filename2 >> filename.md5

对目录下所有文件进行校验

md5sum –c d.md5

1: [root@master lianxi]# md5sum -c d.md5

2: data: OK

3: data.bak: OK

4: data.md5: OK

修改文件后,文件md5变化

1: [root@master lianxi]# ls

2: data

3: [root@master lianxi]# md5sum data

4: 2360752c3368ca4f89169f5ecc06e383 data

5: [root@master lianxi]# md5sum data > data.md5

6: [root@master lianxi]# echo "lwg" >> data

7: [root@master lianxi]# md5sum data

8: 287d237083a42f09785daa46a5fa3afe data

9: [root@master lianxi]# md5sum -c data.md5

10: data: FAILED

11: md5sum: WARNING: 1 of 1 computed checksum did NOT match

--status,不显示校验信息,以命令返回值来判断

校验一致返回0,不一致返回1

1: [root@master lianxi]# md5sum -c data.md5

2: data: FAILED

3: md5sum: WARNING: 1 of 1 computed checksum did NOT match

4: [root@master lianxi]# md5sum -c --status data.md5

5: [root@master lianxi]# echo $?

6: 1

多个文件文件校验和grep连用

通过grep将正确的信息过滤掉

1: [root@master lianxi]# md5sum -c ../value.md5

2: acpid: OK

3: acpid.1: OK

4: anaconda.log: OK

5: anaconda.syslog: OK

6: anaconda.xlog: OK

7: boot.log: OK

8: boot.log.1: OK

9: ...

10: ...

11: 省略中间部分

12: ...

13: ...

14: yum.log.2: OK

15: md5sum: WARNING: 1 of 56 computed checksums did NOT match

1: [root@master lianxi]# md5sum -c ../value.md5 | grep -v OK

2: md5sum: WARNING: 1 of 56 computed checksums did NOT match

3: cron.1: FAILED

特殊说明

1)md5sum 是校验文件内容,与文件名是否相同无关

2)md5sum值逐位校验,所以文件越大,校验时间越长。

总结

通过md5sum来校验生成文件校验码,来发现文件传输(网络传输、复制、本地不同设备间的传输)异常造成的文件内容不一致的情况。