前言

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

使用说明

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

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

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

重要的选项:

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

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

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

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

使用举例

生成文件md5值

md5sum file

1: [[email protected] lianxi]# md5sum data

2: 0a6de444981b68d6a049053296491e49 data

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

1: [[email protected] lianxi]# md5sum *

2: 0a6de444981b68d6a049053296491e49 data

3: 13df384c47dd2638fd923f60c40224c6 data2

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

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

1: [[email protected] lianxi]# cp data data.bak

3: data data.bak

4: [[email protected] lianxi]# md5sum *

5: 0a6de444981b68d6a049053296491e49 data

6: 0a6de444981b68d6a049053296491e49 data.bak

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

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

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

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

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

1: [[email protected] lianxi]# file data

2: data: ASCII text

3: [[email protected] lianxi]# md5sum data

4: 0a6de444981b68d6a049053296491e49 data

5: [[email protected] lianxi]# md5sum -b data

6: 0a6de444981b68d6a049053296491e49 *data

7: [[email protected] lianxi]# md5sum -t data

8: 0a6de444981b68d6a049053296491e49 data

md5值重定向

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

1: [[email protected] lianxi]# md5sum data > data.md5

2: [[email protected] lianxi]# md5sum data

3: 0a6de444981b68d6a049053296491e49 data

4: [[email protected] lianxi]# cat data.md5

5: 0a6de444981b68d6a049053296491e49 data

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

每个文件的md5生成为一行

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

3: [[email protected] lianxi]# md5sum data* > d.md5

4: [[email protected] lianxi]# cat d.md5

5: 0a6de444981b68d6a049053296491e49 data

6: 0a6de444981b68d6a049053296491e49 data.bak

7: 0bd94658869c53cdcdf35a0f7de93e01 data.md5

重定向追加

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

1: [[email protected] lianxi]# cp /bin/ls .

3: data data.bak data.md5 d.md5 ls

4: [[email protected] lianxi]# md5sum ls >> d.md5

5: [[email protected] 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: [[email protected] lianxi]# md5sum -c d.md5

2: data: OK

3: data.bak: OK

4: data.md5: OK

5: ls: OK

修改文件后,文件md5变化

2: data

3: [[email protected] lianxi]# md5sum data

4: 2360752c3368ca4f89169f5ecc06e383 data

5: [[email protected] lianxi]# md5sum data > data.md5

6: [[email protected] lianxi]# echo "lwg" >> data

7: [[email protected] lianxi]# md5sum data

8: 287d237083a42f09785daa46a5fa3afe data

9: [[email protected] lianxi]# md5sum -c data.md5

10: data: FAILED

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

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

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

1: [[email protected] lianxi]# md5sum -c data.md5

2: data: FAILED

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

4: [[email protected] lianxi]# md5sum -c --status data.md5

5: [[email protected] lianxi]# echo $?

6: 1

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

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

1: [[email protected] 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: [[email protected] 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来校验生成文件校验码,来发现文件传输(网络传输、复制、本地不同设备间的传输)异常造成的文件内容不一致的情况。

Linux 内核md5sum使用,linux命令详解:md5sum命令(示例代码)相关推荐

  1. Linux 内核中RAID5源码详解之守护进程raid5d

    Linux 内核中RAID5源码详解之守护进程raid5d 对于一个人,大脑支配着他的一举一动:对于一支部队,指挥中心控制着它的所有活动:同样,对于内核中的RAID5,也需要一个像大脑一样的东西来支配 ...

  2. linux 进程间通信 dbus-glib【实例】详解一(附代码)(d-feet工具使用)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  3. dd命令、cp命令详解+dd命令、cp命令对比---delong

    1.dd命令详解 1)中文man手册dd的解释 NAME       dd - 转换和拷贝文件 摘要使用方法: dd    [--help]   [--version]   [if=file]   [ ...

  4. ARP命令详解--网络命令详解二

    显示和修改"地址解析协议 (ARP)"缓存中的项目.ARP 缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址.计算机上安装的每一个以太网或令牌环 ...

  5. Freesurfer recon-all命令详解及使用示例

    Freesurfer recon-all命令详解及使用示例 一.一些名词解释 atlas 模板,带标签的地图 CA Canonical 典型的,规范的(CA Normalize, CA Registe ...

  6. nslookup指定服务器是什么命令,nslookup命令详解_nslookup命令指定dns

    nslookup命令作用是用于查询dns解析域名记录,一般我们使用都是通过此命令可以检测DNS是否正常或者有时候我们把域名A记录更改的ip址,通常更改A记录需要一定的时间才生效,我们可以通过此命令解析 ...

  7. java学习 类变量 类方法_这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下类变量(...

    这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类变量(static) 类变量是该类的所有对象共 ...

  8. linux yum命令详解,yum命令详解

    yum对于经常操作Linux的用户来说并不陌生,也是安装软件包常用的命令,接下来吾爱编程为大家详细的介绍一下yum命令,有需要的小伙伴可以参考一下: 1.yum是什么? yum命令是在Fedora和R ...

  9. linux mkfs 命令 详解,mkfs命令详解

    首页 > 其他分享> 文章详细 mkfs命令详解 2019-02-06 14:42:48阅读:236来源:互联网 mkfs命令-->make filesystem的缩写:用来在特定的 ...

  10. 深度:一文看懂Linux内核,Linux内核架构和工作原理详解

    简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址.目前支持模块的动态装卸(裁剪).Linux内核就是基于这个策略实现的.Linux进程1.采用层次结构,每个 ...

最新文章

  1. C++:将char*指针强制转换成一个指向结构体的指针
  2. nio2 java_java NIO2(file io)
  3. MYSQL专题-MySQL三大日志binlog、redo log和undo log
  4. Python教程:zip 函数的用法
  5. keytool命令总结
  6. cordova插件开发
  7. ipv6转换成ipv4_IPv6协议及其安全浅析
  8. 解决Winform程序在不同分辨率系统下界面混乱问题
  9. python3dijkstra_python3 实现Dijkstra(迪杰斯特拉)最短路径算法
  10. MTK A/B system说明及配置
  11. 对 React 组件进行单元测试(unit testing)
  12. 第6章 vector向量容器
  13. 计算机哪个是易失性存储器,易失性的存储器是什么?
  14. MATLAB R2021b for Mac 版 支持M1 MacOS12,超级详细步骤。(内附安装包网盘链接)
  15. 软件设计师中级下午题
  16. 简述程序化交易的优缺点都是什么?
  17. Keytool命令来生成CA数字证书
  18. 【Machine Learning】【Andrew Ng】- Quiz2(Week 9)
  19. 【程序9】题目:要求输出国际象棋棋盘
  20. java 服务端验证苹果支付applepay账单

热门文章

  1. 鲁大师电脑硬件兼容性测试软件,用鲁大师检测软件检测电脑硬件行得通吗?
  2. 【Power Automate】在power automate中使用SharePoint rest api(Send an http request to SharePoint)获取列表数据
  3. Photoshop CS6安装教程
  4. wordpress php幻灯片代码,WordPress无需插件实现幻灯片效果
  5. 销售管理软件系统的两大优势是什么?
  6. AndroidN DisplayManagerService源码简析,亮屏流程分析
  7. webService简单概念
  8. Jquery项目练习-狂拍灰太狼
  9. 用VC6.0实现上位机串口通信
  10. html5画布实现公司印章效果