【Linuxコマンド】diff コマンドの使い方とよく使うオプション

概要

 
Linux の diff コマンド は、指定した 2 つのファイルやディレクトリの差分を行ごとに表示するコマンドです。
設定ファイルや運用シェルを編集する際に、変更前に取得したバックアップとの差分を確認する、といった用途でよく使われます。
 

オプションを指定することで、ディレクトリ配下のファイルを再帰的に比較したり、ユニファイド形式サイドバイサイド形式など、見やすいフォーマットで差分を表示することもできます。
 

比較表示の記号の意味(通常形式)
< FILE1 からの行
> FILE2 からの行

 

フォーマット

 

diff [オプション] ファイル1 ファイル2
diff [オプション] ディレクトリ1 ディレクトリ2

 

引数に 2 つのファイルを指定すると、それぞれのファイルを行単位で比較し、差分だけを表示します。
ディレクトリ同士を指定した場合は、中のファイルを比較してどのファイルが異なっているかを確認できます。

 

よく使うコマンド例

 

・ファイルを比較する(基本的な使い方)。

diff before.txt after.txt

最もシンプルな使い方です。
before.txtafter.txt の差分が、追加・削除行ごとに表示されます。
設定ファイルの変更点を確認したり、スクリプト修正前後を比較するのに便利です。

 

・ユニファイド形式(パッチ向け)で差分を表示する。

diff -u before.conf after.conf

-u オプションを付けると、いわゆるユニファイド形式で差分が表示されます。
パッチファイル(.patch)の作成や Git の diff に近い形式で確認したいときに使います。

 

・サイドバイサイド形式で左右に並べて比較する。

diff -y before.txt after.txt

-y オプションは、左に before、右に after を表示するサイドバイサイド形式です。
端末幅が十分にある場合、視覚的に変更箇所を追いやすくなります。

 

・空白文字の違いを無視して差分を表示する。

diff -w before.txt after.txt

-w オプションを付けると、空白文字(スペース・タブ)の違いを無視して比較します。
インデントやスペース調整だけの変更を無視して、本質的な変更点だけを確認したいときに便利です。

 

・大文字・小文字の違いを無視して比較する。

diff -i before.txt after.txt

-i オプションは、大文字・小文字の違いを無視して比較します。
設定ファイルなどで、ケースの違いを気にせず内容を比較したい場合に使います。

 

・ディレクトリ配下のファイルを再帰的に比較する。

diff -r dir_old dir_new

-r オプションを付けると、ディレクトリ配下のファイルを再帰的に比較します。
アプリケーションのバージョン違いのディレクトリや、バックアップディレクトリとの違いを確認したいときに便利です。

 

・差分だけでなく、どのファイルが追加/削除されたかも表示する。

diff -rq dir_old dir_new

-q オプションを付けると、「ファイルが異なっているかどうか」だけを簡潔に表示します。
どのファイルが新規・削除・変更されたかをざっくり把握する用途に向いています。

 

・stderr を含めた差分をファイルに保存してレビュー用に残す。

diff -u before.conf after.conf > config.diff

ユニファイド形式の差分をファイルに書き出す例です。
メールでレビュー依頼を出したり、後から差分を適用するためのパッチとして保存しておくことができます。

 

実務でのよくある使いどころ

 

・設定ファイルの変更点確認
/etc/ 配下の設定ファイルを修正する前にバックアップを取り、
diff old.conf new.confどこを変えたのかを明確にしておくと、トラブル時の切り戻しがしやすくなります。
 

・シェルスクリプトのバージョン差分確認
運用スクリプト(cron で動かしているバッチなど)の修正時に、
diff -u で差分を取ることで、レビューや Git コミットコメントとあわせて内容を把握しやすくなります。
 

・テスト環境と本番環境の設定差分チェック
テスト環境と本番環境の設定ファイルやディレクトリ構成を比較し、
意図しない差分がないかを確認する用途でも diff はよく使われます。
 

・アプリケーションリリース前後の差分確認
リリース用ディレクトリと稼働中ディレクトリを比較し、
変更ファイルが想定どおりかを確認してから本番切り替えを行う、といったチェックにも利用できます。
 

オプション(よく使うオプションのみ)

 

short optionlong optiondescription
-uユニファイド形式で差分を表示する(パッチ作成などに使う形式)
-y左右に並べるサイドバイサイド形式で差分を表示する
-r--recursiveディレクトリ配下を再帰的に比較する
-q--briefファイルが異なるかどうかだけを簡潔に表示する
-w--ignore-all-space全ての空白文字の違いを無視して比較する
-b--ignore-space-change連続する空白の長さの違いを無視して比較する
-i--ignore-case大文字と小文字の違いを無視して比較する
-s--report-identical-filesファイルが同一である場合もその旨を表示する
-cコンテキスト形式で差分を表示する(古くからあるパッチ形式)
--color差分の種類ごとに色を付けて表示する
--normal通常形式で差分を表示する(他の形式指定を無効化する)
--helpdiff コマンドの使い方(ヘルプ)を表示して終了する
--versiondiff コマンドのバージョン情報を表示して終了する
 

ここでは、diff コマンドでよく使う主なオプションを TablePress の表にまとめています。
比較形式や無視する差分の条件など、組み合わせ次第でさまざまな見え方に調整できます。

より詳細なオプションや表示形式については、Linux の
diff(1) マニュアルページ(英語)
などの公式ドキュメントもあわせて参照してください。

ブログランキングに参加しています。クリックして応援していただけると嬉しいです。

人気ブログランキング
ブログランキング・にほんブログ村へ
にほんブログ村