cmp コマンド
目的
2 つのファイルの内容を比較し、異なっている最初の文字を 報告します。
構文
説明
cmp コマンドは File1 パラメーターと File2 パラメーターにより指定されたファイルを比較して、その結果を標準出力に書き出します。File1 パラメーターまたは File2 パラメーターに - (負符号) を指定すると、cmp コマンドはそのファイルの標準入力を読み取ります。標準入力から読み取ることができる ファイルは 1 つだけです。デフォルトの状態で、パラメーターに指定されたファイルが同じである場合、cmp コマンドは何も表示しません。指定したファイルに違いがある場合は、cmp コマンドは最初に違いが発生した位置で、バイトと行番号を表示します。-l フラグを指定した場合、および一方のファイルがもう一方のファイルの初期サブシーケンスである場合 (つまり、違いを発見しないまま cmp コマンドが片方のファイルのファイル終了文字を読み取った場合) は、cmp コマンドはこのことを記録します。通常は、cmp コマンドを使ってテキスト以外のファイルを比較 し、diff コマンドを使ってテキスト・ファイルを比較します。
フラグ
| 項目 | 説明 |
|---|---|
| -l | (小文字の L) 違いがあるたびに、バイト番号を 10 進で、違いのある部分のバイトを 8 進で表示します。 |
| -s | 終了値のみを返します。0 は同一ファイル、1 は異なるファイル、2 はアクセス不能または検索不可のオプションを示します。 |
終了状況
このコマンドは次の終了値を戻します。
| 項目 | 説明 |
|---|---|
| 0 | 2 つのファイルは同じです。 |
| 1 | 2 つのファイルは異なっています。この値は、一方のファイルが他方のファイルの初期サブシーケンスである (一方のファイルが他方の最初の部分と同じ) 場合でも示されます。 |
| >1 | エラーが発生しました。 |
例
- 2 つのファイルが同一かどうかを判別するには、
次のように入力します。
これにより、 prog.o.bak と prog.o が比較されます。 これらのファイルが同一であれば、メッセージは何も表示されません。 ファイルが異なる場合は、違いのあった最初の場所が表示されます。例を以下に示します。cmp prog.o.bak prog.o
メッセージ「cmp: EOF on prog.o.bak」が表示された場合は、prog.o の最初の部分は prog.o.bak と同じですが、prog.o. にはさらにデータがあることになります。prog.o.bak prog.o differ: char 4, line 1 - 違いのある部分のバイトの各組を表示するには、
以下のように入力します。cmp -l prog.o.bak prog.oこれによって 2 つのファイルが比較され、違いがある部分のバイト番号 (10 進) と相違するバイトの内容 (8 進) が表示されます。例えば、5 番目のバイトが prog.o.bak では 8 進の 101 なのに対して、prog.o では 8 進の 141 であった場合、cmp コマンドは以下のように表示します。
5 101 141 - メッセージを書き出さずに 2 つのファイルを比較するには、
次のように入力します。cmp -s prog.c.bak prog.cこのコマンドにより、ファイルが同じであれば終了値に 0 が戻り、 異なる場合は 1 が、またエラーが起これば 2 が戻ります。 このフォーマットのコマンドは通常、シェル・プロシージャー内で使われます。 例えば次のとおりです。 このシェル・プロシージャーの部分では、ファイルが同じであれば「No change」が表示されます。
ファイル
| 項目 | 説明 |
|---|---|
| /usr/bin/cmp | cmp コマンドが入っています。 |