MAC系统和Linux系统下md5获取方法

前一段时间在开发一个比较复杂的shell脚本,目标之一是希望能够拷贝到任何台机器上都能用(当然不包括win),所以脚本不会用到很多需要安装的命令,所使用的命令基本都是系统安装时候就自带的。我的开发环境是mac,本以为很多基础的命令mac和linux应该都一样,没想到过程中还是遇到不少有细微差别的地方。字符串计算MD5就是其中之一,这篇文章简单记录一下两个系统在计算MD5时的差异,其他的差异以后有机会再聊

Linux:md5sum

命令说明

linux下获取md5的命令是md5sum,下面是他的帮助文件。从帮助文档看,linux的md5sum命令主要是用来计算文件md5值的,一段文本的计算只是附带的一个功能

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

文本输出

测试文本输出md5

>> echo "abcd"|md5sum
f5ac8127b3b6b85cdc13f237c6005d80  -

这和网上工具算的不一样,原因是echo会自动加一个换行符,可以使用-n参数不输出这个换行符

不输出换行符再试一下

>> echo -n "abcd"|md5sum
e2fc714c4727ee9395f324cd2e7f331f  -

这次和工具算出来一样了

文件校验

测试对一个文件进行校验,最简单的命令如下

>> md5sum Document.pdf 
20b1f7a03886e2acb4a1127b46f32428  Document.pdf

会输出文件的md5值和文件名
配合find命令可以快速查看一个目录下所有文件的md5

>> find ./|xargs md5sum
md5sum: ./: Is a directory
0f8cd5b583b41d39b31ead87aa0e58fe  ./BeanContextChildComponentProxy.java
b2125086af1459eb370b3636bc74e07e  ./BeanContextServices.java
c14ec136adc6c9732639e38389b64031  ./BeanContextServiceProvider.java
9c052aec2e7e62a90b2be9cbe78df45a  ./BeanContextChild.java
e9545230bde1ccef1cee14a5b44c3d37  ./BeanContextServicesSupport.java
3f52d9ce3ea8c71600a3984da10afaff  ./BeanContextProxy.java
8f3843de53a38dfb35557be11d49dc88  ./BeanContextContainerProxy.java
9e95824832d9a6a6278c169df77db967  ./BeanContextSupport.java
3915c59e175dea7a84fb5a0ff00dd28e  ./BeanContextMembershipEvent.java
205ac68eef169a48858484f83991cdc9  ./BeanContext.java
7df33512aa2b57677b6873d5f94ef306  ./BeanContextServicesListener.java
c4cebd9f0b4d6247f7cd65707fda3f44  ./BeanContextServiceRevokedEvent.java
e9b6ce291daaf950bdff0b652e0f591c  ./BeanContextMembershipListener.java
38512603934c9a8812392fe44422b898  ./BeanContextChildSupport.java
8e95864a4164640351f851062724c3f3  ./BeanContextEvent.java
4f55377474508514123b3625b8ffe6de  ./BeanContextServiceAvailableEvent.java
f06a414d8bdf87548feb954b970d5026  ./BeanContextServiceProviderBeanInfo.java
86587d95875f3616d519147378dd8797  ./BeanContextServiceRevokedListener.java

我们有了md5值那如何做校验呢
让我们先把md5sum的结果写入一个文件

>> md5sum Document.pdf >> check.out
>> cat check.out 
20b1f7a03886e2acb4a1127b46f32428  Document.pdf

使用-c参数来进行校验

>> md5sum -c check.out 
Document.pdf: OK

可以看到校验成功,这里注意,-c后面直接跟校验文件,程序是根据校验文件中保存的文件名来以当前执行目录为准进行寻找的,所以要保证这个文件对于执行目录的相对路径正确,或者改成绝对路径也行

>> cat check.out 
20b1f7a03886e2acb4a1127b46f32428  /root/Document.pdf
>> md5sum -c check.out 
/root/Document.pdf: OK

如果是多个文件呢,只要在校验文件中保存多个文件的校验结果即可

>> echo "abc" >> test.txt
>> md5sum test.txt >> check.out 
>> cat check.out 
20b1f7a03886e2acb4a1127b46f32428  Document.pdf
0bee89b07a248e27c83fc3d5951213c1  test.txt
>> md5sum -c check.out
Document.pdf: OK
test.txt: OK
>> echo "abc" >> test.txt
>> md5sum -c check.out
Document.pdf: OK
test.txt: FAILED
md5sum: WARNING: 1 of 2 computed checksums did NOT match

如果有校验失败的文件,会提示有几个失败了

MAC:md5

命令说明

mac下获取md5的命令是md5,下面是他的帮助文件。mac下的md5命令就明显提升了string计算md5值的地位,在概要里面明确说明了string的用法

NAME
     md5 – calculate a message-digest fingerprint (checksum) for a file

SYNOPSIS
     md5 [-pqrtx] [-s string] [file ...]

     -s string
             Print a checksum of the given string.
     -p      Echo stdin to stdout and append the checksum to stdout.
     -q      Quiet mode - only the checksum is printed out.  Overrides the -r option.
     -r      Reverses the format of the output.  This helps with visual diffs.  Does nothing when combined with the -ptx options.
     -t      Run a built-in time trial.
     -x      Run a built-in test script.

文本输出

测试输出md5,用管道的话,也无须-s命令

>> echo "abcd"|md5
f5ac8127b3b6b85cdc13f237c6005d80

echo有同样的补换行符机制

不输出换行符试一下

>> echo -n "abcd"|md5
e2fc714c4727ee9395f324cd2e7f331f

一样了

注意:mac下获取的结果格式和linux下有所不同

文件校验

让我们在mac下同样进行文件校验的测试,最简单的命令如下

>> md5 web.zip 
MD5 (web.zip) = 73664fc49bc0ae831f73fd58530f690c

格式和linux下面差别还挺大,也会输出文件的md5值和文件名
不过使用-r参数之后就可以获得和linux下相同格式的输出了

>> md5 -r web.zip  
73664fc49bc0ae831f73fd58530f690c web.zip

配合find命令也可以快速查看一个目录下所有文件的md5

>> find ./|xargs md5
md5: ./: Is a directory
MD5 (.//BackendException.java) = 693d6290c249190f53bf2c4189df3ddd
MD5 (.//UnknownDatabaseException.java) = 0ecdbba3648a6d025b59577ecf2b1e74
MD5 (.//TableModifyInTransactionException.java) = a21eb795866bc59aadc79c7c3f7e94e8
MD5 (.//NoDatabaseSelectedException.java) = 9fda10bd220ed214c1954a6713022a32

我们有了md5值那如何做校验呢
很遗憾,mac下的md5命令并没有类似md5sum的校验快捷功能
不过可以通过shell脚本来进行比对,就不在此举例了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容