zoukankan      html  css  js  c++  java
  • md5sum命令详解

      

    基础命令学习目录首页

    原文链接:https://blog.csdn.net/cbbbc/article/details/48563023

    前言

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

    使用说明

    md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。

    md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的。

    在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5 一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输。

    重要的选项:

    -b 以二进制模式读入文件内容

    -t 以文本模式读入文件内容

    -c 根据已生成的md5值,对现存文件进行校验

    --status 校验完成后,不生成错误或正确的提示信息,可以通过命令的返回值来判断。

    使用举例

    生成文件md5值

    md5sum file

    1.  [root@master lianxi]# md5sum data
    2.  0a6de444981b68d6a049053296491e49 data

    使用通配对多个文件进行md5

    1.  [root@master lianxi]# md5sum *
    2.  0a6de444981b68d6a049053296491e49 data
    3.  13df384c47dd2638fd923f60c40224c6 data2

    md5sum校验的是文件内容,与文件名无关

    相同内容的文件的md5一样。如下我先对文件进行复制,然后对同内容不同名的文件进行md5,md5值一样

    1.  [root@master lianxi]# cp data data.bak
    2.  [root@master lianxi]# ls
    3.  data data.bak
    4.  [root@master lianxi]# md5sum *
    5.  0a6de444981b68d6a049053296491e49 data
    6.  0a6de444981b68d6a049053296491e49 data.bak

    以文本模式或二进制模式读入文件并对其进行校验

    -b 以二进制模式读入内容

    -t 以文本模式读入文件内容进行校验

    虽然是不同的读入模式,但是在进行求md5的时候,是一样的,因为是逐位校验的。

    如下文本文件,无论通过哪种模式读取md5都一致。

    1.  [root@master lianxi]# file data
    2.  data: ASCII text
    3.  [root@master lianxi]# md5sum data
    4.  0a6de444981b68d6a049053296491e49 data
    5.  [root@master lianxi]# md5sum -b data
    6.  0a6de444981b68d6a049053296491e49 *data
    7.  [root@master lianxi]# md5sum -t data
    8.  0a6de444981b68d6a049053296491e49 data

    md5值重定向

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

    1.  [root@master lianxi]# md5sum data > data.md5
    2.  [root@master lianxi]# md5sum data
    3.  0a6de444981b68d6a049053296491e49 data
    4.  [root@master lianxi]# cat data.md5
    5.  0a6de444981b68d6a049053296491e49 data


    将多个文件的md5重定向到指定的文件

    每个文件的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.  7: 0bd94658869c53cdcdf35a0f7de93e01 data.md5
       

    重定向追加

    这里新增文件ls,单独求其md5,将其md5追加到文件中

    1.  [root@master lianxi]# cp /bin/ls .
       
    2.  [root@master lianxi]# ls
       
    3.  data data.bak data.md5 d.md5 ls
       
    4.  [root@master lianxi]# md5sum ls >> d.md5
       
    5.  [root@master lianxi]# cat d.md5
       
    6.  0a6de444981b68d6a049053296491e49 data
       
    7.  0a6de444981b68d6a049053296491e49 data.bak
       
    8.  0bd94658869c53cdcdf35a0f7de93e01 data.md5
       
    9.  c6337b20f3c159544bff5cf622391f9e ls
       


    md5校验

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

    md5sum –c d.md5

    1.  1: [root@master lianxi]# md5sum -c d.md5
       
    2.  2: data: OK
       
    3.  3: data.bak: OK
       
    4.  4: data.md5: OK
       
    5.  5: ls: OK
       

    修改文件后,文件md5变化

    1.  1: [root@master lianxi]# ls
       
    2.  2: data
       
    3.  3: [root@master lianxi]# md5sum data  
    4. 4: 2360752c3368ca4f89169f5ecc06e383 data
    5.  5: [root@master lianxi]# md5sum data > data.md5
       
    6.  6: [root@master lianxi]# echo "lwg" >> data
       
    7.  7: [root@master lianxi]# md5sum data
       
    8.  8: 287d237083a42f09785daa46a5fa3afe data
       
    9.  9: [root@master lianxi]# md5sum -c data.md5
       
    10.  10: data: FAILED
       
    11.  11: md5sum: WARNING: 1 of 1 computed checksum did NOT match
       

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

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

    1.  1: [root@master lianxi]# md5sum -c data.md5
       
    2.  2: data: FAILED
       
    3.  3: md5sum: WARNING: 1 of 1 computed checksum did NOT match
       
    4.  4: [root@master lianxi]# md5sum -c --status data.md5
       
    5.  5: [root@master lianxi]# echo $?
       
    6.  6: 1
       

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

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

    1.  1: [root@master lianxi]# md5sum -c ../value.md5
       
    2.  2: acpid: OK
       
    3.  3: acpid.1: OK
       
    4.  4: anaconda.log: OK
       
    5.  5: anaconda.syslog: OK
       
    6.  6: anaconda.xlog: OK
       
    7.  7: boot.log: OK
       
    8.  8: boot.log.1: OK
       
    9.  9: ...
       
    10.  10: ...
       
    11.  11: 省略中间部分
       
    12.  12: ...
       
    13.  13: ...
       
    14.  14: yum.log.2: OK
       
    15.  15: md5sum: WARNING: 1 of 56 computed checksums did NOT match
       
    16.  1: [root@master lianxi]# md5sum -c ../value.md5 | grep -v OK
       
    17.  2: md5sum: WARNING: 1 of 56 computed checksums did NOT match
       
    18.  3: cron.1: FAILED
       

    特殊说明

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

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

    总结

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

  • 相关阅读:
    HDU 2433 Travel (最短路,BFS,变形)
    HDU 2544 最短路 (最短路,spfa)
    HDU 2063 过山车 (最大匹配,匈牙利算法)
    HDU 1150 Machine Schedule (最小覆盖,匈牙利算法)
    290 Word Pattern 单词模式
    289 Game of Life 生命的游戏
    287 Find the Duplicate Number 寻找重复数
    283 Move Zeroes 移动零
    282 Expression Add Operators 给表达式添加运算符
    279 Perfect Squares 完美平方数
  • 原文地址:https://www.cnblogs.com/machangwei-8/p/9570393.html
Copyright © 2011-2022 走看看