美文网首页
Linux命令日日说(十三)-- cksum

Linux命令日日说(十三)-- cksum

作者: spt_genius | 来源:发表于2020-03-25 01:01 被阅读0次

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] LICENSE

    cksum 命令最终输出以空格分割的3个字段

    1. CRC校验码

    2. 字节总数或者块数量

      -o 1-o 2时代表的是块数量,因为历史的原因算法1的块大小为1024,算法2的块大小为512,部分块四舍五入。当-o 3时代表的是文件的字节数。

    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
    

相关文章

网友评论

      本文标题:Linux命令日日说(十三)-- cksum

      本文链接:https://www.haomeiwen.com/subject/cgdnyhtx.html