当前位置: 首页 > 工具软件 > MD5sum > 使用案例 >

md5sum的使用

夏烨霖
2023-12-01

一、概念

在网络传输、设备之间转存、版本升级等均会涉及大文件传输,因此,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。
md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。

062d76d190aa6b7fb0bca71f29f9a10e  stack.c

md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的。
在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5 一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输。

二、用法

[root@localhost test]# md5sum --help
用法:md5sum [选项]... [文件]...
显示或检查 MD5(128-bit) 校验和。
若没有文件选项,或者文件处为"-",则从标准输入读取。

  -b, --binary          以二进制模式读取
  -c, --check           从文件中读取MD5 的校验值并予以检查
  -t, --text            以纯文本模式读取(默认)
  Note: There is no difference between binary and text mode option on GNU system.

以下三个选项在进行校验时非常有用:
      --quiet           不为校验成功的文件输出OK
      --status          不输出任何内容,使用退出状态号显示成功
  -w, --warn            对格式不准确的校验和行进行警告

      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

校验和会按照RFC 1321 规范生成。当进行检查时,给出的输入格式应该和程序的输出
样板格式相同。默认的输出模式时输出一行校验和的校验结果,并有一个字符来
表示文件类型("*"代表二进制," "代表纯文本),并同时显示每个文件的名称。

请向bug-coreutils@gnu.org 报告md5sum 的错误
GNU coreutils 项目主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告md5sum 的翻译错误
要获取完整文档,请运行:info coreutils 'md5sum invocation'

三、实战

1.生成文件md5值

[root@localhost test]# md5sum stack.c
8a7c020d4e72517435e997215af93eee  stack.c
[root@localhost test]# md5sum *
d999b4297802672f7f6dbcc077c6599d  abc
e587f3394e058e4f52b31c5628c89611  abcd
6c23e3c5b3277b50828cbca624bad49d  add.c
e18466d9ac4b04f6106c7adcf52f9423  a.out
c2fa26f33ff9f05975417593aa3fa03f  array
7cc35db2217a6f9efd6788b867e16801  array.c

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

[root@localhost test]# file stack.c
stack.c: ASCII text
[root@localhost test]# md5sum -b stack.c
8a7c020d4e72517435e997215af93eee *stack.c
[root@localhost test]# md5sum -t stack.c
8a7c020d4e72517435e997215af93eee  stack.c
[root@localhost test]# md5sum stack.c
8a7c020d4e72517435e997215af93eee  stack.c

3.md5值重定向

[root@localhost test]# md5sum stack.c
8a7c020d4e72517435e997215af93eee  stack.c
[root@localhost test]# cat stack.md5
8a7c020d4e72517435e997215af93eee  stack.c

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

[root@localhost test]# md5sum stack* >stack.md5
[root@localhost test]# cat stack.md5
e6d17205c35d40d88b7146fe785c6798  stack
8a7c020d4e72517435e997215af93eee  stack.c
bb8f0b96844d2f9f5faa2890b87ffa0c  stack.s

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

[root@localhost test]# md5sum hello.c >>stack.md5
[root@localhost test]# cat stack.md5
e6d17205c35d40d88b7146fe785c6798  stack
8a7c020d4e72517435e997215af93eee  stack.c
bb8f0b96844d2f9f5faa2890b87ffa0c  stack.s
70040e287845e7e183630ecbe0160b78  hello.c

5.md5校验

[root@localhost test]# md5sum -c stack.md5
stack: 确定
stack.c: 确定
stack.s: 确定
hello.c: 确定

修改文件后,文件md5变化

[root@localhost test]# md5sum -c stack.md5
stack: 确定
stack.c: 失败
stack.s: 确定
hello.c: 确定
md5sum: 警告:1/4 生成的校验和不匹配

–status,不显示校验信息,以命令返回值来判断
校验一致返回0,不一致返回1

[root@localhost test]# md5sum -c stack.md5
stack.c: 确定
[root@localhost test]# md5sum -c --status stack.md5
[root@localhost test]# echo $?
0

特殊说明
1)md5sum 是校验文件内容,与文件名是否相同无关
2)md5sum值逐位校验,所以文件越大,校验时间越长。
总结
通过md5sum来校验生成文件校验码,来发现文件传输(网络传输、复制、本地不同设备间的传输)异常造成的文件内容不一致的情况。

 类似资料: