這是我參與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,本地校驗,保證了部署安裝的包跟實際交付的一致。