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.hqwc.cn/news/576183.html

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

相关文章

2.4 比较检验 机器学习

目录 常见比较检验方法 总述 2.4.1 假设检验 2.4.2 交叉验证T检验 2.4.3 McNemar 检验 接我们的上一篇《性能度量》&#xff0c;那么我们在某种度量下取得评估结果后&#xff0c;是否可以直接比较以评判优劣呢&#xff1f;实际上是不可以的。因为我们第一&#xff0c;测试…

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

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

做Linux驱动开发,怎么去看懂驱动框架?

理解Linux驱动框架是进行Linux驱动开发的关键一步。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 以下是一些…

力扣124---二叉树的最大路径和(DFS,Java)

目录 题目描述&#xff1a; 思路描述&#xff1a; 代码&#xff1a; 题目描述&#xff1a; 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一…

Linux repo基本用法: 搭建自己的repo仓库[服务端]

概述 Repo的使用离不开Git, Git 和 Repo 都是版本控制工具&#xff0c;但它们在使用场景和功能上有明显区别… Git 定义&#xff1a;Git 是一个分布式的版本控制系统&#xff0c;由 Linus Torvalds 为 Linux 内核开发而设计&#xff0c;现已成为世界上最流行的版本控制软件之…

Codeforces Round 841 (Div. 2) C. Even Subarrays

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

安全的内网通讯软件,WorkPlus定制化 IM/办公门户解决方案

如今处于数字化转型的“加速期”&#xff0c;政企正经历着一场数字化迭代升级的时代浪潮。而不少企业都已具备了数字化管理的意识&#xff0c;数字化应用场景也在全面推开。WorkPlus不断推动信息技术与企业业务深度融合&#xff0c;作为安全的内网通讯软件&#xff0c;为企业提…

主流好用的 Markdown 编辑器介绍

在当今程序员的日常工作中&#xff0c;Markdown 已经成为了一种常用的文本标记语言&#xff0c;它简洁、易读、易写&#xff0c;被广泛应用于写作、文档编写、博客撰写等场景。为了更高效地编辑和管理 Markdown 格式的文档&#xff0c;选择一款功能强大、易用的 Markdown 编辑器…

YOLOv5 | 鬼魅(幽灵)卷积 | 改进Ghost卷积轻量化网络

目录 原理简介 代码实现 yaml文件实现 检查是否添加执行成功 完整代码分享 论文创新必备 启动命令 由于内存和计算资源有限&#xff0c;在嵌入式设备上部署卷积神经网络 (CNN) 很困难。特征图中的冗余是那些成功的 CNN 的一个重要特征&#xff0c;但在神经架构设计中很…

JVM之EhCache缓存

EhCache缓存 一、EhCache介绍 在查询数据的时候&#xff0c;数据大多来自数据库&#xff0c;咱们会基于SQL语句的方式与数据库交互&#xff0c;数据库一般会基于本地磁盘IO的形式将数据读取到内存&#xff0c;返回给Java服务端&#xff0c;Java服务端再将数据响应给客户端&am…

Excel·VBA数组分组问题

看到一个帖子《excel吧-数据分组问题》&#xff0c;对一组数据分成4组&#xff0c;使每组的和值相近 目录 代码思路1&#xff0c;分组形式、可分组数代码1代码2代码2举例 2&#xff0c;数组所有分组形式举例 这个问题可以转化为2步&#xff1a;第1步&#xff0c;获取一组数据…

工控安全双评合规:等保测评与商用密码共铸新篇章

01.双评合规概述 2017年《中华人民共和国网络安全法》开始正式施行&#xff0c;网络安全等级测评工作也在全国范围内按照相关法律法规和技术标准要求全面落实实施。2020年1月《中华人民共和国密码法》开始正式施行&#xff0c;商用密码应用安全性评估也在有序推广和逐步推进。…