このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:差分を表示する:diffコマンド
差分を表示する:diffコマンド
Linuxシステムでは、設定ファイルの変更やプログラムのソースコードの更新内容を確認することが頻繁にあります。diff
コマンドは、2つのファイル間の差分を表示し、どの部分が追加、削除、または変更されたかを明確に示してくれます。ここでは、diff
コマンドの使い方とその出力結果の解釈方法について詳しく解説します。
diffコマンドの概要
diff
は、2つのテキストファイルを比較して、その差分を表示するコマンドです。
【書式】diff [オプション] <比較元ファイル> <比較先ファイル>
このコマンドは、設定ファイルやプログラムのソースコードなどの編集前後の変更内容を確認する際によく利用されます。
差分の表現方法
変更部分は「変更範囲1<変更種別>変更範囲2」という形式で表現されます。変更種別は以下の3つがあります。
変更種別 | 説明 |
---|---|
<範囲1>a<範囲2> | 追加(add):1つ目のファイルの範囲1の後に、2つ目のファイルの範囲2の内容が追加された。 |
<範囲1>d<範囲2> | 削除(delete):1つ目のファイルの範囲1の内容が削除された。 |
<範囲1>c<範囲2> | 変更(change):1つ目のファイルの範囲1の内容が、2つ目のファイルの範囲2の内容に変更された。 |
実際の変更内容は、それぞれ <
や >
で始まる行に表示されます。差分を確認することで、ファイルのどの部分がどのように変更されたかを把握できます。
各差分の塊は「ハンク(hunk)」と呼ばれ、ファイル内で複数の行が変更された場合、それぞれの変更箇所ごとにハンクとして表示されます。
diffコマンドの基本的な使い方
1.変更前のファイル before.txt
を作成
まず、比較元となるファイル before.txt
を作成します。
user01@ubuntu:~$ nano before.txt
before.txt
の内容
1. Introduction to Linux
2. Understanding the Shell
3. Basic Commands
4. File Management
5. Text Editing
6. Processes and Jobs
7. Network Configuration
8. Security Basics
9. System Monitoring
10. Conclusion
2.before.txt
をコピーして after.txt
を作成
次に、before.txt
をコピーして after.txt
を作成します。
user01@ubuntu:~$ cp before.txt after.txt
3.after.txt
を編集(追加・削除・変更)
after.txt
に以下の変更を加えます。
user01@ubuntu:~$ nano after.txt
- 削除:5行目の「5. Text Editing」を削除します。
- 変更:7行目の「7. Network Configuration」を「7. Networking Fundamentals」に変更します。
- 追加:11行目に「11. Advanced Shell Scripting」を追加します。
編集後の after.txt
の内容
1. Introduction to Linux
2. Understanding the Shell
3. Basic Commands
4. File Management
6. Processes and Jobs
7. Network Fundamentals
8. Security Basics
9. System Monitoring
10. Conclusion
11. Advances Shell Scipting
4.diff
コマンドを実行して差分を確認
user01@ubuntu:~$ diff before.txt after.txt
出力結果
5d4
< 5. Text Editing
7c6
< 7. Network Configuration
---
> 7. Network Fundamentals
10a10
> 11. Advances Shell Scipting
5.差分の詳細な解説
5d4
意味:before.txt
の5行目が削除された。
表示内容
< 5. Text Editing
解説
5d4
は「5行目が削除された」を意味します。d
は削除(delete)を表します。<
は削除された行(before.txt
の内容)を示します。after.txt
では、この行が存在しないため、表示されません。- 5d4の「4」の詳細解説:「
before.txt
の5行目が削除され、after.txt
の4行目と一致するようになった」という意味です。
7c6
意味:before.txt
の7行目が、after.txt
の6行目に変更された。
表示内容
< 7. Network Configuration
---
> 7. Network Fundamentals # after.txtの6行目
解説
7c6
は「before.txt
の7行目が、after.txt
の6行目に変更された」を意味します。c
は変更(change)を表します。<
は元の内容(before.txt
)を示し、>
は変更後の内容(after.txt
)を示します。before.txt
の「7. Network Configuration」が、after.txt
では「7. Networking Fundamentals」に変更されています。
10a10
意味:after.txt
の10行目に新しい行が追加された。
表示内容
> 11. Advanced Shell Scripting # after.txtの10行目
解説
10a10
は「before.txt
の10行目の後に、after.txt
の10行目が追加された」を意味します。a
は追加(add)を表します。>
は追加された行(after.txt
の内容)を示します。- 新たに「11. Advanced Shell Scripting」が追加されています。
6.不要になったファイルの削除
作業が終わったら、作成したファイルを削除します。
user01@ubuntu:~$ rm before.txt after.txt
まとめ
diff
コマンドは、2つのファイル間の差分を確認するための重要なツールです。- 変更種別
・a
(追加):比較元ファイルに対して、比較先ファイルで内容が追加された。
・d
(削除):比較元ファイルの内容が、比較先ファイルで削除された。
・c
(変更):比較元ファイルの内容が、比較先ファイルで変更された。 - 差分の見方
<
は比較元ファイルの内容を示し、>
は比較先ファイルの内容を示す。変更範囲1<変更種別>変更範囲2
の形式で、どの行が変更されたかを特定できる。 - 活用例
・設定ファイルの変更履歴の確認。
・プログラムのソースコードの差分チェック。
・ドキュメントの変更点の把握。
diff
コマンドを活用することで、ファイルの変更点を簡単に把握でき、システム管理や開発業務の効率化につながります。変更内容を正確に理解し、必要に応じて修正や確認を行う際に、ぜひ活用してみてください。