Der Befehl diff

file-difference-featured

Mit dem Standard - Befehl diff können Sie über die Kommandozeile eines Linux-Systems den Inhalt zweier Dateien oder auch Verzeichnisse vergleichen. diff gibt dann aus, worin sich der Inhalt der ersten Datei mit dem der zweiten Datei unterscheidet. Grundsätzlich werden die verglichenen Dateien von diff nicht verändert. Es ist Teil des Standard - Softwarepaketes GNU diffutils und ist somit in den meisten Linux-Distributionen bereits enthalten.

Installation

diff ist Teil des Standard-Softwarepakets GNU diffutils und ist bei den meisten Linux-/UNIX-Distributionen bereits installiert.

Syntax

Die allgemeine Syntax des Befehls diff lautet wie folgt:

diff [Optionen] Datei1 Datei2

Dabei ist es wichtig zu verstehen, wie diff die angegebenen Dateien vergleicht und was es mit der Ausgabe meint. diff gibt die Unterschiede so an, wie Sie den Inhalt der ersten Datei modifizieren müssen, damit er identisch mit dem Inhalt der zweiten Datei ist.

Beispiele

Im folgenden Beispiel werden zwei einfache Text-Dateien "befehl-diff1.txt" und "befehl-diff2.txt" mit diff ohne zusätzliche Optionen verglichen. diff zeigt uns in seiner Ausgabe dann, welche Zeilen aus der ersten Datei geändert werden müssen, damit sie mit denen aus der zweiten Datei gleicht:

Inhalt der Datei "befehl-diff1.txt"

Ich lerne Linux...
...auf profi-tutorials...
...weil es spass macht.


Inhalt der Datei "befehl-diff2.txt"

Wir lernen Linux...
...auf Profi-Tutorials...
...weil es Spaß macht.

Beispiel - diff (change)

Eingabe:

diff befehl-diff1.txt befehl-diff2.txt

Ausgabe:

1,4c1,3
< Ich lerne Linux...
< ...auf profi-tutorials...
< ...weil es spass macht.
<
---
> Wir lernen Linux...
> ...auf Profi-Tutorials...
> ...weil es Spaß macht.

In der Ausgabe gibt diff in der ersten Zeile an, wie die erste Datei "befehl-diff1.txt" inhaltlich geändert werden muss, damit sie dem Inhalt der zweiten Datei "befehl-diff2.txt" gleicht und listet ab Zeile zwei der Ausgabe alle weiteren nicht übereinstimmenden Zeilen der beiden Dateien auf.

In diesem Beispiel bedeutet die erste Zeile "1,4c1,3" folgendes:

Die Zeilen 1 bis (,) 4 in der ersten Datei (<) müssen geändert werden (change), damit die Zeilen 1 bis (,) 3 der zweiten Datei (>) übereinstimmen.

Die weiteren Zeilen der Ausgabe verdeutlichen die Zeilen aus der ersten Datei, die NICHT mit den Zeilen aus der zweiten Datei übereinstimmen. Dabei bedeutet das "<" am Anfang der Zeilen, dass diese aus der ersten Datei stammen und das ">" am Anfang der Zeilen, dass diese aus der zweiten Datei sind.

Die Zeichenfolge "---" der Ausgabe des Beispiels besagt, dass der Inhalt der ersten Datei nun zu Ende ist und alle weiteren Zeilen aus der zweiten Datei sind.

Damit der Inhalt der ersten Datei "befehl-diff1.txt" nun dem Inhalt der zweiten Datei "befehl-diff2.txt" gleicht, müssen wir folgendes in der ersten Datei ändern:

Zeile 1: "Ich" muss zu "Wir" und "lerne" zu "lernen" geändert werden.

Zeile 2: "profi-tutorials" muss zu "Profi-Tutorials" geändert werden.

Zeile 3: "spass" muss zu "Spaß" geändert werden.

Zeile 4: Diese Leerzeile muss entfernt werden.

In einem weiteren Beispiel werden wieder zwei Text-Dateien "befehl-diff3.txt" und "befehl-diff4.txt" mit diff verglichen, aber dieses Mal fehlt in der ersten Datei eine Zeile, ansonsten sind die Inhalte identisch:

Inhalt der Datei "befehl-diff3.txt"

Wir lernen Linux...
...weil es Spaß macht.

Inhalt der Datei "befehl-diff4.txt"

Wir lernen Linux...
...auf Profi-Tutorials...
...weil es Spaß macht.

Beispiel2 - diff (add)

Eingabe:

diff befehl-diff3.txt befehl-diff4.txt

Ausgabe:

1a2
> ...auf Profi-Tutorials...

Hier gibt diff in der ersten Zeile mit "1a2" seiner Ausgabe an, dass NACH der ersten (1) Zeile der ersten Datei die zweite (2) Zeile aus der zweiten Datei hinzugefügt (add) werden muss, damit die Inhalte beider Dateien identisch sind. Anschließend wird die Zeile der zweiten Datei (>) ausgegeben, die hinzugefügt werden muss.

Weiterhin kann diff auch die Inhalte zweier Verzeichnisse miteinander vergleichen. Dabei listet diff in seiner Ausgabe wie üblich nur die Unterschiede auf. Dies zeigen wir im folgenden Beispiel. Verglichen werden dabei die beiden Verzeichnisse "diff-verzeichnis1" und "diff-verzeichnis2":

Inhalt des Verzeichnisses "diff-verzeichnis1"

-rw-r--r-- 1 root root 0 Mai 1 19:50 profi.txt

Inhalt des Verzeichnisses "diff-verzeichnis2"

-rw-r--r-- 1 root root 0 Mai 1 19:50 profi.txt
-rw-r--r-- 1 root root 0 Mai 1 19:50 tutorials.txt

Beispiel - diff (Verzeichnisse)

Eingabe:

diff diff-verzeichnis1 diff-verzeichnis2

Ausgabe:

Nur in diff-verzeichnis2: tutorials.txt.

Die wichtigsten Optionen

diff kann auch mit zusätzlichen Optionen aufgerufen werden. Im Folgenden werden einige beschrieben.

--help (Hilfe)

Mit der Option --help können Sie sich die Hilfe von diff ausgeben lassen.

diff --help

-q - Quick

-q (quick) können Sie verwenden, wenn Sie einfach schnell wissen möchten, ob sich die Inhalte zweier Dateien überhaupt voneinander unterscheiden. Die Ausgabe von diff bleibt leer, wenn keine inhaltlichen Unterschiede vorhanden sind, andernfalls wird ausgegeben, dass sie sich unterscheiden:

Beispiel -q

Eingabe:

diff -q befehl-diff1.txt befehl-diff2.txt

Ausgabe:

Dateien befehl-diff1.txt und befehl-diff2.txt sind verschieden.

-s - Same

Mit -s (same) gibt diff zusätzlich aus, wenn die beiden angegebenen Dateien inhaltlich identisch sind:

Beispiel -s

Eingabe:

diff -s befehl-diff2.txt befehl-diff4.txt

Ausgabe:

Dateien befehl-diff2.txt und befehl-diff4.txt sind identisch.

-y

diff gibt mit der Option -y (side by side) die Inhalte der beiden Dateien in zwei Spalten aus und markiert die Zeilen, die unterschiedlich sind:

Beispiel 1 -y

Eingabe:

diff -y befehl-diff1.txt befehl-diff2.txt

Ausgabe:

Ich lerne Linux...        |Wir lernen Linux...
...auf profi-tutorials... |...auf Profi-Tutorials...
...weil es spass macht.   |...weil es Spaß macht.
                          <

Die erste Spalte beinhaltet die Zeilen aus der ersten Datei "befehl-diff1.txt" und die zweite Spalte die Zeilen aus der zweiten Datei "befehl-diff2.txt".

Das Zeichen "|" bedeutet, dass die beiden Zeilen sich inhaltlich unterscheiden.

Das Zeichen "<" bedeutet, dass diese Zeile der ersten Datei in der zweiten Datei nicht vorkommt.

Beispiel 2 -y

Eingabe:

diff -y befehl-diff3.txt befehl-diff4.txt

Ausgabe:

Wir lernen Linux...        Wir lernen Linux...
                          >...auf Profi-Tutorials...
...weil es Spaß macht.     ...weil es Spaß macht.

Das Zeichen ">" bedeutet, dass in der ersten Datei "befehl-diff3.txt" die Zeile aus der zweiten Datei "befehl-diff4.txt" fehlt.

diff hat noch weitere Optionen, unter Anderem die Option -e (ed-Script), womit Sie ein ed-Skript erstellen können. Dieses Skript kann dann mit einem Editor wie "ed" oder "ex" genutzt werden, um den Inhalt der ersten Datei so zu ändern, dass er mit dem Inhalt der zweiten Datei übereinstimmt.

Abonniere JETZT unseren Newsletter!


Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!

Tristan Stanullo

Click Here to Leave a Comment Below

Leave a Comment: