Linux-Dateivergleich

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Willkommen im Linux-Dateivergleichslabor (Linux File Comparison lab). In modernen Softwareentwicklungumgebungen ist das Vergleichen von Dateien eine essentielle Fähigkeit, um Änderungen nachzuverfolgen, Probleme zu debuggen und die Integrität des Codes aufrechtzuerhalten. Als Systemadministrator oder Entwickler müssen Sie häufig Unterschiede zwischen Konfigurationsdateien, Codeversionen oder Datendateien feststellen.

In diesem Labor lernen Sie, den Befehl diff zu verwenden - ein leistungsstarkes Linux-Werkzeug (utility) zum zeilenweisen Vergleich von Dateien. Das diff-Tool hilft Ihnen, genau festzustellen, was zwischen verschiedenen Dateiversionen geändert wurde. Dies ist von entscheidender Bedeutung, wenn Sie Konfigurationen aktualisieren, Codeänderungen überprüfen oder Probleme beheben.

Durch das Beherrschen von Dateivergleichstechniken können Sie Dateiversionen effizient verwalten, Patches erstellen und die Konsistenz in Ihren Entwicklungumgebungen gewährleisten. Diese grundlegende Fähigkeit ist für alle Personen von Wert, die mit Code, Konfigurationsdateien oder jeglichen textbasierten Daten arbeiten, die sich im Laufe der Zeit ändern.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/which("Command Locating") linux/VersionControlandTextEditorsGroup -.-> linux/diff("File Comparing") linux/VersionControlandTextEditorsGroup -.-> linux/patch("Patch Applying") subgraph Lab Skills linux/cat -.-> lab-271269{{"Linux-Dateivergleich"}} linux/which -.-> lab-271269{{"Linux-Dateivergleich"}} linux/diff -.-> lab-271269{{"Linux-Dateivergleich"}} linux/patch -.-> lab-271269{{"Linux-Dateivergleich"}} end

Das diff-Kommando verstehen

Das diff-Kommando ist ein grundlegendes Linux-Werkzeug (utility), das zum zeilenweisen Vergleich des Inhalts von Dateien verwendet wird. In diesem Schritt lernen Sie die grundlegende Syntax des diff-Kommandos und wie Sie zwei einfache Textdateien vergleichen können.

Beginnen wir damit, sicherzustellen, dass das diff-Werkzeug auf Ihrem System installiert ist. Öffnen Sie ein Terminal im Verzeichnis /home/labex/project und führen Sie aus:

which diff

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

/usr/bin/diff

Dies bestätigt, dass das diff-Kommando verfügbar ist. Wenn es aus irgendeinem Grund nicht installiert ist, können Sie es mit folgendem Befehl installieren:

sudo apt-get update && sudo apt-get install -y diffutils

Jetzt erstellen wir zwei einfache Textdateien, um sie zu vergleichen. Wir erstellen Dateien, die Konfigurationseinstellungen repräsentieren könnten:

echo "## Configuration File for Robot Arm" > /home/labex/project/files/config1.txt
echo "motor_speed = 100" >> /home/labex/project/files/config1.txt
echo "acceleration = 20" >> /home/labex/project/files/config1.txt
echo "max_rotation = 180" >> /home/labex/project/files/config1.txt

Jetzt erstellen wir eine zweite Datei mit einem kleinen Unterschied:

echo "## Configuration File for Robot Arm" > /home/labex/project/files/config2.txt
echo "motor_speed = 120" >> /home/labex/project/files/config2.txt
echo "acceleration = 20" >> /home/labex/project/files/config2.txt
echo "max_rotation = 180" >> /home/labex/project/files/config2.txt

Lassen Sie uns beide Dateien anzeigen, um ihren Inhalt zu verstehen:

cat /home/labex/project/files/config1.txt

Dies zeigt:

## Configuration File for Robot Arm
motor_speed = 100
acceleration = 20
max_rotation = 180

Jetzt zeigen wir die zweite Datei an:

