Der Befehl cmp
In diesem Beitrag lernen Sie den Befehl cmp (compare) kennen, welcher unter UNIX- / Linux-Betriebssystemen eingesetzt wird, um zwei Dateien byteweise miteinander zu vergleichen. Hierdurch ist cmp insbesondere für den Vergleich von Binärdateien geeignet. Er ähnelt anderen Befehlen für den Vergleich von Dateien, wie beispielsweise dem Befehl diff.
Der Befehl ist Teil des Pakets diffutils und somit auf den meisten Systemen bereits vorinstalliert.
Allgemeine Syntax
Die allgemeine Syntax von cmp lautet folgendermaßen:
cmp [Optionen] [Datei 1] [Datei 2]
Werden keine Optionen übergeben, dann zeigt diff standardmäßig die Position an, ab welcher sich die Bytes der beiden Dateien erstmals voneinander unterscheiden.
Beispiel: cmp ohne Optionen
Dieses Beispiel zeigt kurz die Anwendung des Befehls cmp ohne Optionen. Verglichen werden zwei kleine Textdateien, dessen Inhalte sich leicht voneinander unterscheiden.
Inhalt Eingabedatei 1 ("benutzer1.txt"):
bibo admina hedv bernie tiffy
Inhalt Eingabedatei 2 ("benutzer2.txt"):
bibo kermit hedv tiffy bernie
Eingabe:
cmp werden nun nur die beiden Dateien "benutzer1.txt" und "benutzer2.txt" für den Vergleich übergeben.
cmp benutzer1.txt benutzer2.txt
Nach Ausführung:
Der Ausgabe ist nun zu entnehmen, dass sich beide Dateien erstmals in ihrem 6. Byte, welches sich in Zeile 1 befindet, voneinander unterscheiden.
benutzer1.txt benutzer2.txt differieren: Byte 6, Zeile 1
Wichtige Optionen
Dieser Abschnitt behandelt die wichtigsten Optionen des Befehls diff.
-b - Unterschiedliche Bytes ausgeben
Mithilfe der Option -b ist es möglich, die sich unterscheidenden Bytes auszugeben.
cmp -b [Datei 1] [Datei 2]
Beispiel: Option -b
Dieses Beispiel zeigt die Verwendung der Option -b für die zusätzliche Ausgabe der unterscheidenden Bytes. Es werden wieder dieselben beiden Eingabedateien "benutzer1.txt" und "benutzer2.txt", wie im ersten Beispiel ohne Optionen verwendet.
Eingabe:
cmp -b benutzer1.txt benutzer2.txt
Ausgabe:
Es werden nun zusätzlich ASCII-Code und das tatsächliche Zeichen ausgegeben.
benutzer1.txt benutzer2.txt differieren: Zeichen 6, Zeile 1 ist 12 ^J 153 k
-i - Erste Anzahl Bytes überspringen
Die Option -i ermöglicht das Überspringen einer definierten Anzahl Bytes in den Eingabedateien. Wird ein positiv ganzzahliger Wert N für die Anzahl angegeben, so überspringt cmp die ersten N Bytes beider Dateien:
cmp -i [N] [Datei 1] [Datei 2]
Alternativ ist auch die Angabe zweier durch einen Doppelpunkt ":" getrennter Werte N, M möglich. In diesem Fall überspringt cmp die ersten N Bytes der ersten Eingabedatei und die ersten M Bytes der zweiten Eingabedatei:
cmp -i [N]:[M] [Datei 1] [Datei 2]
Beispiel: Option -i
Hier werden mithilfe der Option -i eine bestimmte Anzahl Bytes zu Beginn der beiden Eingabedateien übersprungen. Es werden wieder die bereits bekannten Dateien verwendet.
Eingabe:
Der Option -i wird der Wert 12 übergeben, um 12 Bytes zu überspringen. Übersprungen wird somit in der ersten Eingabedatei die Zeichenkette "bibo admina " und in der zweiten Eingabedatei "bibo kermit ". Zur Verdeutlichung wird hier auch wieder die Option -b mit angegeben.
cmp -i 12 -b benutzer1.txt benutzer2.txt
Ausgabe:
In der Ausgabe ist zu sehen, dass sich die beiden nun verglichenen Inhalte ab dem 6. Zeichen voneinander unterscheiden.
benutzer1.txt benutzer2.txt differieren: Zeichen 6, Zeile 1 ist 12 ^J 164 t
-l - Alle unterscheidenden Bytes ausgeben
Wird die Option -l angegeben, dann gibt cmp nicht nur das erste sich unterscheidende Byte, sondern alle aus.
cmp -l [Datei 1] [Datei 2]
Beispiel: Option -l
Dieses Beispiel zeigt die Anwendung der Option -l für die Ausgabe aller unterscheidenden Bytes.
Inhalt Eingabedatei 1 ("silos1.txt"):
it-consulting linux e-business
Inhalt Eingabedatei 2 ("silos2.txt"):
it-consulting fotos e-business
Eingabe:
cmp -l silos1.txt silos2.txt
Nach Ausführung:
In der Ausgabe sind nun zeilenweise die Unterschiede zwischen beiden Dateien zu entnehmen. Zu Beginn jeder Zeile steht dabei jeweils die Position der sich unterscheidenden Bytes. Darauf folgt zuerst der ASCII-Code des Zeichens in der ersten Datei und dann der des Zeichens in der zweiten Datei.
15 154 146
16 151 157
17 156 164
18 165 157
19 170 163
Beispiel: Option -l kombiniert mit Option -b
Die Option -l wird in diesem Beispiel mit der Option -b kombiniert, um neben den ASCII-Codes auch die tatsächlichen Zeichen auszugeben. Es werden dieselben Eingabedateien verwendet, wie im vorherigen Beispiel.
Eingabe:
cmp -l -b silos1.txt silos2.txt
Nach Ausführung:
Links neben den ASCII-Codes werden nun jeweils auch die Zeichen ausgegeben. Hierdurch wird in diesem Fall direkt erkennbar, dass sich die beiden Wörter "linux" und "fotos" (unten hervorgehoben) in den Inhalten der Eingabedateien unterscheiden.
15 154 l 146 f
16 151 i 157 o
17 156 n 164 t
18 165 u 157 o
19 170 x 163 s
-n - Höchstens N Bytes vergleichen
Durch Angabe der Option -n lässt sich festlegen, dass maximal N Bytes verglichen werden.
cmp -n [N] [Datei 1] [Datei 2]
Beispiel: Option -n
In diesem Beispiel wird die Option -n verwendet, um nur bis zu einer definierten maximalen Anzahl Bytes zu vergleichen. Auch hier werden dieselben Eingabedateien verwendet, wie im vorangegangenen Beispiel.
Eingabe:
Der Option -n wird der Wert 18 übergeben, um maximal 18 Bytes der Eingabedateien zu vergleichen. Weiterhin werden hier zugunsten einer verständlicheren Ausgabe auch die Optionen -l und -b verwendet.
cmp -n 18 -l -b silos1.txt silos2.txt
Nach Ausführung:
Der Ausgabe sind die bereits bekannten Unterschiede zwischen beiden Dateien nun nur bis zum 18. Byte zu entnehmen. Ab dem 19. Byte wurde nicht weiter verglichen, wodurch auch die beiden sich unterscheidenden Zeichen "x" und "s" nicht länger angezeigt werden.
15 154 l 146 f
16 151 i 157 o
17 156 n 164 t
18 165 u 157 o
Abonniere JETZT unseren Newsletter!
Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!