diff コマンドは、テキスト ファイルを比較するために使用されます。このコマンドは、2 つのファイルとそれらの相違点を表示します。さまざまな記号を使用して、出力は、あるファイルを変更して他のファイルと同一にする方法を提案します。各記号には特別な意味があります。
小なり記号 (<) の後にある行は、2 番目のファイルには表示されないため、最初のファイルからその行を削除する必要があることを意味します。大なり記号 (>) の後に続く行は、2 番目のファイルから行を追加する必要があることを意味します。さらに、diff コマンドは、削除、追加、および変更操作によって影響を受ける各ファイルの行番号も示します。
構文
diff コマンドの構文は次のとおりです。
# diff {file name 1} {file name 2}
差分コマンド オプション
diff コマンドには、出力の性質を指定できるさまざまなオプションがあります。
オプション | 説明 |
---|---|
-b | 間隔の違いを無視します。 |
-i | 大文字と小文字の違いを無視します。 |
-t | 出力行でタブ文字を展開します。 |
-w | 間隔の違いとタブを無視します。 |
-c | コンテキストの 3 行で相違点のリストを表示します。 |
-u | より合理化された形式で表示される統合モードで結果を出力します。 |
diff コマンドの実行中に以下のエラーが発生した場合:
diff: command not found
選択したディストリビューションに従って、以下のパッケージをインストールしてみてください:
OS 分布 | コマンド |
---|---|
OS X | brew install diffutils |
Debian | apt-get インストール diffutils |
Ubuntu | apt-get インストール diffutils |
アルパイン | apk add diffutils |
Arch Linux | pacman -S diffutils |
カリ Linux | apt-get インストール diffutils |
CentOS | yum install diffutils |
Fedora | dnf インストール diffutils |
Raspbian | apt-get インストール diffutils |
diff コマンドの例
1. ファイルを比較します (`old_file` を `new_file` に変えるための変更をリストします):
# diff old_file new_file
2. 空白を無視してファイルを比較する:
# diff --ignore-all-space old_file new_file
3. ファイルを比較して、相違点を並べて表示:
# diff --side-by-side old_file new_file
4. ファイルを比較し、統一された形式で違いを示します (`git diff` で使用されます):
# diff --unified old_file new_file
5. ディレクトリを再帰的に比較します (異なるファイル/ディレクトリの名前と、ファイルに加えられた変更を表示します):
# diff --recursive old_directory new_directory
6. ディレクトリを比較して、異なるファイルの名前のみを表示:
# diff --recursive --brief old_directory new_directory
7. 存在しないファイルを空として扱い、2 つのテキスト ファイルの違いから Git 用のパッチ ファイルを作成します。
# diff --text --unified --new-file old_file new_file > diff.patch
8. diff はディレクトリを比較することもできます:
# diff dir1 dir2
これらのディレクトリ内の同じ名前のファイルを比較し、一方のディレクトリに表示され、他方のディレクトリには表示されないすべてのファイルを一覧表示します。ディレクトリ階層全体を再帰的に比較するには、-r オプションを使用します:
# diff -r dir1 dir2
これにより、すべての相違点の (場合によっては大規模な) レポートが生成されます。
結論
diff コマンドは、2 つのファイルを 1 行ずつ、または 2 つのディレクトリを比較します。テキスト ファイルを比較する場合、diff はそれらの相違点の詳細なレポートを生成できます。バイナリ ファイルの場合、diff は単にそれらが異なるかどうかを報告します。すべてのファイルについて、違いがない場合、diff は出力を生成しません。