cat /home/labex/project/files/config2.txt

Dies zeigt:

## Configuration File for Robot Arm
motor_speed = 120
acceleration = 20
max_rotation = 180

Jetzt verwenden wir das diff-Kommando, um diese beiden Dateien zu vergleichen:

diff /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

2c2
< motor_speed = 100
---
> motor_speed = 120

Diese Ausgabe sagt uns:

  • Zeile 2 in der ersten Datei muss geändert werden, um mit Zeile 2 in der zweiten Datei übereinzustimmen.
  • < gibt die Zeile aus der ersten Datei an.
  • > gibt die Zeile aus der zweiten Datei an.
  • Die Zeile mit --- trennt die beiden Versionen.

Der Unterschied zwischen den Dateien besteht darin, dass der Wert von motor_speed von 100 auf 120 geändert wurde.

Verwendung fortgeschrittener diff-Optionen

Im vorherigen Schritt haben Sie das grundlegende diff-Kommando verwendet, um zwei Dateien zu vergleichen. Jetzt wollen wir einige fortgeschrittene Optionen erkunden, die die Ausgabe lesbarer und in verschiedenen Szenarien nützlicher machen.

Das einheitliche Format (-u-Option)

Das einheitliche Format zeigt die Unterschiede in einem kontextbewussteren Format an und wird in der Softwareentwicklung weit verbreitet verwendet. Die -u-Option zeigt mehrere Zeilen Kontext um die Unterschiede herum an.

Lassen Sie uns die -u-Option verwenden, um unsere Dateien zu vergleichen:

diff -u /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

--- /home/labex/project/files/config1.txt	2023-01-01 00:00:00.000000000 +0000
+++ /home/labex/project/files/config2.txt	2023-01-01 00:00:00.000000000 +0000
@@ -1,4 +1,4 @@
 ## Configuration File for Robot Arm
-motor_speed = 100
+motor_speed = 120
 acceleration = 20
 max_rotation = 180

In diesem Format:

  • Zeilen, die mit - (Minus) beginnen, sind in der ersten Datei, aber nicht in der zweiten.
  • Zeilen, die mit + (Plus) beginnen, sind in der zweiten Datei, aber nicht in der ersten.
  • Der Header zeigt an, welche Dateien verglichen werden.
  • Der Abschnitt @@ -1,4 +1,4 @@ gibt die angezeigten Zeilennummern an.

Das Nebeneinander-Format (-y-Option)

Das Nebeneinander-Format zeigt beide Dateien in parallelen Spalten an, was es einfacher macht, Unterschiede zu visualisieren:

diff -y /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt

Die Ausgabe sollte wie folgt aussehen:

## Configuration File for Robot Arm		## Configuration File for Robot Arm
motor_speed = 100				| motor_speed = 120
acceleration = 20				acceleration = 20
max_rotation = 180				max_rotation = 180

In dieser Ansicht:

  • Das |-Zeichen in der Mitte zeigt an, dass die Zeilen unterschiedlich sind.
  • Identische Zeilen erscheinen in beiden Spalten ohne Markierung.

Ignorieren von Leerzeichen (-w-Option)

Manchmal möchten Sie nur den Inhalt vergleichen, ohne die Unterschiede in Leerzeichen zu berücksichtigen. Die -w-Option ignoriert alle Änderungen an Leerzeichen.

Lassen Sie uns eine Datei mit unterschiedlicher Leerzeichenverwendung erstellen:

echo "## Configuration File for Robot Arm" > /home/labex/project/files/config3.txt
echo "motor_speed = 100  " >> /home/labex/project/files/config3.txt
echo "acceleration   = 20" >> /home/labex/project/files/config3.txt
echo "max_rotation = 180" >> /home/labex/project/files/config3.txt

Jetzt vergleichen wir sie zuerst ohne und dann mit der -w-Option mit der ersten Datei:

diff /home/labex/project/files/config1.txt /home/labex/project/files/config3.txt

