GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Diff-Befehl unter Linux

diff ist ein Befehlszeilenprogramm, mit dem Sie zwei Dateien Zeile für Zeile vergleichen können. Es kann auch den Inhalt von Verzeichnissen vergleichen.

Der diff Der Befehl wird am häufigsten verwendet, um einen Patch zu erstellen, der die Unterschiede zwischen einer oder mehreren Dateien enthält, die mit dem patch angewendet werden können Befehl.

Wie man den diff verwendet Befehl #

Die Syntax für den diff Befehl lautet wie folgt:

diff [OPTION]... FILES

Der diff Der Befehl kann die Ausgabe in mehreren Formaten anzeigen, wobei das normale, kontextbezogene und vereinheitlichte Format die gebräuchlichsten sind. Die Ausgabe enthält Informationen darüber, welche Zeilen in den Dateien geändert werden müssen, damit sie identisch werden. Wenn die Dateien übereinstimmen, wird keine Ausgabe erzeugt.

Um die Befehlsausgabe in einer Datei zu speichern, verwenden Sie den Umleitungsoperator:

diff file1 file2 > patch

In diesem Artikel verwenden wir die folgenden zwei Dateien, um zu erklären, wie der diff Befehl funktioniert:

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

Normales Format #

In seiner einfachsten Form, wenn der diff Befehl auf zwei Textdateien ohne Option ausgeführt wird, erzeugt er eine Ausgabe im normalen Format:

diff file1 file2

Die Ausgabe sieht in etwa so aus:

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

Das normale Ausgabeformat besteht aus einem oder mehreren Abschnitten, die die Unterschiede beschreiben. Jeder Abschnitt sieht folgendermaßen aus:

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

0a1 , 2d2 und 4c4,5 sind Änderungsbefehle. Jeder Änderungsbefehl enthält von links nach rechts Folgendes:

  • Die Zeilennummer oder der Zeilenbereich in der ersten Datei.
  • Ein spezielles Änderungszeichen.
  • Die Zeilennummer oder der Zeilenbereich in der zweiten Datei.

Das Änderungszeichen kann eines der folgenden sein:

  • a - Fügen Sie die Zeilen hinzu.
  • c - Ändere die Zeilen.
  • d - Zeilen löschen.

Auf den Änderungsbefehl folgen die vollständigen Zeilen, die entfernt werden (< ) und der Datei hinzugefügt (> ).

Lassen Sie uns die Ausgabe erklären:

  • 0a1 - Zeile 1 hinzufügen der zweiten Datei am Anfang der Datei1 (nach der Zeile 0 ).
    • > Kubuntu - Die Zeile ab der zweiten Zeile, die wie oben beschrieben zur ersten Datei hinzugefügt wird.
  • 2d2 - Zeile 2 löschen in der ersten Datei. Die 2 nach dem d Symbol bedeutet, dass, wenn die Zeile nicht gelöscht wird, sie in Zeile 2 erscheinen würde in der zweiten Datei.
    • < Arch Linux - die gelöschte Zeile.
  • 4c4,5 - Zeile 5 ersetzen (ändern). in der ersten Datei mit den Zeilen 4-5 aus der zweiten Datei.
    • < CentOS - Die Zeile in der ersten zu ersetzenden Datei.
    • --- - Trennzeichen.
    • > Arch Linux und > Centos - Zeilen aus der zweiten Datei, die die Zeile in der ersten Datei ersetzen.

Kontextformat #

Wenn das Kontextausgabeformat verwendet wird, ist der diff Der Befehl zeigt mehrere Kontextzeilen um die Zeilen an, die sich zwischen den Dateien unterscheiden.

Das -c Option teilt diff mit um eine Ausgabe im Kontextformat zu erzeugen:

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

Die Ausgabe beginnt mit den Namen und Zeitstempeln der verglichenen Dateien und einem oder mehreren Abschnitten, die die Unterschiede beschreiben. Jeder Abschnitt sieht folgendermaßen aus:

***************
*** from-file-line-numbers ****
  from-file-line...
