Linuxで作業をしていると、

「2つのファイルでどこが違うのか」
「設定ファイルを変更したけど、元に戻したい箇所が分からない」

といった状況に直面することがあります。このような時に役立つのが、linuxのファイル比較を行えるdiffコマンドです。しかし、単純にdiffコマンドを実行しただけでは、出力が分かりにくいと感じる方も多いのではないでしょうか。

linux ファイル比較 diffコマンドの基本と応用を徹底解説
くらべる広場・イメージ

この記事では、基本的なlinux ファイル比較 コマンドの使い方だけでなく、linux diff 差分のみを表示させる方法や、diff コマンド 差分のみ見やすくするテクニックも解説します。さらに、linux ファイル比較 ディレクトリ全体の比較や、linux ファイル比較 バイナリファイルの扱い方、便利なlinux ファイル比較 ツールについても触れ、linux ファイル比較 一致の確認方法まで網羅的にご紹介します。

この記事でわかること

ポイント
  • diffコマンドの基本的な概念と使い方
  • 目的に合わせた多様な比較オプション
  • テキスト以外のファイルやディレクトリの比較方法
  • 比較作業を効率化する便利なツール

linux ファイル 比較 diffの基本的な使い方

内容
  • Linuxのdiffとは?
  • Cmpとdiffの違いは何ですか?
  • 基本的なlinux ファイル比較 コマンド
  • ファイル比較で一致を確認する方法
  • 差分のみを抽出するには
  • diff コマンドで差分のみ見やすくする技

Linuxのdiffとは?

まず結論から言うと、diffコマンドは、2つのテキストファイルの内容を比較し、その「差分(difference)」を行単位で表示するための基本的なLinuxコマンドです。システム管理者や開発者にとって、日常的に使用する重要なツールの一つと言えるでしょう。

なぜなら、プログラムのソースコードを修正した際の変更箇所の確認や、設定ファイルを更新する前後の違いを把握するなど、ファイルの変更点を正確に特定する作業は非常に頻繁に発生するためです。diffコマンドを使えば、どこが追加され、どこが削除・変更されたのかを一目で確認できます。

Linuxのdiffとは?
くらべる広場・イメージ

例えば、file1.txtfile2.txtという2つのファイルがあるとします。これらの差分を確認するには、ターミナルで以下のように入力します。

$ diff file1.txt file2.txt

出力結果は、ファイル間の違いを示す特別な形式で表示されます。例えば、「3c3」と表示された場合、これは「file1の3行目を、file2の3行目に変更(change)した」という意味になります。他にも、行が追加された場合は「a(add)」、削除された場合は「d(delete)」という記号が使われます。この基本的な見方を覚えることが、diffコマンドを使いこなす第一歩です。

Cmpとdiffの違いは何ですか?

Linuxにはdiffと似たコマンドとしてcmpがあります。この二つの最大の違いは、diffが行単位でテキストファイルの違いを比較するのに対し、cmpはバイト単位でファイルを比較する点です。

この特性の違いから、それぞれのコマンドには得意な用途があります。diffコマンドは、前述の通りソースコードや設定ファイルなど、人間が読むことを前提としたテキストファイルの内容の差分を確認するのに非常に適しています。出力も、どの行がどう変わったのかが分かりやすい形式になっています。

Cmpとdiffの違いは何ですか?
くらべる広場・イメージ

一方で、cmpコマンドはファイルを先頭から1バイトずつ比較し、最初に違いが見つかった時点でそのバイト位置と行番号を報告して終了します。このため、画像ファイルや実行ファイルといったバイナリファイルが完全に同一であるかどうかを高速に検査するのに向いています。

diffとcmpの比較表

項目diffコマンドcmpコマンド
比較単位行単位バイト単位
主な用途テキストファイルの差分確認バイナリファイルの同一性確認
出力内容行の追加・削除・変更の詳細最初に異なるバイトの位置と行番号
処理速度ファイル全体を走査するため比較的遅い差分発見次第終了するため非常に速い

このように、どちらのコマンドも「比較」を行いますが、その目的と仕組みが根本的に異なります。用途に応じて適切に使い分けることが重要です。

基本的なlinux ファイル比較 コマンド

diffコマンドは、オプションを指定しない基本的な使い方でも十分に機能しますが、オプションを活用することで出力形式をカスタマイズし、より多くの情報を得ることが可能になります。ここでは、特によく使われる基本的な出力形式を3つ紹介します。

基本的なlinux ファイル比較 コマンド
くらべる広場・イメージ

デフォルト形式

オプションなしで実行した場合の形式です。変更の種類(追加、削除、変更)と行番号、そして差分のある行の内容が表示されます。シンプルですが、慣れないと少し読みにくいかもしれません。

-c (コンテキスト形式)

-cオプションを指定すると、差分のある行の前後にある、変更されていない行(コンテキスト)も合わせて表示します。これにより、変更点がどのような文脈で行われたのかを把握しやすくなります。差分箇所には!+-といった記号が付き、視覚的にも分かりやすくなります。

$ diff -c old_file.txt new_file.txt

*** old_file.txt    2025-08-09 12:00:00.000000000 +0900
--- new_file.txt    2025-08-09 12:01:00.000000000 +0900
***************
*** 1,3 ****
  unchanged line 1
! changed line
  unchanged line 3
--- 1,3 ----
  unchanged line 1
! newly changed line
  unchanged line 3

-u (ユニファイド形式)

-uオプションは、コンテキスト形式をよりコンパクトにした「統一形式」で表示します。この形式は、差分情報をまとめて表示するため、非常に見やすいのが特徴です。削除された行は-、追加された行は+で示されます。この形式は、パッチファイルの作成にも利用されるなど、開発現場で広く使われています。

$ diff -u old_file.txt new_file.txt

--- old_file.txt    2025-08-09 12:00:00.000000000 +0900
+++ new_file.txt    2025-08-09 12:01:00.000000000 +0900
@@ -1,3 +1,3 @@
 unchanged line 1
-changed line
+newly changed line
 unchanged line 3

ちなみに、-C 行数-U 行数のようにオプションに数字を付けると、表示する前後のコンテキスト行数を指定することもできます。

ファイル比較で一致を確認する方法

ファイルの差分詳細を知る必要はなく、単純に2つのファイルが「一致するか、しないか」だけを素早く確認したい場面もあります。そのような場合には、-sオプションや-qオプションが非常に役立ちます。

これらのオプションは、ファイル内容を比較するものの、差分の詳細を出力しないため、スクリプト内でファイルの同一性をチェックする際などにも便利です。

linux ファイル比較で一致を確認する方法
くらべる広場・イメージ

-s (--report-identical-files) オプション

このオプションを使用すると、ファイルが完全に一致している場合に、その旨をメッセージで表示します。ファイルが異なる場合は、通常のdiffと同様に差分を出力します。

# ファイルが一致する場合
$ diff -s file1.txt file1.txt
Files file1.txt and file1.txt are identical

# ファイルが異なる場合
$ diff -s file1.txt file2.txt
(差分の詳細が出力される)

-q (--brief) オプション

-qオプションは、よりシンプルです。ファイルに違いがある場合のみ「Files ... and ... differ」というメッセージを表示し、ファイルが一致している場合は何も出力しません。差分の有無だけを判定したい場合に最適です。

# ファイルが一致する場合
$ diff -q file1.txt file1.txt
(何も出力されない)

# ファイルが異なる場合
$ diff -q file1.txt file2.txt
Files file1.txt and file2.txt differ

注意点
これらのオプションは、あくまで差分の「有無」を報告するためのものです。-qオプションでは、どのような差分があるのかは一切表示されないため、詳細な確認が必要な場合はこのオプションを使わないでください。

差分のみを抽出するには

長いファイルの中で、変更された箇所だけをピンポイントで確認したいことはよくあります。diffコマンドのデフォルト出力では変更されていない行も含まれるため、変更箇所を探すのが大変な場合があります。

このような課題を解決するのが、-yオプションと--suppress-common-linesオプションの組み合わせです。この方法を使えば、差分のある行だけを抜き出して表示させることができます。

linux diffで差分のみを抽出するには
くらべる広場・イメージ

まず、-yオプションは、2つのファイルを左右に並べて(サイドバイサイド形式で)表示する機能です。これだけでも視覚的に比較しやすくなります。そして、--suppress-common-linesオプションを追加すると、内容が一致している共通の行が非表示になります。

以下に具体的なコマンド例を示します。

$ diff -y --suppress-common-lines file1.txt file2.txt

Hello World        | Hello Linux
This is a test.          <
                  > This is a pen.

この出力では、変更があった行(|)、file1にのみ存在する行(<)、file2にのみ存在する行(>)だけが表示されます。これにより、膨大な量のテキストの中から変更点だけを素早く見つけ出すことができ、作業効率が大幅に向上します。

diff コマンドで差分のみ見やすくする技

前述の通り、diffコマンドで差分のみを表示することは可能ですが、さらにいくつかのテクニックを組み合わせることで、表示を格段に見やすくできます。特に、視覚的な分かりやすさを追求することで、コードレビューやデバッグの効率を上げることが可能です。

diff コマンドで差分のみ見やすくする技
くらべる広場・イメージ

ここでは、代表的な2つのテクニックを紹介します。

-W (--width) オプションで表示幅を調整する

-y(サイドバイサイド)オプションを使うと、デフォルトではターミナルの表示幅に合わせて出力が調整されますが、1行が長いファイルの場合、途中で改行されてしまい見にくくなることがあります。そこで-Wオプションを使い、表示幅(カラム数)を明示的に指定します。

# 表示幅を160カラムに設定
$ diff -y -W 160 --suppress-common-lines long_line_file1.txt long_line_file2.txt

これにより、行の途中で折り返されることなく、左右の対応関係を正確に把握できるようになります。

colordiffツールで色付けする

diffコマンドの出力は通常モノクロですが、colordiffというツールを導入すると、差分に自動で色が付き、劇的に見やすくなります。追加された行が緑、削除された行が赤といった具合にハイライトされるため、直感的に変更点を認識できます。

colordiffのインストールと使い方

  1. インストール (Ubuntu/Debian系の場合):
    sudo apt-get install colordiff
  2. 使い方:
    diffコマンドの代わりにcolordiffコマンドを使うだけです。
    オプションはdiffと全く同じものが使えます。
    colordiff -u file1.txt file2.txt

WindowsのWinMergeやBeyond CompareのようなGUIツールに慣れている方でも、このcolordiffを使えば、ターミナル上での比較作業がかなり快適になりますよ。ぜひ試してみてください。

linux ファイル 比較 diffの応用テクニック

内容
  • diffコマンドでディレクトリ全体を比較する
  • バイナリを扱う方法
  • 便利なGUIのlinux ファイル比較 ツール
  • まとめ:linuxでのファイル比較のdiffコマンドの要点

diffコマンドでディレクトリ全体を比較する

diffコマンドの強力な機能の一つに、ファイルだけでなくディレクトリ全体を比較する能力があります。これは、-r(--recursive)オプションを使用することで実現できます。

linux ファイル比較でディレクトリを扱う
くらべる広場・イメージ

この機能は、プロジェクトのフォルダ構成ごとバックアップと比較したり、異なるバージョンのソースコードツリーの変更点を洗い出したりする際に非常に便利です。-rオプションを付けると、diffは指定された2つのディレクトリ内を再帰的に探索し、対応するファイル同士を比較していきます。

# dir1とdir2ディレクトリを再帰的に比較
$ diff -r dir1 dir2

このコマンドを実行すると、以下のような情報が出力されます。

  • ファイル名の異なるもの:
    片方のディレクトリにしか存在しないファイルが報告されます。
  • 内容の異なるファイル:
    両方のディレクトリに存在するが、内容が異なるファイルの差分が表示されます。

ディレクトリ比較で便利な合わせ技

ディレクトリ比較では、他のオプションと組み合わせることで、より効率的に情報を得られます。

  • -rq: -r-qを組み合わせると、差分の詳細を表示せず、異なるファイル名や片方にしか存在しないファイル名だけをリストアップできます。
    「どのファイルが違うのか」だけを素早く知りたい場合に最適です。
  • -x "パターン": -xオプションを使うと、比較対象から特定のファイルやディレクトリを除外できます。
    例えば、-x "*.log"とすれば、ログファイルの比較をスキップできます。

これらのテクニックを駆使することで、大規模なディレクトリ構造の比較も効率的に行うことが可能です。

バイナリを扱う方法

前述の通り、diffコマンドは主にテキストファイルの比較に特化していますが、バイナリファイルを比較しようとするとどうなるのでしょうか。結論から言うと、diffコマンドでもバイナリファイルの比較は可能ですが、限定的な情報しか得られません

