So vergleichen Sie Dateien mithilfe von Diff

So vergleichen Sie Dateien mithilfe von Diff

Das Diff -Dienstprogramm ist in den allermeisten Fällen standardmäßig in jeder Linux -Verteilung da draußen installiert. Das Programm wird verwendet, um die Unterschiede zwischen dem Inhalt zweier Dateien zu berechnen und anzuzeigen. Es wird hauptsächlich verwendet, wenn Sie mit Quellcode arbeiten. Zwei vergleichen dieselben Versionen von zwei Dateien und unterstreichen die Unterschiede zwischen ihnen. In diesem Artikel lernen wir die verschiedenen Modi, in denen Diff funktionieren kann und wie eine Diff -Datei erstellt wird, die später als Patch mit dem Patch -Dienstprogramm angewendet werden kann.

In diesem Tutorial lernen Sie:

  • Wie man diff verwendet
  • So zeigen Sie den Ausgang von Diff auf zwei Spalten an, wenn Sie Diff im normalen Modus verwenden
  • So lesen Sie die Diff -Ausgabe im Normal-, Kontext- und einheitlichen Modus
  • So erstellen Sie eine Diff -Datei und wenden Sie sie als Patch mit dem Patch -Dienstprogramm an
So vergleichen Sie Dateien mithilfe von Diff

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Verteilung unabhängig
Software Diff, Patch
Andere Keiner
Konventionen # - Erfordert, dass gegebene Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden können sudo Befehl
US

Das Diff -Dienstprogramm

Der diff Das Dienstprogramm vergleicht die Dateienzeile für Zeile. Die Syntax ist sehr einfach:

$ diff [Option] Dateien 

Wir müssen nur das Programm aufrufen, gefolgt vom Pfad der Dateien, die wir vergleichen möchten. Bevor wir uns einige Verwendungsbeispiele ansehen können, müssen wir lernen, die Ausgabe des Dienstprogramms zu lesen, und was die Symbole der von ihm erzeugten Symbole bedeuten. Wir können sie in der folgenden Tabelle zusammenfassen:

Symbol Bedeutung
A Es ist ein „Addition“ erforderlich, damit der Inhalt der beiden Dateien übereinstimmt
C Eine „Änderung“ -Kaktion ist erforderlich, damit der Inhalt der beiden Dateien übereinstimmt
D Eine Aktion „Löschen“ ist erforderlich, damit der Inhalt der beiden Dateien übereinstimmt
< Zeigt eine Zeile aus der ersten Datei an
> Zeigt eine Zeile aus der zweiten Datei an


Wir können jetzt einige Beispiele für die grundlegende Diff -Verwendung sehen. Angenommen, wir haben zwei Dateien, die genannt werden lotr0.txt Und LOTR1.txt. Der Inhalt der ersten Datei lautet wie folgt:

Drei Ringe für die Elfenkönige unter dem Himmel, sieben für die Zwerglords in ihren Steinhallen, neun für sterbliche Männer, die zum Sterben waren, einen für den dunklen Lord auf seinem dunklen Thron im Land von Mordor, wo die Schatten liegen. Ein Ring, um sie alle zu regieren, ein Ring, um sie zu finden, ein Ring, um sie alle zu bringen, und in der Dunkelheit sie binden sie im Land von Mordor, wo die Schatten # Ende liegen 

Sie haben sicherlich das Gedicht „Ring“ aus dem Buch „Lord of the Rings“ erkannt. Nehmen wir nun die zweite Datei an, LOTR1.txt, Enthält stattdessen die folgenden Zeilen:

# Das Ringgedicht in der schwarzen Rede von Mordor Drei Ringen für die Elfenkönige unter dem Himmel, sieben für die Zwerg-Lords in ihren Steinhallen, neun für sterbliche Männer zum Sterben, einen für den dunklen Herrn auf seinem dunklen Thron Im Land Mordor, wo die Schatten liegen. Ash Nazg Durbatulûk, Ash Nazg Gimbatul, Ash Nazg Thrakatulûk, Agh Berrzum-Ishi Krimpatul im Land Mordor, wo die Schatten liegen 