--- to-file-line-numbers ----
  to-file-line...
  • from-file-line-numbers und to-file-line-numbers - Die Zeilennummern oder der durch Kommas getrennte Zeilenbereich in der ersten bzw. zweiten Datei.
  • from-file-line und to-file-line - Die Zeilen, die sich unterscheiden, und die Kontextzeilen:
    • Zeilen, die mit zwei Leerzeichen beginnen, sind Kontextzeilen, die Zeilen, die in beiden Dateien gleich sind.
    • Zeilen beginnend mit dem Minuszeichen (- ) sind die Zeilen, die nichts in der zweiten Datei entsprechen. In der zweiten Datei fehlen Zeilen.
    • Zeilen beginnend mit dem Pluszeichen (+ ) sind die Zeilen, die nichts in der ersten Datei entsprechen. In der ersten Datei fehlen Zeilen.
    • Zeilen beginnend mit dem Ausrufezeichen (! ) sind die Zeilen, die zwischen zwei Dateien geändert werden. Jede Gruppe von Zeilen beginnt mit ! aus der ersten Datei hat eine entsprechende Übereinstimmung in der zweiten Datei.

Lassen Sie uns die wichtigsten Teile der Ausgabe erklären:

  • In diesem Beispiel haben wir nur einen Abschnitt, der die Unterschiede beschreibt.
  • *** 1,6 **** und --- 1,7 ---- gibt uns den Zeilenbereich der ersten und zweiten Datei an, die in diesem Abschnitt enthalten sind.
  • Linien Ubuntu , Debian , Fedora , und die letzte leere Zeile sind in beiden Dateien gleich. Diese Zeilen beginnen mit einem doppelten Leerzeichen.
  • Zeile - Arch Linux aus der ersten Datei entspricht nichts in der zweiten Datei. Obwohl diese Zeile auch in der zweiten Datei vorhanden ist, sind die Positionen unterschiedlich.
  • Zeile + Kubuntu aus der zweiten Datei entspricht nichts in der ersten Datei.
  • Zeile ! CentOS aus der ersten Datei und Zeilen ! Arch Linux und ! CentOS aus der zweiten Datei werden zwischen den Dateien gewechselt.

Standardmäßig beträgt die Anzahl der Kontextzeilen drei. Um eine andere Nummer anzugeben, verwenden Sie -C (--contexts ) Option:

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

Einheitliches Format #

Das vereinheitlichte Ausgabeformat ist eine verbesserte Version des Kontextformats und erzeugt eine kleinere Ausgabe.

Verwenden Sie das -u Option, um diff mitzuteilen um die Ausgabe im einheitlichen Format zu drucken:

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

Die Ausgabe beginnt mit den Namen und den Zeitstempeln der Dateien und einem oder mehreren Abschnitten, die die Unterschiede beschreiben. Jeder Abschnitt hat die folgende Form:

***************
@@ from-file-line-numbers to-file-line-numbers @@
 line-from-files...
  • @@ from-file-line-numbers to-file-line-numbers @@ - Die Zeilennummer oder der Bereich der Zeilen aus der ersten und zweiten Datei, die in diesem Abschnitt enthalten sind.
  • line-from-files - Die Zeilen, die sich unterscheiden, und die Kontextzeilen:
    • Zeilen, die mit zwei Leerzeichen beginnen, sind Kontextzeilen, die Zeilen, die in beiden Dateien gleich sind.
    • Zeilen beginnend mit dem Minuszeichen (- ) sind die Zeilen, die entfernt werden aus der ersten Datei.
    • Zeilen beginnend mit dem Pluszeichen (+ ) sind die Zeilen, die hinzugefügt werden aus der ersten Datei.

Fall # ignorieren

Wie Sie vielleicht in den obigen Beispielen bemerkt haben, ist der diff Beim Befehl wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden.

Verwenden Sie das -i Option, um diff mitzuteilen Groß-/Kleinschreibung ignorieren:

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

Schlussfolgerung #

Das Vergleichen von Textdateien auf Unterschiede ist eine der häufigsten Aufgaben für Linux-Systemadministratoren.

Der diff Befehl vergleicht Dateien Zeile für Zeile. Geben Sie für weitere Informationen man diff ein in Ihrem Terminal.

Wenn Sie Fragen haben, hinterlassen Sie bitte unten einen Kommentar.


Linux
  1. Haben Sie eine Kuh an der Linux-Befehlszeile

  2. Boxen Sie sich auf der Linux-Befehlszeile ein

  3. Linux-mv-Befehl

  4. Linux-Du-Befehl

  5. diff-Befehlsbeispiele in Linux

So booten Sie in die Linux-Befehlszeile

Meistern Sie die Linux-Befehlszeile

Df-Befehl unter Linux

diff-Befehl unter Linux

Grundlagen der Linux-Befehlszeile:sudo

Beispiele für Linux-Diff-Befehle