目次
diff
コマンドとは?
diff
コマンドは、ファイルやディレクトリの内容を比較し、違いを表示するツールです。
比較結果をテキストとして出力するため、コードの変更点や設定ファイルの違いを確認する際に役立ちます。
主に以下の用途で使用されます:
- 設定ファイルの差分確認
- コードの修正点の確認
- バックアップや複製ファイルの変更点の検証
コマンド構文
diff [オプション] ファイル1 ファイル2
またはディレクトリ比較の場合:
diff [オプション] -r ディレクトリ1 ディレクトリ2
- ファイル1、ファイル2: 比較対象の2つのファイル。
- ディレクトリ1、ディレクトリ2: 比較対象の2つのディレクトリ。
主なオプション一覧
オプション | 説明 |
---|---|
-c | 差分をコンテキスト形式で出力 |
-u | 差分をユニファイド形式(Gitなどで使われる形式)で出力 |
-i | 大文字と小文字を区別しない |
-r | ディレクトリ比較を再帰的に実行 |
-q | ファイルやディレクトリの違いを簡易的に表示(変更点は詳細に表示しない) |
-s | 同一のファイルも「同じ内容」として出力 |
-y | サイドバイサイド形式(左右並べて比較)で出力 |
–suppress-common-lines | サイドバイサイド形式で、差異がない行を非表示 |
使用例と出力結果
1. 基本的なファイルの差分確認
例: 2つのファイルの差分を比較
diff file1.txt file2.txt
出力例:
3c3
< Hello World
---
> Hello Linux
解説:
3c3
は「3行目を変更する」という意味。<
は元のファイル(file1.txt)の内容を示し、>
は比較対象の内容(file2.txt)を示します。
2. ユニファイド形式で出力
例: Gitでよく使われる形式で出力
diff -u file1.txt file2.txt
出力例:
--- file1.txt 2024-11-30 10:00:00
+++ file2.txt 2024-11-30 10:01:00
@@ -1,3 +1,3 @@
Line 1
Line 2
-Hello World
+Hello Linux
解説:
---
は元のファイル、+++
は比較対象を示します。@@
行には変更箇所の範囲が記載されます。
3. 大文字・小文字を無視して比較
例: 大文字小文字の違いを無視する
diff -i file1.txt file2.txt
解説:
-i
オプションにより、「Hello」と「HELLO」の違いを無視します。
4. ディレクトリの比較
例: ディレクトリ全体を再帰的に比較
diff -r dir1 dir2
出力例:
Only in dir1: unique_file.txt
Files dir1/common_file.txt and dir2/common_file.txt differ
解説:
Only in dir1
は、dir1
にのみ存在するファイルを示します。Files ... differ
は異なる内容のファイルを示します。
5. サイドバイサイド形式で比較
例: 左右に並べて比較
diff -y file1.txt file2.txt
出力例:
Line 1 Line 1
Hello World | Hello Linux
解説:
- 差異は
|
記号で表示されます。視覚的に見やすくなるため、簡単な比較には便利です。
応用例
1. 差分をHTML形式で出力
例: colordiff
で視覚的に差分を表示
diff -u file1.txt file2.txt | colordiff
解説:
colordiff
を使用することで、変更箇所を色分けして表示できます(別途インストールが必要)。
2. 差分結果をパッチファイルに保存
例: 差分をパッチファイルとして保存
diff -u original.txt modified.txt > changes.patch
解説:
生成したパッチファイルを使って、patch
コマンドで元のファイルに変更を適用できます。
3. バイナリファイルの比較
例: バイナリファイルの簡易比較
diff -q binary1.bin binary2.bin
解説:
-q
オプションにより、バイナリファイルが異なるかどうかを確認できます。詳細な差分は出力されません。
注意点
- ファイルの整形に注意
diff
コマンドは、空白や改行の違いも差分として検出します。事前に整形ツール(例:sed
,awk
)を使って内容を揃えると便利です。 - 大規模な差分には適していない
巨大なファイルやディレクトリを比較する際は、より効率的なrsync
やバージョン管理システム(Gitなど)を検討してください。
シェルスクリプトと自動化の基礎:sedコマンド詳細
Linuxで効率的なシステム管理を行うためには、シェルスクリプトや自動化ツールを理解することが重要です。本記事では、bash、cron、at、awk、sedを使った自動化やテキス…
【コマンド詳細】sedコマンドの使い方とオプションまとめ
sed コマンドとは? sed (Stream Editor) は、LinuxやUNIXシステムで使われるストリーム形式のテキストエディタです。ファイルを直接開くことなく、以下のようなテキス…