概要
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
終了コード
スクリプトで分岐処理を行う際の参考にしてください。
コード | 意味 |
---|---|
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オプションを使用してください。詳細な内容は出力されません。