cmpコマンド:ファイルの内容を比較するLinuxコマンド

Linuxでファイルを扱う際、ふたつのファイルが同じ内容かどうかを確認したい場面は意外と多いものです。たとえば、バックアップしたファイルが元のファイルと一致しているか確認したり、設定ファイルの変更内容を調べたりといった用途があります。

そんなときに便利なのが、cmpコマンドです。cmpコマンドは、2つのファイルをバイト単位で比較し、最初に異なる箇所を教えてくれるシンプルで強力なツールです。さらに、オプションを活用することで、詳細な差異の確認から効率的なスクリプト化まで幅広い用途に対応します。

本記事では、Linux初心者や中級者を対象に、cmpコマンドの基本的な使い方、主要なオプション、さらに実践的な応用例を詳しく解説します。cmpコマンドをマスターして、ファイル比較の作業を効率化しましょう!


cmpコマンドの基本的な使い方

まずは、cmpコマンドの基本的な使い方を学びましょう。

基本構文

以下がcmpコマンドの基本構文です:

cmp [オプション] ファイル1 ファイル2
  • ファイル1:比較する最初のファイル
  • ファイル2:比較対象の2つ目のファイル
  • [オプション]:動作をカスタマイズするためのオプション(後述)

cmpコマンドは、2つのファイルをバイト単位で比較し、最初に異なる箇所があればその情報を標準出力に表示します。一致している場合は何も出力しません。シンプルな動作でありながら、非常に効率的です。

例1:ファイルが一致する場合

まず、以下のような2つのファイルを用意します。

file1.txt

Hello, World!

file2.txt

Hello, World!

この2つのファイルを比較してみましょう:

cmp file1.txt file2.txt

結果:

(何も出力されない)

何も出力されない場合、これは2つのファイルが完全に一致していることを意味します。簡潔な動作で、ファイル一致の確認作業をスムーズに行えます。

例2:ファイルが異なる場合

次に、異なる内容のファイルを用意します。

file1.txt

Hello, World!

file2.txt

Hello, Linux!

再び比較してみます:

cmp file1.txt file2.txt

結果:

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

この出力は、8バイト目(1行目)から違いがあることを示しています。具体的な位置が表示されるため、差異の特定が容易です。


cmpコマンドの主要なオプション

cmpコマンドには、比較結果を見やすくするための便利なオプションがいくつか用意されています。ここでは、特に役立つオプションを紹介します。

-lオプション:すべての相違点を表示

-lオプションを使うと、違いがあるすべてのバイトを詳細に表示します。

cmp -l file1.txt file2.txt

結果:

     8   87 154

この出力は、以下を意味します:

  • 8:異なる位置(8バイト目)
  • 87:file1.txtの該当バイト値(ASCIIコード)
  • 154:file2.txtの該当バイト値(ASCIIコード)

このオプションを使うと、単一の相違点だけでなく、すべての差異を把握できます。

-bオプション:ASCII文字として表示

-bオプションは、異なるバイトをASCII文字としても表示します。これにより、視覚的に文字の違いを確認しやすくなります。

cmp -b file1.txt file2.txt

結果:

file1.txt file2.txt differ: byte 8, line 1 is 87 W 154 L

このように、文字としての違いが明確になるため、特にテキストファイルの比較で便利です。

-nオプション:比較するバイト数を制限

-nオプションを使うと、比較するバイト数を指定できます。

cmp -n 5 file1.txt file2.txt

この例では、最初の5バイトだけを比較します。部分的な比較を行いたい場合に有用です。

--ignore-initialオプション:特定バイトをスキップ

特定のバイト数をスキップして比較を始めたい場合は、--ignore-initialオプションを使用します。

cmp --ignore-initial=5 file1.txt file2.txt

この例では、最初の5バイトを無視して比較します。特定の範囲にフォーカスして比較したい場合に適しています。


cmpコマンドの応用

ここからは、cmpコマンドを実際の作業でどのように活用できるか、具体例を挙げて解説します。

応用1:スクリプトでファイル一致をチェック

cmpコマンドをシェルスクリプトで使用すれば、自動化されたファイルチェックが可能です。以下は、2つのファイルが一致しているかどうかを確認するスクリプトの例です:

#!/bin/bash

file1="file1.txt"
file2="file2.txt"

if cmp -s "$file1" "$file2"; then
    echo "ファイルは一致しています。"
else
    echo "ファイルは異なります。"
fi

このスクリプトでは、cmp -sオプションを使用しています。このオプションは、結果を出力せずに終了ステータスだけを返すため、スクリプト内での条件分岐に最適です。バックアップスクリプトやデータ検証スクリプトの構築に役立ちます。

応用2:バイナリファイルの比較

cmpコマンドは、テキストファイルだけでなくバイナリファイルの比較にも使用できます。

たとえば、2つの画像ファイルが完全に一致しているか確認する場合:

cmp image1.png image2.png

異なる場合は、最初の違いが出力されます。この方法は、データの完全性を確認する際に非常に便利です。たとえば、データベースのバックアップやバイナリログの検証など、重要な場面で使用できます。

応用3:バックアップファイルの整合性チェック

バックアップファイルが正しく保存されているか確認する場合にもcmpコマンドが使えます。以下は、バックアップスクリプトの例です:

#!/bin/bash

original="important_data.txt"
backup="/backup/important_data.txt"

if cmp -s "$original" "$backup"; then
    echo "バックアップファイルは正常です。"
else
    echo "バックアップファイルに問題があります!"
fi

このスクリプトを定期的に実行することで、バックアップの整合性を簡単にチェックできます。定期的な検証により、データ損失のリスクを軽減できます。


まとめ

本記事では、Linuxのcmpコマンドについて詳しく解説しました。

  • 基本的な使い方:ファイルをバイト単位で比較し、最初の違いを表示。
  • 主要なオプション-l-b-nなどのオプションで詳細な比較結果を取得可能。
  • 実践的な応用:スクリプトでの自動化やバイナリファイルの比較、バックアップの整合性チェックなど。

cmpコマンドはシンプルですが、非常に強力なツールです。特にファイルの整合性確認やトラブルシューティングの場面で役立ちます。ぜひ日常の作業に取り入れてみてください!

Linuxの世界には、まだまだ便利なコマンドがたくさんあります。今後も基本コマンドを紹介していくので、お楽しみに!

コメント

タイトルとURLをコピーしました