Linuxのよく使うコマンド(diffで差分を確認)

目次

diffとは (+このページの目的)

diffは、2つのファイルの差分(変更・追加・削除)を検出するコマンドです。

設定ファイルの変更確認や、修正内容のレビューなどでよく使われます。

 

このページの目的

diffで以下2つのファイルを比較します。

test1.txt

123
456
789

test2.txt

123
455
789
abc

test2.txtの2行目は、test1.txtの2行目と異なっています。
4行目は、test2.txtのみにあります。

diffコマンドで差分を確認する

diff ファイル1 ファイル2

diffコマンドで確認します。

$ diff test1.txt test2.txt 
2c2
< 456
---
> 455
3a4
> abc
< は左のファイルの内容
> は右のファイルの内容

2c2のcは、changedを表し変更の意味です。
2cの2はtest1.txtの2行目です。
c2の2はtest2.txtの2行目です。

< 456 は、test1.txtの2行目で456になっています。
> 455 は、test2.txtの2行目で455になっています。

→左ファイルの2行目が、右ファイルの2行目に変更されている

3a4のaは、addedを表し追加の意味です。
3a4の4はtest2.txtの4行目です。

> abcは、test2.txtの4行目でabcになっています。

→左ファイルの3行目の後に、右ファイルの4行目が追加されている

dが表示された場合は、deletedを意味し削除の意味です。

ファイルを左右に表示する(diff -y)

diff -y ファイル1 ファイル2

diffコマンドにyオプションをつけるとファイルを左右に表示します。

$ diff -y test1.txt test2.txt 
123							 123
456							|455
789							 789
							>abc
| は差分がある行(変更)
< は左ファイルのみの行
> は右ファイルのみの行

3行目は、右側に縦線があります。変更がある行です。
5行目の>は、test2.txtのみある行を表しています。

diffコマンドで差分を確認する(diff -c)

diff -c ファイル1 ファイル2

-cオプションをつけると以下のように出力されます。(Context形式)

$ diff -c test1.txt test2.txt 
*** test1.txt	2023-03-02 05:52:51.257869339 -0800
--- test2.txt	2023-03-02 05:52:37.787091606 -0800
***************
*** 1,3 ****
  123
! 456
  789
--- 1,4 ----
  123
! 455
  789
+ abc 

!は変更、+は追加、-は削除です。

Context形式・・・前後の行も含めて差分を表示する(変更箇所の前後文脈が分かる)

diffコマンドで差分を確認する(diff -u)

diff -u ファイル1 ファイル2

-uオプションをつけると以下のように出力されます。(Unified形式)

$ diff -u test1.txt test2.txt 
--- test1.txt	2023-03-02 05:52:51.257869339 -0800
+++ test2.txt	2023-03-02 05:52:37.787091606 -0800
@@ -1,3 +1,4 @@
 123
-456
+455
 789
+abc 

-が削除(旧)、+が追加(新)で、変更は-と+の組み合わせで表現されます。

Unified形式・・・変更前後を1つの形式で表示(Gitやパッチでよく使われる)

ディレクトリ比較

diff -r dir1 dir2

設定の差分確認などで使用します。

無視オプション

diff -i  ファイル1 ファイル2 # 大文字小文字無視
diff -w  ファイル1 ファイル2 # 空白無視

設定ファイル比較でよく使います。

横並び表示で差分のある行だけを表示

2つのファイルを横並び表示して、差分のある行だけを表示します。

diff -y --suppress-common-lines ファイル1 ファイル2

差分だけ見たいとき便利です。

関連の記事

CentOS コマンド一覧 (Linux)

△上に戻る