Sie könnten aufgrund der Leerzeichen Unterschiede sehen. Jetzt versuchen Sie:

diff -w /home/labex/project/files/config1.txt /home/labex/project/files/config3.txt

Mit der -w-Option sollte diff keine Unterschiede anzeigen, da die einzigen Variationen in den Leerzeichen liegen.

Diese fortgeschrittenen Optionen machen diff für verschiedene Anwendungsfälle und Dateitypen vielseitiger. Durch die Kombination von Optionen können Sie die Ausgabe an Ihre spezifischen Bedürfnisse anpassen.

Erstellen und Anwenden von Patch-Dateien

Patch-Dateien sind eine Möglichkeit, Änderungen an Textdateien zu verteilen. Sie enthalten die Unterschiede zwischen zwei Versionen einer Datei, die angewendet werden können, um eine Version in eine andere zu transformieren. Dies ist besonders nützlich, wenn Sie Codeänderungen mit anderen teilen oder Konfigurationsdateien auf mehreren Systemen aktualisieren müssen.

Erstellen einer Patch-Datei

Lassen Sie uns eine Patch-Datei erstellen, die die Unterschiede zwischen unseren config1.txt- und config2.txt-Dateien erfasst:

diff -u /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt > /home/labex/project/files/config.patch

Dieser Befehl erstellt eine Patch-Datei namens config.patch im einheitlichen Diff-Format. Lassen Sie uns den Inhalt dieser Patch-Datei untersuchen:

cat /home/labex/project/files/config.patch

Sie sollten eine Ausgabe ähnlich der sehen, die Sie zuvor mit dem diff -u-Befehl gesehen haben:

--- /home/labex/project/files/config1.txt	2023-01-01 00:00:00.000000000 +0000
+++ /home/labex/project/files/config2.txt	2023-01-01 00:00:00.000000000 +0000
@@ -1,4 +1,4 @@
 ## Configuration File for Robot Arm
-motor_speed = 100
+motor_speed = 120
 acceleration = 20
 max_rotation = 180

Anwenden einer Patch-Datei

Jetzt erstellen wir eine Kopie von config1.txt und wenden den Patch an, um sie zu aktualisieren:

cp /home/labex/project/files/config1.txt /home/labex/project/files/config1_copy.txt

Um den Patch anzuwenden, verwenden wir das patch-Kommando:

patch /home/labex/project/files/config1_copy.txt < /home/labex/project/files/config.patch

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Patch erfolgreich angewendet wurde:

patching file /home/labex/project/files/config1_copy.txt

Lassen Sie uns überprüfen, ob die gepatchte Datei jetzt mit config2.txt übereinstimmt:

cat /home/labex/project/files/config1_copy.txt

Die Ausgabe sollte identisch mit config2.txt sein:

## Configuration File for Robot Arm
motor_speed = 120
acceleration = 20
max_rotation = 180

Lassen Sie uns bestätigen, dass es keine Unterschiede zwischen der gepatchten Datei und config2.txt gibt:

diff /home/labex/project/files/config1_copy.txt /home/labex/project/files/config2.txt

Wenn es keine Ausgabe gibt, bedeutet dies, dass die Dateien identisch sind, was bestätigt, dass der Patch korrekt angewendet wurde.

Erstellen komplexerer Patch-Dateien

Lassen Sie uns einen komplexeren Patch erstellen, indem wir mehrere Zeilen in einer neuen Datei ändern:

cp /home/labex/project/files/config1.txt /home/labex/project/files/config4.txt

Jetzt bearbeiten wir die Datei, um mehrere Änderungen vorzunehmen:

echo "## Updated Configuration File for Robot Arm" > /home/labex/project/files/config4.txt
echo "motor_speed = 150" >> /home/labex/project/files/config4.txt
echo "acceleration = 25" >> /home/labex/project/files/config4.txt
echo "max_rotation = 270" >> /home/labex/project/files/config4.txt
echo "safety_limit = enabled" >> /home/labex/project/files/config4.txt

Jetzt erstellen wir eine Patch-Datei für diese Änderungen:

diff -u /home/labex/project/files/config1.txt /home/labex/project/files/config4.txt > /home/labex/project/files/complex.patch

Lassen Sie uns diesen komplexeren Patch betrachten:

cat /home/labex/project/files/complex.patch

Sie sollten eine Patch-Datei sehen, die mehrere Zeilenänderungen anzeigt, einschließlich Hinzufügungen, Modifikationen und möglicherweise Entfernungen.

Patches sind eine effiziente Möglichkeit, Änderungen zu verteilen und die Modifikationen an Dateien zu verfolgen. Sie werden in der Softwareentwicklung weit verbreitet verwendet, um Codeänderungen zu teilen, Updates zu erstellen und Konfigurationen zu verwalten.

Vergleich von Verzeichnissen und Verwendung anderer Vergleichstools

Neben dem Vergleich einzelner Dateien bietet Linux Tools zum Vergleich ganzer Verzeichnisse und alternative Vergleichstools, die für bestimmte Szenarien besser geeignet sein können.

Vergleich von Verzeichnissen mit diff

Das diff-Kommando kann auch Verzeichnisse vergleichen, indem die -r-Option (rekursiv) verwendet wird:

Lassen Sie uns zwei Verzeichnisse mit einigen Dateien erstellen, um sie zu vergleichen:

mkdir -p /home/labex/project/dir1
mkdir -p /home/labex/project/dir2

## Create files in the first directory
echo "This is file 1" > /home/labex/project/dir1/file1.txt
echo "This is file 2" > /home/labex/project/dir1/file2.txt
echo "This is file 3" > /home/labex/project/dir1/file3.txt

## Create similar files in the second directory with some differences
echo "This is file 1 - modified" > /home/labex/project/dir2/file1.txt
echo "This is file 2" > /home/labex/project/dir2/file2.txt
## Note: file3.txt is missing from dir2
echo "This is a new file" > /home/labex/project/dir2/file4.txt

Jetzt vergleichen wir diese Verzeichnisse:

diff -r /home/labex/project/dir1 /home/labex/project/dir2

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

diff -r /home/labex/project/dir1/file1.txt /home/labex/project/dir2/file1.txt
1c1
< This is file 1
---
> This is file 1 - modified
Only in /home/labex/project/dir1: file3.txt
Only in /home/labex/project/dir2: file4.txt

Diese Ausgabe zeigt:

  • Der Inhaltsunterschied in file1.txt
  • file3.txt existiert nur in dir1
  • file4.txt existiert nur in dir2
  • file2.txt ist in beiden Verzeichnissen identisch (es wird also kein Unterschied gemeldet)

Verwendung des diff3-Kommandos

Wenn Sie drei Dateien vergleichen müssen (z. B. beim Zusammenführen von Änderungen aus mehreren Quellen), können Sie das diff3-Kommando verwenden:

Lassen Sie uns eine dritte Konfigurationsdatei mit eigenen Änderungen erstellen:

echo "## Configuration File for Robot Arm" > /home/labex/project/files/config5.txt
echo "motor_speed = 100" >> /home/labex/project/files/config5.txt
echo "acceleration = 30" >> /home/labex/project/files/config5.txt
echo "max_rotation = 180" >> /home/labex/project/files/config5.txt

Jetzt verwenden wir diff3, um alle drei Dateien zu vergleichen:

diff3 /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt /home/labex/project/files/config5.txt

Das Ausgabeformat von diff3 ist etwas komplexer, aber es zeigt, wie sich jede Datei von den anderen unterscheidet, was für die Auflösung von Merge-Konflikten nützlich ist.

Verwendung des colordiff-Kommandos

Das colordiff-Tool ist ein Wrapper für diff, der die gleiche Ausgabe erzeugt, aber mit farbiger Syntaxhervorhebung, was es leichter lesbar macht.

Lassen Sie uns zunächst colordiff installieren:

