5 Minuten Lesezeit (1086 Worte)

See the difference – Der „vimdiff“

 Das folgende Szenario kann sich sicherlich jede:r Systemadministrator:in nur zu gut vorstellen: Die 1000 Zeilen lange Konfigurationsdatei „server.conf“ soll mit der ebenfalls 1000 Zeilen langen Konfigurationsdatei „server.conf.old“ verglichen werden, um einen Fehler im Produktivsystem zu finden. Nun gibt es grundsätzlich zwei Möglichkeiten: Entweder es ist einem das seltene Talent gegeben, durch ein „cat server.*“ die Änderung sofort zu sehen oder es kommt ein Tool zum Einsatz, das die Unterschiede beider Dateien markiert. Das Tool „vimdiff“ erledigt diese Arbeit sehr gut – und kann darüber hinaus noch mehr.

diff und sdiff 

Diese beiden Linux-Tools sind die wohl bekanntesten zum Markieren von Unterschieden in Textdateien. Jede:r Systemadministrator:in hat sicherlich schon einmal eines davon verwendet. Jedoch fällt es gerade Neueinsteiger:innen häufig schwer, die Ausgabe eines „diff“- Kommandos korrekt zu interpretieren. An folgenden Beispieldateien soll dies demonstriert werden:

Datei A.txt

Das ist Zeile 1
Das ist Zeile 2
Hier steht eine weitere Zeile
Weiterer Text befindet sich in dieser Zeile
Genug Text für heute
 

Datei B.txt 

Das ist Zeile 3
Das ist Zeile 2

Hier steht eine weitere Zeile
Weiterer Text befindet sich in dieser Zeile und es wurde etwas ergänzt
Genug Text für heute
Diese Zeile wurde ergänzt
 

Die Unterschiede sind bei diesem Minimalbeispiel mit bloßem Auge erkennbar:

  • In der ersten Zeile steht jeweils am Ende eine andere Ziffer
  • Die dritte Zeile ist in der Datei B.txt eine Leerzeile
  • Die vierte Zeile in A.txt (bzw. die fünfte Zeile in B.txt) enthält in B.txt mehr Inhalt
  • Die letzte Zeile in B.txt existiert in A.txt nicht

Im Folgenden sollen die beiden Dateien miteinander verglichen werden.

diff 

Dieses Tool wird häufig zum schnellen Vergleich von zwei Dateien verwendet. Beim Aufruf generiert es folgende Ausgabe: 

~$ diff A.txt B.txt
1c1
< Das ist Zeile 1
---
> Das ist Zeile 3
2a3
>
4c5
< Weiterer Text befindet sich in dieser Zeile
---
> Weiterer Text befindet sich in dieser Zeile und es wurde etwas ergänzt
5a7
> Diese Zeile wurde ergänzt
 
Dem Laien wird diese Darstellungsweise sicherlich Schwierigkeiten bereiten; dem geschulten Auge ist eine Dechiffrierung jedoch auf Anhieb möglich.

Der Ausdruck „1c1“ bedeutet, dass die Änderung (c) sich auf Zeile 1 der beiden Dateien A.txt und B.txt bezieht. Hinter dem Zeichen „<“ steht der Inhalt der Zeile 1 aus der Datei, die als erstes Argument an den diff übergeben wurde (A.txt) und hinter „>“ steht der Inhalt der Zeile 1 aus der Datei, die als zweites Argument an den diff übergeben wurde (B.txt).

Mit dem Ausdruck „2a3“ wird deutlich gemacht, dass nach Zeile 2 in A.txt noch eine Zeile hinzugefügt (a) wurde und dies die Zeile 3 in B.txt ist. Nach dem Zeichen „>“ steht der Inhalt der hinzugefügten Zeile in B.txt, der leer ist.

Ähnlich zum ersten Ergebnis (1c1) verhält es sich mit „4c5“ und den darauffolgenden Ausgaben. Die Abkürzung „4c5“ bedeutet, dass ein Unterschied zwischen Zeile 4 in A.txt und Zeile 5 in B.txt existiert (Achtung: In B.txt wurde eine leere Zeile eingefügt). Der Unterschied besteht darin, dass die Zeile um ein paar Wörter ergänzt wurde.

Zum Schluss findet das diff-Kommando noch den Unterschied, dass eine Zeile am Ende in B.txt (diesmal mit Inhalt) ergänzt wurde. Dies lässt sich aus „5a7“ ableiten.

