[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

cmp【コマンド】

pointこの用語のポイント

pointUNIX系で使えるコマンドだよ

pointファイルをバイナリ単位で比較するよ

スポンサーリンク

簡単に書くよ

cmp【コマンド】とは

2つのファイルをバイナリ単位で比較するときに使うコマンド
です。

image piyo

詳しく書くよ

UNIX系(LinuxとかMacとか)で使えます。

書き方は

cmp [オプション] [ファイル1] [ファイル2] [無視するバイト数1] [無視するバイト数2]

です。
オプションはちらほらとあります。

オプション説明
-l違いのあった位置を全部表示する
-s何も表示しない。終了コードのみ返却する

などですね。
環境によっては他にもあります。

なお、比較結果は終了コードとして返却されます。
終了コードと実際の結果の対応は以下の通りです。

終了コード意味
0違いは無いよ
1違いがあるよ
2エラーが発生したよ

ここまでを踏まえて、実際の使い方を見てみましょう。
例えば以下の2つのファイルがあったとします。

■file1.txt
abc
abc
dabc


■file2.txt
aabc
abc
eeabc


この状態で

cmp file1.txt file2.txt

を実行すると、結果は

file1.txt file2.txt differ: byte 2, line 1

になります。
最初に違いのあった場所を表示していますね。
先頭から2バイト目(1行目)が「b」と「a」で違うので、そこが指摘されています。

■file1.txt
abc
abc
dabc


■file2.txt
aabc
abc
eeabc


次に「-l」オプションを指定して

cmp -l file1.txt file2.txt

を実行してみましょう。
結果は

 2 142 141
 3 143 142
 4  12 143
 5 141  12
 6 142 141
 7 143 142
 8  12 143
 9 144  12
10 141 145
11 142 145
12 143 141
13  12 142
cmp: EOF on file1.txt


となります。
見てもよく分かりませんが「どことどこが違うよ~」というのを細かく表示してくれているのでしょう。

次に「-s」オプションを指定して

cmp -s file1.txt file2.txt

を実行してみます。

結果は……画面上には何も表示されません。
ただし、その直後に

echo $?

を実行すると

・0(違いなし)
・1(違いあり)
・2(エラー)


のどれかが表示されます。
画面上には何も表示されませんが、実行結果は返されているのです。
「-s」オプションは何かプログラムの中で「cmp」コマンドを使うとき用のオプションですね。

最後に、無視するバイト数を指定してみましょう。
ファイル名の後に数字を指定することで、先頭から何バイトを読み飛ばすか指定することができます。
例えば

cmp file1.txt file2.txt 0 1

を指定すると「file1.txt」の先頭0バイトと「file2.txt」の先頭1バイトを読み飛ばして比較します。
つまり「file1.txt」の1バイト目からと「file2.txt」の2バイト目からを比較してくれるのです。

■file1.txt
abc
abc
dabc


■file2.txt
aabc
abc
eeabc


の状態で

cmp file1.txt file2.txt 0 1

を実行すると、結果は

file1.txt file2.txt differ: byte 9, line 3

になります。
「file2.txt」は2バイト目からの比較なので「file1.txt」と「file2.txt」の1行目は一致します。

■file1.txt
abc
abc
dabc


■file2.txt
aabc
abc
eeabc


2行目も普通に一致します。
3行目になって、やっと違いが出てくるのです。

cmpコマンドの使い方としては、そんなところでしょうか。

image piyo2

一言でまとめるよ

まぁ「cmp」ってコマンドが出てきたら「2つのファイルをバイト単位で比較するときに使うんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク