ホーム > テキスト処理・検索 > diff

diff: ファイル/ディレクトリの差分比較ガイド

2つの対象の差分を行単位で比較し、人間が読みやすい形式(統合/コンテキスト/並列表示)で出力します。パッチ作成、コードレビュー、設定変更の比較に広く使用されます。

概要

diffは、2つのファイルまたはディレクトリの変更点を比較し、どの行が追加/削除/修正されたかを表示します。出力形式は、統合(unified)、コンテキスト(context)、並列(side-by-side)などから選択でき、空白や大文字小文字といった比較の感度を調整できます。

主な特徴

  • 行単位の比較と人間が読みやすい形式の提供
  • ディレクトリ間の再帰比較が可能 (-r)
  • 空白/大文字小文字/空行などの多様な無視ルール
  • パッチ(.patch)作成に適した統合形式(-u)のサポート
  • 大容量ファイル比較のパフォーマンス最適化オプションの提供

活用シナリオの例

  • コードレビュー: 変更されたファイルのみをパッチとして抽出
  • 設定ファイルの変更追跡: デプロイ前後での設定比較
  • バックアップ/スナップショット比較: 特定時点間の差分確認
  • ドキュメント/データ前処理段階での意図しない変更の検出
  • セキュリティチェック: 外部からデプロイされたバイナリ/スクリプトの疑わしい変更の確認

diff出力形式

diffの出力形式は、最初のファイルを2番目のファイルに変更するための指示を表します。

  • `a` (add): 最初のファイルにない行が2番目のファイルに**追加**されました。(例: `1a2`)
  • `c` (change): 両方のファイルで該当する行が**変更**されました。(例: `1c2`)
  • `d` (delete): 最初のファイルにある行が2番目のファイルから**削除**されました。(例: `1d2`)

主要オプション

よく使用されるオプションを用途別にグループ化しました。

1) 基本動作と出力形式

2) 比較範囲/対象の指定

3) 出力制御/無視ルール

4) ヘルプ/バージョン

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`diff` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

よく使う比較シナリオを例としてまとめました。

統合フォーマットでパッチを生成

diff -u old.conf new.conf > change.patch

ディレクトリの再帰比較

diff -ruN ./v1 ./v2

空白の差分を無視して比較

diff -uw src_old.c src_new.c

並列表示 + 共通行の非表示

diff -y --suppress-common-lines a.txt b.txt

終了コード

スクリプトで分岐処理を行う際の参考にしてください。

diff終了ステータス値
コード 意味
0 2つの対象が同一
1 差分あり
2 エラー発生(使用法エラー/ファイルアクセス不可など)

インストール

ほとんどのディストリビューションにデフォルトで含まれていますが、ない場合はdiffutilsパッケージをインストールしてください。

Debian/Ubuntu

sudo apt update && sudo apt install -y diffutils

RHEL/CentOS/Fedora

sudo dnf install -y diffutils

Arch Linux

sudo pacman -S --needed diffutils

openSUSE

sudo zypper install -y diffutils

ヒントと注意事項

現場でよく見落とされがちなポイントです。

  • パッチフォーマットは通常-uを標準として使用します。gitも内部的に同様の統合フォーマットを使用します。
  • 空白処理オプション(-w, -b, -B)を濫用すると、実際に意味のある変更が隠れてしまう可能性があります。
  • Windows/Linuxの改行コードの違いは、`--strip-trailing-cr`で正規化すると比較が容易になります。
  • ディレクトリ比較時には、-rと-x/-X(除外ルール)を併用して不要なファイルをフィルタリングしてください。
  • 本当に高速な存在確認のみを行う場合は、-qオプションを使用してください。詳細な内容は出力されません。

関連するコマンド

機能的に類似しているか、よく一緒に使われるコマンドです。


同じカテゴリのコマンド