George Hotz | Programming | From the Transistor: Exploring Xilinx on MAC ( O S A K A ) | Part1
目次:
diff
は、2つのファイルを行ごとに比較できるコマンドラインユーティリティです。 また、ディレクトリの内容を比較することもできます。
diff
コマンドは、
patch
コマンドを使用して適用できる1つ以上のファイル間の差分を含むパッチを作成するために最も一般的に使用されます。
diff
コマンドの使用方法
diff
コマンドの構文は次のとおりです。
diff… FILES
diff
コマンドは、いくつかの形式で出力を表示できます。最も一般的な形式は、標準形式、コンテキスト形式、統一形式です。 出力には、ファイル内のどの行を変更して同一にするかに関する情報が含まれます。 ファイルが一致する場合、出力は生成されません。
コマンド出力をファイルに保存するには、リダイレクト演算子を使用します。
diff file1 file2 > patch
、次の2つのファイルを使用して、
diff
コマンドの動作を説明します。
Ubuntu Arch Linux Debian CentOS Fedora
file2
Kubuntu Ubuntu Debian Arch Linux Centos Fedora
通常フォーマット
オプションを使用せずに2つのテキストファイルに対して
diff
コマンドを実行する最も単純な形式では、通常の形式で出力が生成されます。
diff file1 file2
出力は次のようになります。
0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos
通常の出力形式は、違いを説明する1つ以上のセクションで構成されます。 各セクションは次のようになります。
change-command < from-file-line… --- > to-file-line…
0a1
、および
4c4, 5
は変更コマンドです。 各変更コマンドには、左から右に次のものが含まれます。
- 最初のファイルの行番号または行の範囲。特別な変更文字。2番目のファイルの行番号または行の範囲。
変更文字は次のいずれかです。
- a-行を追加します。
c
行を変更します。d
行を削除します。
変更コマンドの後には、削除された完全な行(
<
)が続き、ファイルに追加されます(
>
)。
出力を説明しましょう:
-
0a1
-file1の先頭(行0
後)に2番目のファイルの行1
を追加します。-
> Kubuntu
上記のように最初のファイルに追加される2番目の行の行。
2d2
最初のファイルの2
行目を削除します。d
記号の後の2
は、行が削除されない場合、2番目のファイルの行2
に表示されることを意味します。-
< Arch Linux
削除された行。
4c4, 5
最初のファイルの5
行目を2番目のファイルの4-5
行目で置き換えます(変更します)。-
< CentOS
置き換えられる最初のファイルの行。---
セパレーター。> Arch Linux
および> Centos
最初のファイルの行を置き換える2番目のファイルの行。
-
コンテキスト形式
コンテキスト出力形式を使用すると、
diff
コマンドは、ファイル間で異なる行の前後にコンテキストの複数の行を表示します。
-c
オプションは、
diff
にコンテキスト形式で出力を生成するように指示します。
diff -c file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora
出力は、比較されるファイルの場合は名前とタイムスタンプ、および相違点を説明する1つ以上のセクションで始まります。 各セクションは次のようになります。
*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…
-
from-file-line-numbers
およびto-file-line-numbers
-1番目と2番目のファイルの行番号またはコンマ区切りの行範囲。from-file-line
およびto-file-line
line-異なる行とコンテキストの行:- 2つのスペースで始まる行はコンテキストの行であり、両方のファイルで同じ行です。マイナス記号(
-
)で始まる行は、2番目のファイルの何にも対応しない行です。 2番目のファイルにない行。プラス記号(+
)で始まる行は、最初のファイルの何にも対応しない行です。 最初のファイルにない行!
感嘆符(!
)で始まる行は、2つのファイル間で変更される行です。!
始まる行の各グループ 最初のファイルから、2番目のファイルに対応する一致があります。
- 2つのスペースで始まる行はコンテキストの行であり、両方のファイルで同じ行です。マイナス記号(
出力の最も重要な部分を説明しましょう。
- この例では、違いを説明するセクションが1つだけあります。
*** 1, 6 ****
および--- 1, 7 ----
は、このセクションに含まれる最初と2番目のファイルの行の範囲を示しています。行Ubuntu
、Debian
、Fedora
、および最後の空行は両方のファイルで同じです。 これらの行はダブルスペースで始まります。行- Arch Linux
最初のファイルの- Arch Linux
は、2番目のファイルの何にも対応しません。 この行は2番目のファイルにも存在しますが、位置が異なります。2番目のファイルのLine+ Kubuntu
は、最初のファイルの何にも対応しません! CentOS
最初のファイルと行からの! CentOS
! Arch Linux
! Arch Linux
および! CentOS
2番目のファイルの! CentOS
は、ファイル間で変更されます。
デフォルトでは、コンテキスト行の数はデフォルトで3になります。 別の番号を指定するには、
-C
(--
--contexts
)オプションを使用します。
diff -C 1 file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora
統一フォーマット
統一された出力形式は、コンテキスト形式の改良版であり、出力が小さくなります。
-u
オプションを使用して、
diff
に統一形式で出力を印刷するように指示します。
diff -u file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora
出力は、ファイルの名前とタイムスタンプ、および相違点を説明する1つ以上のセクションで始まります。 各セクションの形式は次のとおりです。
*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…
-
@@ from-file-line-numbers to-file-line-numbers @@
-このセクションに含まれる最初と2番目のファイルの行番号または行の範囲。line-from-files
files-異なる行とコンテキストの行:- 2つのスペースで始まる行はコンテキストの行であり、両方のファイルで同じ行です。マイナス記号(
-
)で始まる行は最初のファイルから削除される行です。プラス記号(+
)で始まる行は最初のファイルから追加される行。
- 2つのスペースで始まる行はコンテキストの行であり、両方のファイルで同じ行です。マイナス記号(
ケースを無視
上記の例でわかるように、
diff
コマンドはデフォルトで大文字と小文字を区別します。
-i
オプションを使用して、大文字小文字を無視するように
diff
に指示します。
diff -ui file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora
結論
テキストファイルの違いを比較することは、Linuxシステム管理者にとって最も一般的なタスクの1つです。
diff
コマンドは、ファイルを行
diff
比較します。 詳細については、ターミナルで
man diff
してください。