スポンサーリンク

CKSUM(1) FreeBSD 一般コマンドマニュアル CKSUM(1)

名称

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

書式

cksum [−o 1 | 2 | 3] [file ...]

sum [file ...]

解説

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

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

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

       −o

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

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

アルゴリズム 2 はデフォルトの sum(1) アルゴリズムとして歴史的な AT&T System V 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 は、ネットワークの規格 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

数学的には、与えられたファイルに対応する CRC 値は次の手順で定義されます。

評価される n ビットは、2 を法とする n−1 次多項式 M(x) の係数とみな されます。これらの n ビットはファイルから得られますが、ファイルの最 初のオクテットの最上位ビットを最上位、最後のオクテットの最下位ビッ トを最下位とします。 (必要なら) 0 ビットを埋めてオクテット単位に取 りまとめ、ファイルの長さをバイナリ値で表現した 1 個あるいはそれ以上 のオクテット(最下位オクテットが先)がそれに続きます。この整数を表現 可能な最小個数のオクテットが用いられます。

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

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

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

診断

ユーティリティ cksum および sum は、成功すると 0 で、エラーがあった場合は >0 で終了します。

関連項目

md5(1)

デフォルトの計算方法は、次の ACM 論文で疑似コードを用いて記述されているも のと等価です。

       Dilip V. Sarwate, "                            Computation of Cyclic Redundancy Checks Via TableLookup",                Communications of the ACM,                                             August 1988.

規格

cksum ユーティリティは IEEE Std 1003.2-1992 (‘‘POSIX.2’’) を満していると 考えられています。

歴史

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

FreeBSD 10.0 April 28, 1995 FreeBSD 10.0

スポンサーリンク