Linux shell编程学习笔记42:md5sum

news2024/9/22 15:30:44

0 前言

前几天在国产电脑上遇到一个问题,先后接到两个文件,如何判断这两个文件内容是否相同?

如果是在Windows系统,可以用fc命令,或者用我自己写的FileInfo,提取两个文件有MD5、SHA1、CRC32值进行比较来判断。

其实,在Linux系统中,提供了md5sum命令来计算md5值。

MD5 全称是报文摘要算法(Message-Digest Algorithm 5),可以对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的校验值(checksums,或称“指纹”“报文摘要”),不同的信息产生相同的报文摘要的可能性是非常非常之小的。

1 md5sum命令的功能和格式

我们可以使用命令 md5sum --help命令 查看它的用法:

purpleEndurer @ bash \w $ md5sum --help
Usage: md5sum [OPTION]... [FILE]...
Print or check MD5 (128-bit) checksums.
With no FILE, or when FILE is -, read standard input.

  -b, --binary         read in binary mode
  -c, --check          read MD5 sums from the FILEs and check them
      --tag            create a BSD-style checksum
  -t, --text           read in text mode (default)
  Note: There is no difference between binary and text mode option on GNU system.

The following four options are useful only when verifying checksums:
      --quiet          don't print OK for each successfully verified file
      --status         don't output anything, status code shows success
      --strict         exit non-zero for improperly formatted checksum lines
  -w, --warn           warn about improperly formatted checksum lines

      --help     display this help and exit
      --version  output version information and exit

The sums are computed as described in RFC 1321.  When checking, the input
should be a former output of this program.  The default mode is to print
a line with checksum, a character indicating input mode ('*' for binary,
space for text), and name for each FILE.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report md5sum translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'md5sum invocation'
purpleEndurer @ bash \w $

 

1.1 md5sum命令的功能

采用MD5报文摘要算法打印或校验 MD5 (128-位) 校验值。

1.2 md5sum命令的格式

md5sum [选项]... [文件]...

1.2.1 选项及功能
选项说明备注

-b

--binary

以二进制模式读取文件GNU系统上的二进制模式选项和文本模式选项之间没有区别

-c

--check

从 FILE 中读取 MD5 总和并检查它们
--tag创建一个 BSD 样式的校验和

-t

--text

以文本模式读取文件(默认)GNU系统上的二进制选项和文本模式选项之间没有区别
--quiet不要为每个成功验证的文件打印 OK这四个选项仅在验证校验和时有用
--status不输出任何内容,状态代码显示成功
--strict退出非零,用于格式不正确的校验行

-w

--warn

发现格式不正确的校验行时进行警告
--help显示此帮助并退出
--version输出版本信息并退出

1.2.2 其它说明

如果没有 指定文件,或者当 文件 为 - 时,读取标准输入。

2 md5sum命令使用实例

2.1 用默认的文本模式读取指定文件并输出md5校验值

purpleEndurer @ bash ~ $ echo "123456" > 1.txt

purpleEndurer @ bash ~ $ md5sum 1.txt
f447b20a7fcbf53a5d5be013ea0b15af  1.txt

我们先用 echo命令创建文件1.txt,文件内容是:123456

然后我们用md5sum命令来输出文件1.txt的md5校验值:f447b20a7fcbf53a5d5be013ea0b15af

2.2 用二进制模式读取指定文件并输出md5校验值

purpleEndurer @ bash ~ $ md5sum -b 1.txt 
f447b20a7fcbf53a5d5be013ea0b15af *1.txt

可以看到,当我们指定用二进制模式读取时,被读取的文件名名前多了一个*。

2.3 用默认的文本模式读取指定字符串并输出md5校验值

purpleEndurer @ bash ~ $ echo "123456" | md5sum
f447b20a7fcbf53a5d5be013ea0b15af  -

由于我们没有指定文件,所以显示的文件名是-,代表标准输入。 

如果我们不使用echo命令:

purpleEndurer @ bash ~ $ "123456" | md5sum
bash: 123456: command not found
d41d8cd98f00b204e9800998ecf8427e  -

仍然可以获得 md5校验值,不过在此之前会显示一条错误信息:bash: 123456: command not found。

2.4 用二进制模式读取指定字符串并输出md5校验值

purpleEndurer @ bash ~ $ echo "123456" | md5sum -b
f447b20a7fcbf53a5d5be013ea0b15af *-

 同样,代表标准输入的-前有*。

2.5 md5sum -c md5文件:用md5校验值校验文件

purpleEndurer @ bash \w $ echo "123456" > 1.txt
purpleEndurer @ bash \w $ md5sum 1.txt > 123456.md5
purpleEndurer @ bash \w $ cat 123456.md5
f447b20a7fcbf53a5d5be013ea0b15af  1.txt
purpleEndurer @ bash \w $ md5sum -c 123456.md5
1.txt: OK
purpleEndurer @ bash \w $ echo "12345678" > 1.txt
purpleEndurer @ bash \w $ md5sum -c 123456.md5   
1.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

purpleEndurer @ bash \w $

 我们先用 命令 echo "123456" > 1.txt 创建文件1.txt,文件内容是:123456

接着使用命令 md5sum 1.txt > 123456.md5 将文件 1.txt的md5校验值保存到文件 123456.md5

然后用命令 cat 123456.md5 查看 文件 123456.md5的内容。

再用命令md5sum -c 123456.md5 来对文件1.txt进行校验,结果:

1.txt: OK

接着我们使用命令 echo "12345678" > 1.txt  文件1.txt的内容改为:12345678

再用命令md5sum -c 123456.md5 来对文件1.txt进行校验,结果:

1.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

2.6 md5sum -c --quiet md5文件:用md5校验值校验文件,文件成功验证时不打印 OK

purpleEndurer @ bash \w $ echo "123456" > 1.txt    
purpleEndurer @ bash \w $ md5sum -c --quiet 123456.md5
purpleEndurer @ bash \w $ echo "12345678" > 1.txt     
purpleEndurer @ bash \w $ md5sum -c --quiet 123456.md5
1.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

purpleEndurer @ bash \w $

这里我们先后执行了两次命令:md5sum -c --quiet 123456.md5,注意两次命令反馈信息的差异。

当我们第一次执行命令md5sum -c --quiet 123456.md5时,由于验证成功,所以没有显示信息。

当我们修改了1.txt文件的内容后,第二次执行命令md5sum -c --quiet 123456.md5时,由于验证不成功,所以看到了信息:

1.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

2.7 md5sum -c --quiet --status md5文件:用md5校验值校验文件,通过状态代码反馈校验是否成功

purpleEndurer @ bash \w $ echo "123456" > 1.txt                 
purpleEndurer @ bash \w $ md5sum 1.txt > 123456.md5 
purpleEndurer @ bash \w $ md5sum -c --quiet --status  123456.md5
purpleEndurer @ bash \w $ echo $?                               
0
purpleEndurer @ bash \w $ echo "12345678" > 1.txt               
purpleEndurer @ bash \w $ md5sum -c --quiet --status  123456.md5
purpleEndurer @ bash \w $ echo $?                               
1
purpleEndurer @ bash \w $ 

 由于指定了--status选项,所以不论md5sum命令对文件校验是否成功,都不会显示信息,我们可以使用$?获取命令的状态代码来判断校验是否成功。

当我们第一次执行命令md5sum -c --quiet --status 123456.md5时,由于验证成功,$?的值为0。

当我们修改了1.txt文件的内容后,第二次执行命令md5sum -c --quiet 123456.md5时,由于验证不成功,$?的值为1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

李宏毅【生成式AI导论 2024】第5讲 让语言模型彼此合作,把一个人活成一个团队

GPD4,它也有非常强大的能力。但是GPT4如果跟其他的语言模型合作,他们其实可以发挥1加1大于二的力量。 为什么要让模型合作? 那怎么让模型彼此合作呢?有很多不同的方式。一个可能性是假设你现在手边就有一堆语言模型,他们可能有不同的能力使用,他们可能有不同的成本局来…

计算机专业学习单片机有什么意义吗?

玩单片机跟玩计算机区别还是很大的, 单片机有众多的种类,每一种又可能有很多个系列.可以说单片机就是为了专款专用而生的.这样来达到产品成本的降低,这就是现在身边的很多的电子产品价格一降再降的原因之一.在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一…

excel 提取数字字符混合文本中的数字(快捷键ctrl+e)

首先&#xff0c;已知A列数据&#xff0c;在B1单元格输入A列中的数据&#xff0c;如3*4*6 第二部&#xff1a;全选对应的B列&#xff0c;然后&#xff1a; ctrld 批量复制 CTRLE 智能复制 由此可见&#xff0c;智能提取汉字与数字混合中的数字方法 。若想分别提取3个数字&am…

目标检测+车道线识别+追踪

一种方法&#xff1a; 车道线检测-canny边缘检测-霍夫变换 一、什么是霍夫变换 霍夫变换&#xff08;Hough Transform&#xff09;是一种在图像处理和计算机视觉中广泛使用的特征检测技术&#xff0c;主要用于识别图像中的几何形状&#xff0c;尤其是直线、圆和椭圆等常见形状…

ssm 房屋销售管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 房屋销售管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

Dify安装使用说明

dify功能简介 dify可以说是一个功能不错的LLMOps&#xff0c;可以通过dify集中管理模型&#xff0c;可以通过界面创建AI应用&#xff0c;可以上传文档形成知识库&#xff0c;可以创建自定义工具&#xff08;API&#xff09;&#xff0c;并可以对外提供API。 相关功能类似Open…

华为云使用指南02

5.​​使用GitLab进行团队及项目管理​​ GitLab旨在帮助团队进行项目开发协作&#xff0c;为软件开发和运营生命周期提供了一个完整的DevOps方案。GitLab功能包括&#xff1a;项目源码的管理、计划、创建、验证、集成、发布、配置、监视和保护应用程序等。该镜像基于CentOS操…

