这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战html
小白最近学习编程学烦了,看到学委以前写了一篇节约3小时之间试水Unity的,直接过来找我要了!(要么是懒得下安装包,否则是太依赖学委了,都很差!)linux
恰好我手上有一个Unity安装包, 就发给他了。算法
不知道啥缘由,他说传输后打不开?apache
怎么可能呢?编程
接着,再传了一次仍是打不开。bash
这让学委一会儿想到了:得cksum一下markdown
1) 先cksum工具本地算一次,获得校验码
2)而后在接受的系统中又计算一次,获得文件校验码
3)当两个数字校验相等,文件被认为是被正确传输了curl
使用就像下面同样:maven
cksum 文件名
复制代码
第一个数字:2283207869 //为校验码
第二个数字: 844948304 // 为文件字节数工具
而后我让小白在本机跑一边cksum,发结果给我,一看他那边的校验数字竟然是 33303330333 ,这个数字,稍微思考一下就很离谱!
很明显Unity包传输出错了。
此次我直接拷贝U盘给他了,而且进入U盘对应目录进行cksum了,万无一失!
好了,小白能够先走了。亲爱的读者咱们继续学习一下cksum吧,不少使用的。
Linux cksum命令用于检查文件的CRC是否正确。确保文件从一个系统传输到另外一个系统的过程当中不被损坏。
CRC是一种排错检查方式,该演算法的标准由CCITT所指定,至少可检测到99.998%的已知错误。指定文件交由cksum演算,它会回报计算结果,供用户核对文件是否正确无误。
www.man7.org/linux/man-p…
这个算法不继续介绍,本文谈谈应用。
sha512cksum 比cksum(32位 cksum)更加可靠,由于是512位哈希cksum。
好比咱们常见的maven(Java项目管理工具):
下图的表格第二列为下载连接,第三列为每个包的sha512cksum的签名。
上面页面的连接能够点击【maven下载页面】
咱们能够经过点击上面的连接下载,好比这个:maven tar gz包
经过这个连接下载而后跑shasum在本地校验一次。
shasum -a 512 apache-maven-3.8.1-bin.tar.gz
#获得这个签名:0ec48eb515d93f8515d4abe465570dfded6fa13a3ceb9aab8031428442d9912ec20f066b2afbf56964ffe1ceb56f80321b50db73cf77a0e2445ad0211fb8e38d
复制代码
这个值跟第三列连接的文件【点这里下载sha512】内容必须一致.
操做复杂,学委准备了下面的脚本。
#!/bin/sh
#雷学委的demo代码
#仅支持macbook
url=https://mirror-hk.koddos.net/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
#url_sha512=${url}.sha512
url_sha512=https://downloads.apache.org/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz.sha512
curl ${url_sha512} -o maven.tar.gz.sha512
curl ${url} -o maven.tar.gz
shasum -a 512 maven.tar.gz
复制代码
读者能够运行这个脚本试试,最好的验证效果以下图:
下面举例一些经常使用场景。
一般是用在大量的打包数据迁移,生成每一个文件的数字签名。
作Java的同窗知道一个叫作Nexus的依赖仓库,不止能够放jar,还能放tgz包,咱们一般会生成tgz包的同时,进行sha512把签名结果存到文件一并传到nexus上面。
当咱们拿tgz文件部署的时候,同时下载tgz和sha512,本地校验,保证了部署安装的包跟实际交付的一致。