Der Inhalt der beiden Dateien ist ziemlich ähnlich, aber nicht identisch. Lass uns die laufen lassen diff Nützlichkeit auf ihnen und sehen Sie, welche Ausgabe sie erzeugt:

$ diff lotr0.txt lotr1.txt 0a1> # Das Ringgedicht in der schwarzen Rede von Mordor 6,7c7,8 < One Ring to rule them all, One Ring to find them,  Ash nazg durbatulûk, ash nazg gimbatul, > Ash Nazg Thrakatulûk, Agh Berrzum-Ishi Krimpatul, 9d9 < # end 

In der ersten Zeile der Ausgabe können wir lesen 0a1; Was bedeutet das? In diesem Fall werden wir mitgeteilt, dass die erste Datei zu Beginn (Zeile 0), eine neue Linie sollte „hinzugefügt“ werden ((A), was der ersten Zeile entspricht (1) der zweiten Datei. Was ist diese Linie?? Der nach dem gemeldete > Symbol in der zweiten Zeile der Ausgabe:

> # Das Ringgedicht in der schwarzen Rede von Mordor 

Dies ist sinnvoll: Die Zeile gibt es in der ersten Datei nicht, daher sollte sie hinzugefügt werden, damit der Inhalt der beiden Dateien übereinstimmt.

Lass uns weitermachen. Wir können die folgende Notation sehen 6,7c7,8: Dies bedeutet, dass Linien 6 Zu 7 in der ersten Datei (6,7) sollte geändert werden, um die Zeilen zu entsprechen 7 Zu 8 (7,8) int die zweite Datei. Wie sollten sie verändert werden?? Die Zeilen aus der ersten Datei, die wir unterscheiden können, weil die von der vorangegangen sind < Symbol sind:

< One Ring to rule them all, One Ring to find them, < One Ring to bring them all, and in the darkness bind them, 

Sie sollten in die folgenden Zeilen der zweiten Datei geändert werden, die entdeckt werden können, weil ihnen der vorangegangen ist > Symbol im Diff -Ausgang:

> Ash Nazg Durbatulûk, Ash Nazg Gimbatul,> Ash Nazg Thrakatulûk, Agh Burzum-Ishi Krimpatul, 

Die Zeilen aus der ersten Datei und die Zeilen aus der zweiten in der Ausgabe sind durch drei Striche getrennt: ((---).

Schließlich haben wir das 9d9 Notation: Dies bedeutet, dass die Zeile für den Inhalt der beiden Dateien übereinstimmt, damit der Inhalt der beiden Dateien übereinstimmt 9 In der ersten Datei (# Ende) sollte gelöscht werden, um die Zeile zu erreichen 9 der zweiten Datei.

Anzeige des Ausgangs nebeneinander

In den obigen Beispielen sehen wir, dass der vom Diff -Dienstprogramm erzeugte Ausgang „vertikal“ organisiert ist. Wenn wir es vorziehen, können wir so machen, dass es mit zwei Spalten formatiert und angezeigt wird. Alles was wir tun müssen, ist, die zu verwenden -y Option (kurz
für --Seite an Seite):

$ diff -y lotr0.txt lotr1.TXT> # Das Ringgedicht in der schwarzen Rede von Mordor drei Ringe für die Elfenkönige unter dem Himmel, drei Ringe für die Elfenkönige unter dem Himmel, sieben für die Zwerglords in ihren Steinhallen, sieben für den Zwerg -Lords in ihren Steinhallen, neun für sterbliche Männer zum Tod, neun für sterbliche Männer zum Tod, einen für den dunklen Herrn auf seinem dunklen Thron für den dunklen Herr Lüge. Im Land Mordor, wo die Schatten liegen. Ein Ring, um sie alle zu regieren, ein Ring, um sie zu finden, | Ash Nazg Durbatulûk, Ash Nazg Gimbatul, ein Ring, um sie alle zu bringen, und in der Dunkelheit sie binden sie, | Ash Nazg Thrakatulûk, Agh Berrzum-Ishi Krimpatul im Land Mordor, wo die Schatten im Land von Mordor liegen, wo die Schatten # Ende liegen < 

Der Inhalt der ersten Datei wird in der linken Spalte angezeigt, und der der zweiten im rechten. Wir können die Unterschiede zwischen ihnen leicht erkennen: Welche Linien existieren nur in einem der beiden und welche Linien sind unterschiedlich. Der -y Die Option kann nur bei der Arbeit mit Diff im „normalen“ Modus verwendet werden. Andere Modi gibt es: Wir sprechen im nächsten Abschnitt darüber.

Normaler, Kontext und einheitlicher Modus

Standardmäßig funktioniert das Diff -Dienstprogramm in normal Modus und erzeugt eine ähnliche Ausgabe wie in den vorherigen Beispielen, die wir gesehen haben. Es gibt jedoch zwei andere Modi, die wir verwenden können: die Kontext Und einheitlich Modus. Lass uns einen Blick darauf werfen
bei denen.

Der Kontextmodus

Der Kontextmodus kann verwendet werden, indem das Programm mit dem aufgerufen wird -C Option (kurz für --Kontext). In unserem Fall würde es die folgende Ausgabe erzeugen:

$ diff -c lotr0.txt lotr1.txt *** lotr0.TXT 2021-03-13 16:10:25.248286081 +0100 --- lotr1.TXT 2021-03-13 15:30:54.060911632 +0100 ******************* *** 1,9 **** Drei Ringe für die Elfenkönige unter dem Himmel, sieben für die Zwerglords in ihren Steinhallen , Neun für sterbliche Männer, die zum Sterben verurteilt waren, einer für den dunklen Herrn auf seinem dunklen Thron im Land Mordor, wo die Schatten liegen. ! Ein Ring, um sie alle zu regieren, ein Ring, um sie zu finden, ! Ein Ring, um sie alle zu bringen, und in der Dunkelheit sie binden sie im Land von Mordor, wo die Schatten liegen- # Ende --- 1,9 ---- + # Das Ringgedicht in der schwarzen Rede von Mordor Drei Ringen für Die Elfenkönige unter dem Himmel, sieben für die Zwerglords in ihren Steinhallen, neun für sterbliche Männer, die zum Tod verurteilt waren, einer für den dunklen Lord auf seinem dunklen Thron im Land Mordor, wo die Schatten liegen. ! Asche Nazg Durbatulûk, Asche Nazg Gimbatul, ! Ash Nazg Thrakatulûk, Agh Berrzum-Ishi Krimpatul im Land Mordor, wo die Schatten liegen 


Schauen wir uns dieses Ergebnis an. Zunächst können wir sehen, dass die beiden Dateien mithilfe verschiedener Symbole verwiesen werden: *** für den ersten und --- für den zweiten.

Die ersten beiden Zeilen enthalten Informationen zu den beiden Dateien. Wir sehen:

  • Der Dateiname
  • Die Dateimodifikationszeit mit TimeZone (in diesem Fall +0100)

Die ersten beiden Zeilen sind vom Rest des Ausgangs durch 15 Sternchen (Sternchen () getrennt (*****************).

Was wir unmittelbar nach dem Trennzeichen sehen, ist die Notation, die angibt, welchen Zeilenbereich der ersten Datei in diesem Fall die Zeilen 1 bis 9 angegeben sind ((1,9). Nach dieser Notation werden die Linien selbst gemeldet. Gleiches gilt für die zweite Datei. Wir können sehen, dass bestimmten Zeilen einige Symbole vorausgehen; Mal sehen, was ihre Bedeutung hat:

Symbol Bedeutung
! Die von diesem Symbol in der ersten Datei vorangestellten Zeilen müssen in die in der zweiten Datei vorangegangenen Zeilen geändert werden, damit der Inhalt der beiden Dateien übereinstimmt
- Die Zeilen, denen dieses Symbol in der ersten Datei vorangegangen ist, sollten gelöscht werden, damit der Inhalt der beiden Dateien übereinstimmt
+ Die Zeilen in der zweiten Datei, der dieses Symbol vorangegangen ist

Der einheitliche Modus

Um die zu verwenden diff Nützlichkeit im „Unified“ -Modus müssen wir es mit dem verwenden, indem wir die verwenden -u Option, das ist die Kurzform von --einheitlich. So würde die Ausgabe von Diff im Unified -Modus in diesem Fall aussehen:

$ diff -u lotr0.txt lotr1.txt --- lotr0.TXT 2021-03-13 16:10:25.248286081 +0100 +++ LOTR1.TXT 2021-03-13 15:30:54.060911632 +0100 @@ -1,9 +1,9 @@ +# Das Ringgedicht in der schwarzen Rede von Mordor Drei Ringen für die Elfenkönige unter dem Himmel, sieben für die Zwerglords in ihren Hallen aus Stein, neun Damit sterbliche Männer zum Tod sterben wurden, einer für den dunklen Lord auf seinem dunklen Thron im Land von Mordor, wo die Schatten liegen. -Ein Ring, der sie alle regiert, ein Ring, um sie zu finden, ein Ring, um sie alle zu bringen, und in der Dunkelheit sie binden sie, +Asche Nazg Durbatulûk, Ash Nazg Gimbatul, +Ash Nazg Thrakatulûk, Agh Burzum -Ishi Krimpatul, in der Land von Mordor, wo die Schatten lügen -# Ende 

Die ersten beiden Linien, die beim Diff mit dem aufgerufen werden, werden erzeugt -u Die Option sind im Modus „Kontext“ gleich und zeigt Informationen zu den beiden Dateien an. Der einzige große Unterschied besteht darin, dass die Ausgabe abhängig von der Datei, zu der sie gehört, nicht getrennt ist: Alle Zeilen sind „einheitlich“.

Erstellen einer Diff -Datei und als Patch anwenden

Angenommen, wir möchten die erforderlichen Änderungen am Inhalt der ersten Datei anwenden, die wir in den vorherigen Beispielen verwendet haben, lotr0.txt, so dass es aktualisiert wird, um den Inhalt der zweiten Datei zu entsprechen, LOTR1.txt; Wie würden wir vorgehen? Um unser Ziel zu erreichen, können wir die nutzen Patch Nützlichkeit und anwenden a Diff -Datei zum ursprünglichen. A Diff -Datei Enthält die Ausgabe von Diff. Um einen zu erstellen, müssen wir nur die Ausgabe des Dienstprogramms umleiten:

$ diff -u lotr0.txt lotr1.txt> lotr.Patch 


Sobald wir unsere Diff -Datei haben, können wir die erforderlichen Änderungen in der Originaldatei mit dem Patch -Dienstprogramm anwenden:

$ patch -b lotr0.txt lotr.Patch 

Wir haben aufgerufen Patch Verwendung der -B Option: Dies ist nicht obligatorisch, ist aber nützlich, da es so ist, dass eine Sicherung der Originaldatei erstellt wird, bevor der Patch angewendet wird (in diesem Fall wird sie benannt lotr0.txt.orig). Die Argumente wir
bereitgestellt sind:

  • Der Name der Originaldatei, auf die der Patch angewendet werden sollte
  • Der Name der Datei mit dem Patch enthält.

Nachdem der Patch angewendet wurde lotr0.txt Datei sollte identisch sein mit LOTR1.txt. Wir können es überprüfen, indem wir Diff erneut verwenden, was diese Zeit nicht ausführen sollte:

$ diff lotr0.txt lotr1.txt 

Schlussfolgerungen

In diesem Tutorial lernen wir, wie Sie Diff verwenden, um die Unterschiede zwischen zwei Dateien zu berechnen. Wir haben gesehen, was die Modi sind, in denen Diff verwendet werden kann und was die im Diff -Ausgang verwendeten Symbole verwendet werden. Schließlich haben wir gesehen, wie man eine Diff -Datei erstellt und wie man sie als Patch mit dem Patch -Dienstprogramm anwendet.

Verwandte Linux -Tutorials:

  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Mastering -Bash -Skriptschleifen beherrschen
  • Dinge zu installieren auf Ubuntu 20.04
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • GDB -Debugging -Tutorial für Anfänger
  • So bauen Sie ein Paket mit dem Arch Linux Build -System wieder auf
  • Verschachtelte Schleifen in Bash -Skripten
  • So montieren Sie das ISO -Bild unter Linux
  • Hung Linux System? Wie man zur Befehlszeile entkommt und…
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux