/usr/bin/cksum [file...]
cksum 命令可以计算每个输入文件的循环冗余校验 (Cyclic Redundancy Check, CRC) 并将其写入标准输出,还会将每个文件中八位字节的数目写入标准输出。
对于每个成功处理的文件,cksum 的写入方法采用以下格式:
"%u %d %s\n" <checksum>, <# of octets>, <path name>
如果未指定文件操作数,则省略路径名及其前导空格。
使用的 CRC 基于用于引用以太网标准中 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
从数学的角度来讲,对应于指定文件的 CRC 值按以下过程定义:
将要求得的 n 位数视为模数为 2 的 n−1 项式 M(x) 的系数。n 位数即为文件的位数,最高有效位是文件的第一个八位字节的最高有效位,最后一位是最后一个八位字节的最低有效位,以零位填补(如有必要)得到一个八进制整数,后跟一个或多个八进制值,以二进制值表示文件长度,最低有效八位字节。将使用能够表示该整数的最小数目的八位字节。
M(x) 乘以 x 32(即左移 32 位),然后按模数为 2 除以 G(x),得出 ≤ 31 次项余数 R(x)。
将 R(x) 的系数视为 32 位序列。
将该位序列补全,结果即为 CRC。
支持下列操作数:
要检查的文件的路径名。如果未指定 file 操作数,将使用标准输入。
cksum 命令通常用于根据某个可疑文件的可信版本快速比较该可疑文件,以确保通过可疑介质传输的文件在接收时完整无缺。但是,不能将这种比较视为加密形式的安全保护。损坏的文件生成的 CRC 与原始文件生成的相同几率极小;蓄意欺骗非常困难,但或许也不是不可能。
尽管 cksum 的输入文件可以属于任何类型,但是结果不必是字符特殊设备文件的结果。由于本文档并未指定执行输入时使用的块大小,因此字符特殊文件的校验和无需处理这些文件中的所有数据。
这种算法以一个字节流划分成若干八位字节表示。如果某个文件在两个系统之间传输并且经过了任何数据转换(例如将 8 位字符改为 9 位字节或者将 Little Endian 字节顺序改为 Big Endian),不会得到相同的 CRC 值。执行此类转换的实现程序可以扩展 cksum 来应对此类情况。
有关 cksum 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)。
有关影响 cksum 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH。
将返回以下退出值:
所有文件都已成功处理。
出现错误。
有关下列属性的说明,请参见 attributes(5):
|
digest(1)、sum(1)、bart(1M)、attributes(5)、environ(5)、largefile(5)、standards(5)