Puuh. Zum Verständnis der Ausgabe ist ganz schön viel Erklärung nötig. Geht das nicht auch ein wenig einfacher und übersichtlicher? 

sdiff 

Die Antwort lautet „Ja“. Ein Buchstabe mehr macht aus dem „diff“ ein „sdiff“ und erzeugt folgende Ausgabe: 

$ sdiff A.txt B.txt
Das ist Zeile 1	|	Das ist Zeile 3
Das ist Zeile 2		Das ist Zeile 2
	>	
Hier steht eine weitere Zeile  		Hier steht eine weitere Zeile  
Weiterer Text befindet sich in dieser Zeile	|	Weiterer Text befindet sich in dieser Zeile und es wurde etwa
Genug Text für heute		Genug Text für heute
	>	Diese Zeile wurde ergänzt
 

Diese Art der Ausgabe ist schon etwas übersichtlicher, da hier geänderte bzw. ergänzte Zeilen direkt gegenübergestellt werden. Das „|“ Zeichen bedeutet, dass in dieser Zeile eine Änderung vorliegt, während das „>“ und „<“ Zeichen jeweils auf eine ergänzte Zeile in einer der beiden Textdateien hinweist. Um noch bessere Ergebnisse zu erzielen, bietet „sdiff“ noch einige Optionen beim Aufruf, die in der entsprechenden man-Page ersichtlich sind.

So weit, so gut. Aber existiert nicht ein Tool, mit dem Änderungen grafisch angezeigt werden und bei Bedarf übernommen werden können?

vimdiff 

Auch hier lautet die Antwort „Ja“. Der „vimdiff“ ist ein auf Basis des „vim“ basierendes Tool, mit dem sich Änderungen übersichtlich anzeigen lassen. Mit dem Aufruf vimdiff A.txt B.txt erscheint folgende farbenfrohe Ausgabe:

Abbildung: Ausgabe vimdiff

Hier fallen selbst ungeübten Administrator:innen Unterschiede auf, da der „vimdiff“ die entsprechenden Stellen farblich markiert und die beiden Dateien nach ihrem Aufruf nebeneinander anzeigt. Die pinkfarbene Markierung der Zeile zeigt an, dass sich innerhalb der Zeile etwas geändert hat. Die rote Markierung innerhalb der pinken Markierung zeigt auch noch die genaue Stelle innerhalb der Zeile an. Gestrichelte, türkisfarbene Zeilen machen deutlich, dass die zu vergleichende Zeile aus der anderen Datei hier fehlt. In B.txt existieren zwei Zeilen, die in A.txt nicht existieren. Die dunkelblaue Markierung in B.txt weist darauf hin.

Die Bedienung des „vimdiff“ orientiert sich dabei an der Bedienung des normalen „vim“. Um zwischen den beiden Dateien im Fenster zu wechseln, muss „STRG+WW“ eingegeben werden. Um gleichzeitig alle Dateien zu speichern oder zu schließen, muss ein „:wa“, bzw. „:qa“ eingegeben werden.

Beim Vergleichen von zwei Textdateien A.txt und B.txt ist es ebenfalls möglich, Änderungen zu übernehmen. Dazu wird in die betreffende Zeile von A.txt navigiert, die eine Änderung aufweist. Die Änderung aus dem Dokument B.txt kann mit „do“ im Befehlsmodus übernommen werden. Soll die Zeile aus A.txt nach B.txt kopieren, ist das Kommando „dp“ zu nutzen.

Alle hier verwendeten und weitere Kommandos des „vim“ bzw. „vimdiff“ lassen sich im „Vim Cheat Sheet1 nachlesen.

Fazit 

Der „vimdiff“ ist ein mächtiges Werkzeug zum Vergleichen von zwei oder mehr Dateien. Durch die simple, an den „vim“ angelehnte Bedienung ist es möglich, durch minimalen Aufwand eine übersichtliche Darstellung sämtlicher Unterschiede zu erhalten. Bei Bedarf können die Änderungen schnell übernommen bzw. verworfen werden. Für Einsteiger:innen im Linux/Unix-Umfeld ist, sofern die Bedienung des „vim“ kein Problem darstellt, der „vimdiff“ ein hilfreiches Tool. Es müssen keine kryptischen Ausgaben entschlüsselt werden, um die Unterschiede von Dateien zu erkennen. 

Seminarempfehlung

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Gäste
Freitag, 07. Oktober 2022

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie