この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:atom
更新日時:2026-05-17 06:14:10

タイトル: diff ファイルの差分抽出

本稿はLinuxコマンドであるdiffの説明をします。2つのファイル、または2つのディレクトリの差分を抽出する基本コマンドです。

diffとは

指定した2つのファイルの差分を抽出することができるコマンドです。設定ファイルの変更前後の比較、修正前後のソース比較、本番/開発環境の差分確認などで頻繁に使います。

基本

$ diff file1 file2

違いが無ければ何も出力されません。違いがあれば、行番号と差分行が表示されます。

実行例

$ diff -u file1 file2

-uオプションを付与することで差分がわかりやすく表示される(unified形式、gitやpatchで一般的)。

-yを付与すると2つのファイルを横並びに比較することができる。

よく使うオプション

オプション意味
-uunified形式で表示(最も読みやすい)
-y横並びで2列表示
-i大文字小文字を区別しない
-w空白文字の違いを無視
-B空行を無視
-q差分の有無だけ報告(内容は出さない)
-rディレクトリ同士を再帰的に比較
--brief-q と同じ

ディレクトリ同士の比較

$ diff -r dir1 dir2
$ diff -rq dir1 dir2  # ファイル名と"差分あり/なし"だけ

パッチを作る・当てる

差分をファイル化(パッチ)して、別の場所で適用できます。

# パッチ作成
$ diff -u old new > my.patch

# パッチ適用
$ patch old < my.patch
$ patch -p1 < my.patch  # ディレクトリ階層をスキップ

使用例

# 設定ファイルの変更前後を確認
$ diff -u nginx.conf.bak nginx.conf

# 空白の違いを無視して本質的差分だけ
$ diff -uw before.txt after.txt

# ディレクトリ全体を比較し、違いのあるファイル名だけ抽出
$ diff -rq /etc /etc.backup

関連コマンド

  • cmp: バイナリレベルで一致するか確認
  • vimdiff / vim -d: Vimで対話的に差分編集
  • git diff: gitリポジトリ内の差分
  • colordiff: 色付き表示版(要インストール)

注意点

  • 改行コード(LF/CRLF)の違いも差分として出る。気になる場合は dos2unix で揃える
  • 大きなファイル同士の diff -y は読みにくい。-u の方が実用的
  • 巨大ディレクトリ同士の diff -r は時間がかかる。-q で軽量化

関連