当前位置: 首页 > Linux

MAC系统和Linux系统下如何获取md5

时间:2023-04-06 06:57:16 Linux

前段时间在开发一个比较复杂的shell脚本。其中一个目标就是复制到任意一台机器上使用(当然不包括win),这样脚本就不会用到很多需要安装的命令,而且用到的命令基本上在安装系统的时候就包含了。我的开发环境是mac。我认为许多基本命令对于mac和linux应该是相同的。没想到过程中会遇到很多细微的差别。字符串计算MD5就是其中之一。本文简单记录一下两个系统在计算MD5时的区别。其他区别在linux上后面再说:md5sum命令linux下获取md5的命令是md5sum,下面是他的帮助文件。从帮助文档上看,linux的md5sum命令主要是用来计算一个文件的md5值,一段文本的计算只是一个附带函数用法:md5sum[OPTION]...[FILE]...打印或检查MD5(128位)校验和。没有FILE,或当FILE为-时,读取标准输入。-b,--binary以二进制模式读取-c,--check从文件中读取MD5和并检查它们--tag创建一个BSD风格的校验和-t,--text以文本模式读取(默认)注意:有GNU系统上的二进制和文本模式选项没有区别。以下四个选项仅在验证校验和时有用:--quiet不为每个成功验证的文件打印OK--status不输出任何内容,状态代码显示成功--strictexitnon-zeroforimproperlyformattedchecksumlines-w,--warn警告格式不正确的校验和行--help显示此帮助并退出--version输出版本信息并退出textoutputtesttext输出md5>>echo"abcd"|md5sumf5ac8127b3b6b85cdc13f237c6005d80-这个和网上的工具不一样,因为echo会自动加一个换行符,可以用-n参数不输出这个换行符再试试>>echo-n"abcd"|md5sume2fc714c4727ee9395f324cd2e7f331f-这次与工具计算的相同。文件验证测试验证一个文件。最简单的命令如下>>md5sumDocument.pdf20b1f7a03886e2acb4a1127b46f32428Document.pdf会输出文件的md5值和文件名,用find命令可以快速匹配查看一个目录下所有文件的md5>>find./|xargsmd5summd5sum:./:Isadirectory0f8cd5b583b41d39b31ead87aa0e58fe./BeanContextChildComponentProxy.javab2125086af1459eb370b3636bc74e07e./BeanContextServices.javac14ec136adc6c9732639e38389b64031./BeanContextServiceProvider.java9c052aec2e7e62a90b2be9cbe78df45a./BeanContextChild.javae9545230bde1ccef1cee14a5b44c3d37./BeanContextServicesSupport.java3f52d9ce3ea8c71600a3984da10afaff./BeanContextProxy.java8f??3843de53a38dfb35557be11d49dc88./BeanContextContainerProxy.java9e95824832d9a6a6278c169df77db967./BeanContextSupport.java3915c59e175dea7a84fb5a0ff00dd28eMacber.BejavaanContext.6ef169a48858484f83991cdc9./BeanContext.java7df33512aa2b57677b6873d5f94ef306./BeanContextServicesListener.javac4cebd9f0b4d6247f7cd65707fda3f44./BeanContextServiceRevokedEvent.javae9b6ce291daaf950bdff0b652e0f591c./BeanContextMembershipListener.java38512603934c9a8812392fe44422b898./BeanContextChildSupport.java8e95864a4164640351f851062724c3f3./BeanContextEvent.java4f55377474508514123b3625b8ffe6de./BeanContextServiceAvailableEvent.javaf06a414d8bdf87548feb954b970d5026./BeanContextServiceProviderBeanInfo.java86587d95875f3616d519147378dd8797./BeanContextServiceRevokedListener.java我们有了md5如何进行验证?我们先把md5sum的结果写入一个文件>>md5sumDocument.pdf>>check.out>>catcheck.out20b1f7a03886e2acb4a1127b46f32428Document.pdf使用-c参数验证>>md5sum-ccheck.outDocument.pdf:OK,可以看到验证成功。这里注意,-c后面直接跟着验证文件。程序根据验证文件中保存的文件名查找当前执行目录,所以要确保这个文件到执行目录的相对路径是正确的,或者改成绝对路径>>catcheck.out20b1f7a03886e2acb4a1127b46f32428/根/文档ument.pdf>>md5sum-ccheck.out/root/Document.pdf:OK如果有多个文件,只需将多个文件的校验结果保存在校验文件中>>echo"abc">>test.txt>>md5sumtest.txt>>check.out>>catcheck.out20b1f7a03886e2acb4a1127b46f32428Document.pdf0bee89b07a248e27c83fc3d5951213c1test.txt>>md5sum-ccheck.outDocument。>test.txt>>md5sum-ccheck.outDocument.pdf:OKtest.txt:FAILEDmd5sum:WARNING:1of2computedchecksumsdidNOTmatch如果有文件验证失败,会提示几个失败的MAC:md5命令说明mac下获取md5的命令是md5,下面是他的帮助文件mac下的md5命令明显改进了string计算md5值的位置。string的用法在summary里写的很清楚。NAMEmd5–计算文件的消息摘要指纹(校验和)SYNOPSISmd5[-pqrtx][-sstring][file...]-sstring打印给定字符串的校验和。-p将标准输入回显到标准输出并将校验和附加到标准输出。-q安静模式——只打印校验和。覆盖-r选项。-r反转输出格式。这有助于视觉差异。与-ptx选项结合使用时不执行任何操作。-t运行内置计时赛。-x运行内置测试脚本。对于管道,不需要-s命令>>echo"abcd"|md5f5ac8127b3b6b85cdc13f237c6005d80echo同样有换行补充机制,不输出换行符。试试>>echo-n"abcd"|md5e2fc714c4727ee9395f324cd2e7f331f文件验证在linux下是不一样的。我们也来测试一下mac下的文件校验。最简单的命令如下>>md5web.zipMD5(web.zip)=73664fc49bc0ae831f73fd58530f690c格式和linux下有很大区别。会输出文件的md5值和文件名,但是使用-r参数后可以得到和linux下同样格式的输出是>>md5-rweb.zip73664fc49bc0ae831f73fd58530f690cweb.zip可以用find命令快速查看一个目录下所有文件的md5>>find./|xargsmd5md5:./:是一个directoryMD5(.//BackendException.java)=693d6290c249190f53bf2c4189df3dddMD5(.//UnknownDatabaseException.java)=0ecdbba3648a6d025b59577ecf2b1e74MD5(.//TableModifyInTransactionException.java)=a21eb795866bc59aadc79c7c3f7e94e8MD5(.//NoDatabaseSelectedException.java)=9fda10bd220ed214c1954a6713022a32我们有了md5值那如何做校实验呢很遗憾,mac下的md5命令没有类似md5sum的快速检查功能,但是可以通过shell脚本进行对比,这里就不举例了