CKSUM(1)

名称
cksum - ファイルのチェックサムとブロックカウントを表示する

書式
[ -o 1 | 2 | 3] [file ...] sum [file ...]

解説
cksum ユーティリティは、各入力ファイルに対して、 空白で区切られた 3 つのフィールドを標準出力に出力します。 これら 3 フィールドはそれぞれ、 チェックサム CRC 、ファイル中のオクテット数、そしてファイル名です。 ファイルが一つも指定されない場合は標準入力が用いられ、 ファイル名は表示されません。

sum ユーティリティは cksum ユーティリティと同じですが、 以降で解説するデフォルトで歴史的アルゴリズム 1 を使用する点が異なります。 互換性のためだけに提供されています。

オプションは以下の通りです:

-o  デフォルトの(より優れた)アルゴリズムに代えて、 歴史的なアルゴリズムを用います。

    アルゴリズム 1 は sum(1) のアルゴリズムとして歴史的な BSD システムにおいて、また、 -r オプション付きで用いる場合の sum アルゴリズムとして歴史的な AT&T UNIX システムにおいて用いられてきたものです。 これは加算のたびに右ローテーションを行う 16 ビットチェックサムであり、 算出あふれは無視されます。

    アルゴリズム 2 はデフォルトの sum アルゴリズムとして歴史的な AT&T UNIX システムで用いられてきたものです。 これは 32 ビットのチェックサムであり、以下のように定義されます:

        s = sum of all bytes;
        r = s % 2^16 + (s % 2^32) / 2^16;
        cksum = (r % 2^16) + r / 2^16;

    アルゴリズム 3 は一般に ‘32bit CRC’ アルゴリズムと呼ばれているものです。これは 32-bit チェックサムです。

    アルゴリズム 1, 2 のいずれも、デフォルトアルゴリズムと同じフィールドを 標準出力に書き出します。 ただし、ファイルサイズはバイト単位ではなくブロック単位となります。 歴史的理由から、アルゴリズム 1 ではブロックサイズは 1024、 アルゴリズム 2 では 512 となっています。 ブロックに満たない部分は切り上げられます。

デフォルトで用いられる CRC は、 ネットワークの規格 iso8802-3 における 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 ビットはファイルから得られますが、 ファイルの最初のオクテットの最上位ビットを最上位、 最後のオクテットの最下位ビットを最下位とします。 (必要なら)ゼロビットを埋めてオクテット単位に取りまとめ、 ファイルの長さをバイナリ値で表現した 1 個あるいは それ以上のオクテット(最下位オクテットが先)がそれに続きます。 この整数を表現可能な最小個数のオクテットが用いられます。

M(x) は x^32 倍(すなわち 32 ビットの左シフト)し、 2 を法として G(x) で割ります。 その結果 31 次以下の剰余 R(x) が得られます。

R(x) の係数は 32 ビットのビット列と見なされます。

そのビット列を反転した結果が CRC です。

cksum および sum ユーティリティは成功時には 0 を、エラー発生時には正の値を返します。

関連項目
md5(1) デフォルトの計算方法は、次の ACM 論文で疑似コードを用いて記述されているものと等価です。 Computation of Cyclic Redundancy Checks Via Table Lookup, Dilip V. Sarwate, Communications of the \*(tNACM\*(sP, August 1988.

規格
cksum ユーティリティは p1003.2-92 を満していると考えられています。

歴史
cksum ユーティリティは 4.4BSD から登場しました。