cksum, sum
语法
cksum [-o 1 | 2 | 3] file ...
sum file ...
cksum 用于检查文件的CRC是否正确。确保文件从一个系统传输到另一个系统的过程中不被损坏。CRC是一种排错检查方式,该校验法的标准由CCITT所指定,至少可检测到99.998%的已知错误。
sum 是cksum的其中一种特殊实现,效果同
cksum -o 1 file
参数
-o [1|2|3]指定不同算法,这里只支持1,2,3这3种参数值。
Example
-
cksum -o [1|2|3] LICENSEcksum 命令最终输出以空格分割的3个字段
-
CRC校验码
-
字节总数或者块数量
当
-o 1和-o 2时代表的是块数量,因为历史的原因算法1的块大小为1024,算法2的块大小为512,部分块四舍五入。当-o 3时代表的是文件的字节数。 -
文件名
-
3425401509 11357 LICENSE
zzw:blog zzw$ cksum -o 1 LICENSE
33983 12 LICENSE
zzw:blog zzw$ cksum -o 2 LICENSE
60321 23 LICENSE
zzw:blog zzw$ cksum -o 3 LICENSE
2069693628 11357 LICENSE
原理
-
算法1 即
-o 1算法1是之前BSD系统使用的
sum(1)算法,和之前AT&T System V(Unix)使用的sum(1)带-r参数算法。这是一个16位校验和,在每次叠加前右移;溢出被丢弃。 -
算法2 即
-o 2算法2是之前AT&T System V(Unix)使用的
sum(1)的默认算法。这是一个32位校验和,定义如下:s = sum of all bytes; r = s % 2^16 + (s % 2^32) / 2^16; cksum = (r % 2^16) + r / 2^16; -
算法3 即
-o 3算法3通常称为“32位CRC”算法。这是32位校验和。
使用的默认CRC基于网络标准ISO/IEC 8802-3:1989中用于CRC错误检查的多项式。CRC校验和编码是由生成多项式定义:
G(x) = x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1