sudo apt-get update && sudo apt-get install -y colordiff

Jetzt vergleichen wir unsere Dateien mit colordiff:

colordiff /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt

Die Ausgabe wird ähnlich dem regulären diff-Kommando sein, aber mit Farbhervorhebung für hinzugefügte, entfernte und geänderte Zeilen.

Verwendung des wdiff-Kommandos

Das wdiff (Wort-Diff)-Kommando vergleicht Dateien Wort für Wort anstatt Zeile für Zeile, was für Prosa oder Dokumentation nützlicher sein kann:

Lassen Sie uns wdiff installieren:

sudo apt-get update && sudo apt-get install -y wdiff

Lassen Sie uns zwei Dateien mit Satzänderungen erstellen:

echo "The robot arm moves quickly and efficiently." > /home/labex/project/files/sentence1.txt
echo "The robot arm moves slowly but efficiently." > /home/labex/project/files/sentence2.txt

Jetzt vergleichen wir sie mit wdiff:

wdiff /home/labex/project/files/sentence1.txt /home/labex/project/files/sentence2.txt

Sie sollten eine Ausgabe sehen, die die geänderten Wörter hervorhebt:

The robot arm moves [-quickly and-] {+slowly but+} efficiently.

Die verschiedenen Vergleichstools in Linux dienen verschiedenen Zwecken und Szenarien:

  • diff für den allgemeinen Dateivergleich
  • diff -r für den Verzeichnisvergleich
  • diff3 für den Dreifachvergleich
  • colordiff für eine farbhervorhebung Ausgabe
  • wdiff für den Wort-für-Wort-Vergleich

Indem Sie das geeignete Tool für Ihre spezifischen Bedürfnisse auswählen, können Sie den Dateivergleich effektiver und effizienter gestalten.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Dateivergleichstools in Linux effektiv nutzen können, wobei der Schwerpunkt auf dem vielseitigen diff-Kommando lag. Hier sind die wichtigsten Fähigkeiten, die Sie erworben haben:

  1. Grundlegender Dateivergleich: Sie haben gelernt, wie Sie das grundlegende diff-Kommando verwenden, um Unterschiede zwischen Textdateien zu identifizieren. Dies hilft Ihnen, Änderungen in Konfigurationsdateien und Code schnell zu erkennen.

  2. Erweiterte Diff-Optionen: Sie haben verschiedene Optionen wie das einheitliche Format (-u), den Nebeneinander-Vergleich (-y) und das Ignorieren von Leerzeichen (-w) untersucht. Jede Option erfüllt unterschiedliche Vergleichsbedürfnisse.

  3. Patch-Dateien: Sie haben Patch-Dateien erstellt und angewendet. Dies ist eine entscheidende Fähigkeit für die Verteilung von Änderungen, die Aktualisierung von Systemen und die Mitarbeit an Softwareprojekten.

  4. Verzeichnisvergleich: Sie haben die rekursive Option (-r) verwendet, um ganze Verzeichnisse zu vergleichen. Dies hilft Ihnen, Unterschiede in mehreren Dateien gleichzeitig zu identifizieren.

  5. Alternative Vergleichstools: Sie wurden mit spezialisierten Tools wie diff3 für Dreifachvergleiche, colordiff für farbhervorhebung Ausgabe und wdiff für den Wort-für-Wort-Vergleich vertraut gemacht.

Diese Fähigkeiten im Bereich des Dateivergleichs sind grundlegend für die Systemadministration, die Softwareentwicklung und die Konfigurationsverwaltung. Sie ermöglichen es Ihnen, Änderungen zu verfolgen, Probleme zu debuggen, die Versionskontrolle aufrechtzuerhalten und die Konsistenz über verschiedene Systeme hinweg sicherzustellen.

Durch das Beherrschen dieser Tools haben Sie wertvolle Fähigkeiten erworben, die Ihre Effizienz bei der Arbeit mit Textdateien in jeder Linux-Umgebung verbessern werden.