このページで解説している内容は、以下の 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 コマンドを活用することで、ファイルの変更点を簡単に把握でき、システム管理や開発業務の効率化につながります。変更内容を正確に理解し、必要に応じて修正や確認を行う際に、ぜひ活用してみてください。