GNU/Linux >> Linux の 問題 >  >> Linux

Linuxの差分コマンド

diff は、2つのファイルを1行ずつ比較できるコマンドラインユーティリティです。ディレクトリの内容を比較することもできます。

diff コマンドは、 patchを使用して適用できる1つ以上のファイル間の違いを含むパッチを作成するために最も一般的に使用されます コマンド。

diffの使用方法 コマンド#

diffの構文 コマンドは次のとおりです:

diff [OPTION]... FILES

diff コマンドは、出力をいくつかの形式で表示できます。最も一般的な形式は、通常形式、コンテキスト形式、および統一形式です。出力には、ファイル内のどの行を変更して同一にする必要があるかに関する情報が含まれます。ファイルが一致する場合、出力は生成されません。

コマンド出力をファイルに保存するには、リダイレクト演算子を使用します。

diff file1 file2 > patch

この記事では、次の2つのファイルを使用して、 diffがどのように異なるかを説明します。 コマンドは機能します:

file1
Ubuntu
Arch Linux
Debian
CentOS
Fedora
file2
Kubuntu
Ubuntu
Debian
Arch Linux
Centos
Fedora

通常のフォーマット#

diffの場合の最も単純な形式 コマンドはオプションなしで2つのテキストファイルに対して実行され、通常の形式で出力を生成します:

diff file1 file2

出力は次のようになります:

0a1
> Kubuntu
2d2
< Arch Linux
4c4,5
< CentOS
---
> Arch Linux
> Centos

通常の出力形式は、違いを説明する1つ以上のセクションで構成されます。各セクションは次のようになります:

change-command
< from-file-line...
---
> to-file-line...

0a1 2d2 および4c4,5 変更コマンドです。各変更コマンドには、左から右に次のものが含まれています。

  • 最初のファイルの行番号または行の範囲。
  • 特別な変更文字。
  • 2番目のファイルの行番号または行の範囲。

変更文字は次のいずれかになります:

  • a -行を追加します。
  • c -行を変更します。
  • d -行を削除します。

変更コマンドの後には、削除された完全な行が続きます( < )そしてファイルに追加されます(>

出力について説明しましょう:

  • 0a1 -行1を追加します file1の先頭( 0 の行の後)にある2番目のファイルの )。
    • > Kubuntu -上記のように最初のファイルに追加された2行目の行。
  • 2d2 -行2を削除します 最初のファイルで。 2 dの後 記号は、行が削除されない場合、行 2に表示されることを意味します 2番目のファイルにあります。
    • -削除された行。
  • 4c4,5 -行5を置き換える(変更する) 4-5行の最初のファイル 2番目のファイルから。
    • -置き換えられる最初のファイルの行。
    • --- -セパレーター。
    • > 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 -異なる行とコンテキストの行:
    • 2つのスペースで始まる行はコンテキストの行であり、両方のファイルで同じ行です。
    • マイナス記号で始まる行(- )は、2番目のファイルの何にも対応しない行です。 2番目のファイルに行がありません。
    • プラス記号( + で始まる行 )は、最初のファイルの何にも対応しない行です。最初のファイルに行がありません。
    • 感嘆符(で始まる行 )は、2つのファイル間で変更される行です。 で始まる行の各グループ 最初のファイルから、2番目のファイルに対応する一致があります。

出力の最も重要な部分を説明しましょう:

  • この例では、違いを説明するセクションが1つだけあります。
  • *** 1,6 **** および---1,7 ---- このセクションに含まれる1番目と2番目のファイルの行の範囲を示します。
  • Ubuntu Debian Fedora 、および最後の空の行は、両方のファイルで同じです。これらの行はダブルスペースで始まります。
  • Line -Arch Linux 最初のファイルからは、2番目のファイルの何にも対応していません。この行は2番目のファイルにも存在しますが、位置が異なります。
  • Line + Kubuntu 2番目のファイルからは最初のファイルの何にも対応していません。
  • ! CentOS 最初のファイルと行から! Arch Linux および! CentOS 2番目のファイルからファイル間で変更されます。

デフォルトでは、コンテキスト行の数はデフォルトで3になります。別の番号を指定するには、 -Cを使用します (-コンテキスト )オプション:

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 @@ -このセクションに含まれる1番目と2番目のファイルの行番号または行の範囲。
  • line-from-files -異なる行とコンテキストの行:
    • 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 コマンドはファイルを1行ずつ比較します。詳細については、 man diffと入力してください ターミナルで。

ご不明な点がございましたら、下にコメントを残してください。


Linux
  1. Linuxコマンドラインに関する8つのヒント

  2. Linuxコマンドラインで牛を飼う

  3. Linux での diff コマンドの例

  1. Linuxコマンドラインにアクセスしてください

  2. Linuxmvコマンド

  3. Linuxduコマンド

  1. Linuxでの9つのdiffコマンドの例

  2. Linuxipコマンド

  3. Linuxcdコマンド