diff
コマンドは、2つのファイルやディレクトリを比較し、異なる部分を表示するためのコマンドです。
ソースコードの変更点確認や設定ファイルの違いをチェックするときによく使われます。
構文(Syntax)
diff [オプション] FILE1 FILE2
diff [オプション] DIR1 DIR2
主なオプション一覧
オプション | 説明 | 使用例 |
---|---|---|
-u | 差分を「行単位」で見やすく統一フォーマットで表示 | diff -u old.txt new.txt |
-c | コンテキスト形式で差分を表示(周囲の数行を含む) | diff -c old.txt new.txt |
-i | 大文字・小文字の違いを無視 | diff -i file1.txt file2.txt |
-w | 空白文字の違いを無視 | diff -w file1.txt file2.txt |
-r | ディレクトリを再帰的に比較 | diff -r dir1 dir2 |
--side-by-side | 並列形式で比較結果を表示 | diff --side-by-side file1.txt file2.txt |
--suppress-common-lines | 同じ行を出力せず差分のみを表示(--side-by-side と併用可) | diff --side-by-side --suppress-common-lines file1.txt file2.txt |
実行例
例1: 2つのファイルの差分を統一フォーマットで表示
diff -u file1.txt file2.txt
出力例(変更行が -
と +
で表示される):
- Hello World
+ Hello Linux
例2: 空白の違いを無視して比較
diff -w file1.txt file2.txt
出力: 差分なし(空白だけの違いは無視)
例3: ディレクトリ全体を再帰的に比較
diff -r dir1 dir2
出力例:
Only in dir2: newfile.txt
Files dir1/config.cfg and dir2/config.cfg differ
例4: 並列形式で比較
diff --side-by-side file1.txt file2.txt
出力例(左右に比較表示):
Hello World | Hello Linux
Goodbye | Goodbye
例5: 権限不足でのエラー例
diff /etc/<shadow> backup_shadow
出力例:
diff: /etc/<shadow>: Permission denied
→ sudo
が必要なファイルでは権限エラーとなる。
関連コマンド
cmp
: ファイルをバイト単位で比較し、最初の違いを表示する。comm
: 2つのソート済みファイルを比較し、共通行と差分を表示する。patch
:diff
で作成した差分ファイルを元に変更を適用する。git diff
: Gitリポジトリ内の変更点を表示する。
備考
- GNU版とBSD版でオプションの挙動に差異がある場合がある。
- 権限が必要なファイル比較では
sudo
が必要。 diff
は/etc/group
や設定ファイル編集時の差分確認に役立つが、更新そのものはvi
などのエディタで行う。
参考
- manページ: https://man7.org/linux/man-pages/man1/diff.1.html
- GNU diffutils: https://www.gnu.org/software/diffutils/
コメント