Linux:md5sum指令
学习自:
Linux shell编程学习笔记42:md5sum_PurpleEndurer@5lcto的技术博客_51CTO博客
0、常用
#校验文件
md5sum 1.txt
f447b20a7fcbf53a5d5be013ea0b15af 1.txt
#校验标准输入
echo "123456" | md5sum
f447b20a7fcbf53a5d5be013ea0b15af -
1、简介
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。
如果一个文件的内容不改变,那么该文件的MD5值也不会变化。
即使文件名变了,但是只要文件内容不变,其MD5值也不会改变。
通常用于在传输文件时校验文件完整性。
2、用法
md5sum 选项 文件
返回值
①校验码(当选项为b、c、t时);
②校验结果(OK、FAILED,当选项为c时)
可以用md5sum 选项 文件 > xxx.md5的方式将校验和保存到md5文件中。
说明
当文件为空或-时,校验内容为标准输入。
例如:
echo "123456" | md5sum
3、选项
选项 |
用法 |
说明 |
-b --binary |
以二进制模式读取文件 | GNU系统上,二进制文件和文本文件无区别 |
-c --check |
从FILE中读取MD5校验和并检验 | |
--tag | 创建BSD样式的校验和 | |
-t --text |
以文本模式读取文件(默认) | |
--quiet | 不为成功验证的文件打印OK | 仅在验证校验和时有用(也就是说和参数-c配合出现) |
--status | 不输出任何内容,用状态码表示成功 | |
--strict | 当校验到格式不正确的校验行时,用非0退出 | |
-w --warn |
当校验到格式不正确的校验行时,发出警告 | |
--version | 显示版本 | |
--help | 显示帮助 |
4、例子
1)默认文本模式(-t)读取文件,输出md5校验和
echo "123456" > 1.txt
md5sum 1.txt
f447b20a7fcbf53a5d5be013ea0b15af 1.txt
2)二进制模式(-b)读取文件,输出md5校验和
md5sum -b 1.txt
f447b20a7fcbf53a5d5be013ea0b15af *1.txt
相比文本模式,被读取的文件名前多了一个*。
3)默认文本模式读取标准输入,输出md5校验和
echo "123456" | md5sum
f447b20a7fcbf53a5d5be013ea0b15af -
由于未指定文件,所以显示的文件名为-,代表标准输入。
如果不用echo命令:
"123456" | md5sum
-bash: 123456: 未找到命令
d41d8cd98f00b204e9800998ecf8427e -
仍会输出md5校验值,但在此之前会显示一条错误信息:命令未找到。
4)二进制模式读取标准输入,输出md5校验和
echo "123456" | md5sum -b
f447b20a7fcbf53a5d5be013ea0b15af *-
5)用md5校验值校验文件,选项-c
md5文件存放的是校验和
echo "123456" > 1.txt
md5sum 1.txt > 123456.md5
cat 123456.md5
f447b20a7fcbf53a5d5be013ea0b15af 1.txt
md5sum -c 123456.md5
1.txt: 成功
echo "12345678" > 1.txt
md5sum -c 123456.md5
1.txt: 失败
md5sum: 警告:1 个校验和不匹配
md5文件中,存放了一个校验码及它对应的文件名1.txt。
当修改1.txt的文件内容后,校验码随之发生变化,与md5文件存放的校验码内容不一致,因此用-c检查后,返回失败。
6)用md5校验值校验文件,校验成功时不打印OK:--quiet
echo "123456" > 1.txt
md5sum 1.txt > 123456.md5
md5sum -c --quiet 123456.md5
#校验通过时,不输出OK
echo "123" > 1.txt
md5sum -c --quiet 123456.md5
1.txt: 失败
md5sum: 警告:1 个校验和不匹配
7)用md5校验文件,通过状态码反馈校验结果:--quiet --status
状态码为0时,校验通过;为1时,不通过。
echo "123456" > 1.txt
md5sum 1.txt > 123456.md5
md5sum -c --quiet --status 123456.md5
echo $?
0
echo "123" > 1.txt
md5sum -c --quiet --status 123456.md5
echo $?
1
$?:进程状态码。