【智能算法】人工大猩猩部队优化算法(GTO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;B Abdollahzadeh等人受到大猩猩社会行为启发&#xff0c;提出了人工大猩猩部队优化算法&#xff08;Artificial Gorilla Troops Optimizer, GTO&#xff09;。 2.算法原理 2.1算…

小美的平衡矩阵(前缀和例题)

2024美团秋招&#xff0c;被这一题给难住了 美团校招笔试真题_Java工程师、C工程师_牛客网 题目&#xff1a; 解答&#xff1a; 这道题的关键点就是要计算出以某一点为矩阵右下角时&#xff0c;1的个数 我一开始是想着遍历&#xff0c;以某一点为起点&#xff08;矩阵左上角&a…

Machine Learning机器学习之统计分析

目录 前言 机器学习之统计分析 统计学的主要目标包括&#xff1a; 统计学核心概念&#xff1a; 统计基础&#xff1a; 训练误差&#xff1a; 常见的损失函数&#xff1a; 正则化和交叉验证 博主介绍&#xff1a;✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉…

TBSI模型论文解读及代码分析

前往我的主页以获得更好的阅读体验 简介 论文来源: Bridging Search Region Interaction With Template for RGB-T Tracking 现有的搜索算法通常会直接连接 RGB 和 T 模态搜索区域, 该方法存在大量冗余背景噪声. 而另一些方法从搜索帧中采样候选框, 对孤立的 RGB 框和 T 框进…

RISC-V特权架构 - 中断定义

RISC-V特权架构 - 中断定义 1 中断类型1.1 外部中断1.2 计时器中断1.3 软件中断1.4 调试中断 2 中断屏蔽3 中断等待4 中断优先级与仲裁5 中断嵌套6 异常相关寄存器 本文属于《 RISC-V指令集基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 中断类型 RISC-V 架构定义的中…

Autodesk Maya 2025---智能建模与动画创新,重塑创意工作流程

Autodesk Maya 2025是一款顶尖的三维动画软件&#xff0c;广泛应用于影视广告、角色动画、电影特技等领域。新版本在功能上进行了全面升级&#xff0c;新增了对Apple芯片的支持&#xff0c;建模、绑定和角色动画等方面的功能也更加出色。 在功能特色方面&#xff0c;Maya 2025…

RabbitMQ安装及使用笔记

RabbitMQ安装及使用笔记 RabbitMQ是一个开源的消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;用于在分布式系统中进行消息传递。 1.安装 利用docker load命令加载mq镜像 docker load -i mq.tar 基于Docker来安装RabbitMQ&#xff…

网络空间测绘系统的商业应用

随着网络空间的不断发展和扩展&#xff0c;网络安全已经成为当今社会面临的重要挑战之一。为了有效应对网络安全威胁&#xff0c;网络空间测绘系统应运而生&#xff0c;成为网络安全领域的重要工具。 网络空间测绘系统不仅能够帮助安全研究人员进行研究和管理&#xff0c;还能为…

3.28总结

1.java学习记录 1.方法的重载 重载换而言之其实就是函数名不变&#xff0c;但是其中的参数需要改变&#xff0c;可以三个方面改变&#xff08;参数类型&#xff0c;参数顺序&#xff0c;参数个数这三个方面入手&#xff0c;这样可以运用的&#xff09; 但是&#xff1a;注意…

边缘计算AI盒子目前支持的AI智能算法、视频智能分析算法有哪些,应用于大型厂矿安全生产风险管控

一、前端设备实现AI算法 主要是基于安卓的布控球实现&#xff0c;已有的算法包括&#xff1a; 1&#xff09;人脸&#xff1b;2&#xff09;车牌&#xff1b;3&#xff09;是否佩戴安全帽&#xff1b;4&#xff09;是否穿着工装&#xff1b; 可以支持定制开发 烟雾&#xf…

API是什么,如何保障API安全

随着移动APP、微服务架构、云、物联网的兴起&#xff0c;企业API数量呈爆发式增长。作为数字世界的连接者&#xff0c;API为企业搭建起了一条内外相连、四通八达的“数据公路”。 API是什么&#xff1f;API&#xff0c;全称Application Programming Interface&#xff0c;即应用…

黑马头条知识点总结

黑马头条知识点总结 文章目录 黑马头条知识点总结前言一、使用的所有技术栈二、初始化项目 2.1加密盐登录2.2网关2.3配置nginx三。文章通过freemarker生成html文件存入minio中四。内容安全阿里云接口5.使用延迟任务发布审核文章 4.9.3)redis分布式锁在工具类CacheService中添加…

CI/CD实战-jenkins结合ansible

配置主机环境 在jenkins上断开并删除docker1节点 重新给master添加构建任务 将server3&#xff0c;server4作为测试主机&#xff0c;停掉其上后面的docker 在server2&#xff08;jenkins&#xff09;主机上安装ansible 设置jenkins用户到目标主机的免密 给测试主机创建用户并…