Linux shell编程学习笔记42:md5sum

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.mzph.cn/news/778248.shtml

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

相关文章

redis-shake可视化监控

目录 一.redis-shake v4 1.镜像 2.shake.toml 3.启动redis-shake后 二.json-exporter配置 1.Dockerfile 2.config.yml 三.prometheus配置 1.prometheus.yml 2.redis-shake.json 四.grafana 一.redis-shake v4 1.镜像 ######################### Dockerfile #########…

Qt打印系统库的日志 - QLoggingCategory

Qt的动态库通过源码可以可以看到含有大量的qCInfo 和 qCDebug 等大量的日志&#xff0c; 但是我们正常运行Qt程序&#xff0c;这些动态库或插件里面的日志是不会输出到我们的控制台里面的。 所以本章主要记录怎么输出这些日志出来。 一&#xff1a; 步骤 主要使用的是Qt的 函…

AI短视频制作一本通:文本生成视频、图片生成视频、视频生成视频

AI短视频制作一本通&#xff1a;文本生成视频、图片生成视频、视频生成视频 1. 背景介绍 随着互联网的快速发展&#xff0c;短视频已经成为人们获取信息、娱乐和社交的重要方式。短视频制作技术也在不断进步&#xff0c;从传统的视频剪辑、特效添加&#xff0c;到现在的AI短视…

Kubernetes中pod的概念

pod pod是什么&#xff1a;pod是k8s中基本的构建模块&#xff0c;一个pod可以包含多个和单个容器&#xff0c;包含多个容器时&#xff0c;这些容器总是运行在同一个工作节点上&#xff0c;因为一个pod绝不会跨多个工作节点。 了解pod&#xff1a; pod将容器绑定在一起&#xf…

学习没有速成可言

那些声称几天就能让你精通软件的书籍&#xff0c;往往是夸大其词的宣传。学习软件需要时间和实践&#xff0c;没有什么快速的捷径可以让你在短时间内成为专家。 对于速成软件书&#xff0c;我个人持保留态度。它们可能提供一些基础知识和技巧&#xff0c;可以给初学者一个入门…

【Golang入门教程】Go语言变量的初始化

文章目录 强烈推荐引言举例多个变量同时赋值总结强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 推荐一个个人工作&#xff0c;日常中比较常…

政安晨:【Keras机器学习实践要点】(七)—— 使用TensorFlow自定义fit()

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 在TensorFlow中&#xff0c;fit()是一个非常…

Python+Django+Yolov5路面墙体桥梁裂缝特征检测识别html网页前后端

程序示例精选 PythonDjangoYolov5路面墙体桥梁裂缝特征检测识别html网页前后端 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonDjangoYolov5路面墙体桥梁裂缝特征检测识别html网页前…

BFS-蓝桥杯常用Python算法

BFS BFS算法主要有洪水填充&#xff08;flood fill&#xff09;和最短路径两个应用。 一、洪水填充算法&#xff08;Flood Fill&#xff09; 例题 1&#xff1a;岛屿个数&#xff08;第14届省赛真题&#xff09; 题目描述&#xff1a; 小蓝得到了一副大小为 M N 的格子地图…

Parade Series - SVG Resource

iconfont https://www.iconfont.cn/?spma313x.search_index.i3.2.74e53a819tkkcG音符 <div class"form-group"><a href"Javascript:reload();" class"btn btn-icon btn-outline-light btn-block" style";"><svg t&q…

打造快乐成长的乐园:探索少儿教育项目的魅力

在当今社会&#xff0c;家长们越来越重视孩子的全面发展和个性培养&#xff0c;少儿教育项目因其独特的魅力吸引着越来越多的关注。本文将探讨少儿教育项目的特点、重要性&#xff0c;以及如何打造一个快乐成长的教育乐园。 ### 少儿教育项目的价值 少儿教育项目不仅仅是传授…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果 一、简单介绍 二、简单闪烁效果实现原理 三、简单闪烁效果案例实现简单步骤 四、注意事项 一、简单…

如何应对复杂软件工程的开发流程?

应对复杂软件工程的开发流程通常需要一个结构化和系统化的方法。这种方法不仅包括采用合适的技术和工具&#xff0c;还涉及到项目管理、团队协作、需求分析、设计、实施、测试、部署和维护等多个方面。以下是一些关键步骤&#xff0c;以及如何将这些步骤应用于使用LabVIEW进行软…

JAVA数据篇-队列Queue使用

文章目录 前言一、队列使用&#xff1a;二、队列元素的存入&#xff1a;三、队列元素的取出&#xff1a;三、队列数据实现类&#xff1a;非并发安全的队列&#xff1a;并发安全的队列&#xff1a; 总结 前言 在 Java 中&#xff0c;队列&#xff08;Queue&#xff09;是一种用…

Pyenv的安装和使用

Pyenv是一个简单的Python版本管理工具。通过Pyenv可以安装多个版本的Python&#xff0c;并且可以在多个版本之间轻松切换。所用操作系统&#xff1a;Ubuntu 22.04。 1. 安装Pyenv 1.1 说明 a) Pyenv支持UNIX/LINUX/MacOS系统&#xff0c;并未支持Windows操作系统&#xff0c;…

【开发篇】十二、GCeasy报告分析

文章目录 1、图一&#xff1a;正常情况2、图二&#xff1a;缓存对象过多3、图三&#xff1a;内存泄漏4、图四&#xff1a;频繁持续Full GC5、图五&#xff1a;元空间不足导致的Full GC 1、图一&#xff1a;正常情况 正常的堆内存如图&#xff1a; 锯齿状对象创建后内存占用上…

【PostgreSQL】- 1.2 PostgreSQL 配置单独的数据库存储

在 Debian 或其它 Linux 系统上&#xff0c;为数据库创建一个单独的挂载点&#xff08;如 /opt/pgdata&#xff09;并将一块大容量硬盘挂载到这个目录有几个优点&#xff1a;数据隔离、性能优化、备份和恢复、安全性。 因此接上篇 “【PostgreSQL】- 1.1 在 Debian 12 上安装 P…

基础算法-去重字符串,辗转相除法,非递归前序遍历二叉树题型分析

目录 不同子串 辗转相除法-求最大公约数 二叉树非递归前序遍历 不同子串 从a开始&#xff0c;截取 a aa aaa aaab 从第二个下标开始a aa aab 从第三个 a ab 从第四个 b 使用set的唯一性&#xff0c;然后暴力遍历来去去重&#xff0c;从第一个下标开始截取aaab a aa aaa aaab…

【JS】数组详解

前言 数组是js中最常用到的数据集合&#xff0c;它是引用数据类型的一种&#xff08;其他二者为Object和Function&#xff09;&#xff0c;但其本质是Object。 一、数组的组成 数组由三部分组成&#xff0c;分别是索引、元素和length。 索引&#xff1a;用于标识元素&#xf…

ES学习日记(三)-------第三方插件选择

前言 在学习和使用Elasticsearch的过程中&#xff0c;必不可少需要通过一些工具查看es的运行状态以及数据。如果都是通过rest请求&#xff0c;未免太过麻烦&#xff0c;而且也不够人性化。 目前我了解的比较主流的插件就三个,head,cerebor和elasticHD 1.head 老牌插件,功能…