linux ファイル比較でバイナリを扱う方法
くらべる広場・イメージ

diffでバイナリファイルを比較した場合、通常は以下のようなメッセージが表示されるだけです。

$ diff image1.jpg image2.jpg
Binary files image1.jpg and image2.jpg differ

これは「2つのバイナリファイルは異なります」と報告しているだけで、どこがどのように違うのかは分かりません。そのため、バイナリファイルの比較には、バイト単位で比較を行うcmpコマンドを使用するのが一般的です。

cmpを使うと、最初に異なっていたバイトの位置と行数を教えてくれます。さらに-lオプションを付ければ、異なる全てのバイトの位置と、それぞれのファイルでの値(8進数)をリストアップしてくれるので、より詳細な分析が可能です。

豆知識:diffでバイナリをテキストとして比較する

どうしてもdiffでバイナリファイルの中身を無理やり比較したい場合、-a(--text)オプションを使う方法があります。このオプションは、全てのファイルをテキストファイルとして扱い、行ごとに比較を試みます。文字化けしたような出力になることが多いですが、ファイルのどのあたりが変化しているのか、大まかな見当を付けるのに役立つことがあります。

便利なGUIのlinux ファイル比較 ツール

CUI(コマンドラインインターフェース)での操作は強力ですが、時にはGUI(グラフィカルユーザーインターフェース)を使って視覚的にファイルの差分を確認したい場合もあるでしょう。特に複雑な差分のマージ作業などでは、GUIツールの方が直感的に操作できることが多いです。

幸い、Linuxには優れたGUIのファイル比較ツールが数多く存在します。ここでは代表的なものをいくつか紹介します。

便利なGUIのlinux ファイル比較 ツール
くらべる広場・イメージ

代表的なGUI比較・マージツール

ツール名特徴インストール
(Ubuntu/Debian系)
Meldシンプルで直感的な操作性が人気。
2つまたは3つのファイル・ディレクトリ比較に
対応し、マージ機能も強力。
sudo apt-get install meld
KDiff3高機能な比較・マージツール。
特に3-wayマージ機能に定評があり、
複雑なバージョン管理のコンフリクト解決に役立つ。
sudo apt-get install kdiff3
Difftastic厳密にはGUIではありませんが、
プログラミング言語の構文を理解して
差分を表示する新しいタイプのツール。
変数のリネームなどを「変更なし」と判断するなど、
賢い比較が可能。
(公式サイトの方法でインストール)

これらのツールは、diffコマンドとは異なるアプローチでファイル比較を支援してくれます。コマンドラインでの作業とGUIツールを適切に使い分けることで、Linux上での開発や管理作業をさらに快適に進めることができるでしょう。

まとめ:linuxでのファイル比較のdiffコマンドの要点

この記事では、Linuxにおけるファイル比較の基本となるdiffコマンドについて、基本的な使い方から応用的なテクニックまで幅広く解説しました。最後に、本記事の重要なポイントをリストで振り返ります。

  • diffは2つのファイルを行単位で比較し差分を表示するコマンド
  • テキストファイルの変更点を確認するのに適している
  • cmpはファイルをバイト単位で比較しバイナリファイルの同一性確認に使う
  • -cオプションは変更箇所の前後を含めて表示するコンテキスト形式
  • -uオプションは差分をまとめて見やすく表示するユニファイド形式
  • -sオプションはファイルが一致する場合にメッセージを表示する
  • -qオプションはファイルが異なる場合のみメッセージを表示する
  • -Wオプションで横並び表示の幅を調整できる
  • colordiffツールを使うと出力に色が付き視認性が向上する
  • -rオプションでディレクトリ内を再帰的に比較できる
  • -xオプションで特定のファイルを比較対象から除外できる
  • バイナリ比較はdiffよりcmpの方が詳細な情報が得られる
  • MeldやKDiff3など高機能なGUI比較ツールも存在する
  • 目的や状況に応じてCUIとGUIのツールを使い分けることが効率化の鍵

PC・家電の記事一覧へ

この記事を書いた人
userimg
とっしー
運営者のとっしーです。 過去の買い物での数々の失敗から、「後悔する人を一人でも減らしたい!」という想いでこのブログを始めました。 徹底的なリサーチと正直なレビューで、あなたの「最高の選択」を全力でサポートします!
ブログランキング・にほんブログ村へ
人気ブログランキング