Linux / Befehl cmp: Dateien Byte für Byte vergleichen
Der cmp-Befehl vergleicht zwei Dateien Byte für Byte. Standardmäßig stoppt er beim ersten Unterschied und meldet dessen Byte- und Zeilenposition, was ihn nützlich für schnelle Gleichheitsprüfungen und das Auffinden des frühesten Unterschieds macht.
Ergänzende Befehle und Anwendungsfälle finden Sie in Essenzielle Linux-Befehle: Ein praktisches Nachschlagewerk nach Aufgabe.
Was ist der cmp-Befehl?
Cmp liest beide Eingaben von Anfang an und beendet sich still mit Status 0, wenn die verglichenen Bytes identisch sind. Ein Unterschied erzeugt normalerweise Status 1, während ein Eingabe- oder Ausführungsproblem Status 2 erzeugt. Für Menschen lesbare Zeilenänderungen in Text ist diff normalerweise informativer.
Grundlegende Syntax
cmp [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]
Optionen und Randfälle können je nach Implementierung und Version variieren. Überprüfen Sie cmp --help und man cmp auf dem Zielsystem, bevor Sie sich auf implementierungsspezifisches Verhalten verlassen.
Grundlegende cmp-Verwendung
Vergleiche zwei Dateien
Wenn die Dateien unterschiedlich sind, erkennt die Standardausgabe den ersten Unterschied.
cmp image-a.bin image-b.bin
Gleichheit still prüfen
Verwenden Sie -s und prüfen Sie den Exit-Status in einem Skript.
cmp -s copy.iso original.iso
Vergleichen Sie nur einen Anfangsbereich
GNU cmp akzeptiert -n, um die Anzahl der gelesenen Bytes zu begrenzen.
cmp -n 4096 file-a file-b
Lesen Sie die erste unterschiedliche Byte-Position
cmp vergleicht zwei Dateien Byte für Byte und zeigt Ihnen die erste unterschiedliche Position. Wenn die Dateien identisch sind, gibt es im Grunde nichts aus.
printf 'A' > first.bin printf 'B' > second.bin cmp first.bin second.bin
Beispielausgabe (Formulierungen können je nach Implementierung variieren):
first.bin second.bin differ: byte 1, line 1
Der Exit-Status 1 bedeutet, dass es einen Unterschied gibt, 2 weist auf Probleme wie Lesefehler hin. Wenn Sie keine Bildschirmausgabe in einem Skript wünschen, verwenden Sie cmp -s und überprüfen Sie den Exit-Status.
Wichtige Optionen
| Option | Zweck |
|---|---|
-s, --silent |
Unterdrücke die normale Ausgabe und verwende nur den Exit-Status. |
-l, --verbose |
Drucke die Position und Werte jedes unterschiedlichen Bytes. |
-b, --print-bytes |
Drucke unterschiedliche Bytes in einer darstellbaren Form. |
-i SKIP |
Überspringe eine Anfangsanzahl von Bytes in beiden Eingaben. |
-i SKIP1:SKIP2 |
Unter GNU-Systemen verwende unterschiedliche Überspringmengen für die Eingaben. |
-n LIMIT |
Vergleiche nicht mehr als LIMIT Bytes. |
Praktische Beispiele
In einem Skript nach Gleichheit verzweigen
Verwenden Sie den Exit-Status anstelle des Parsens lokalabhängiger Diagnosetexte.
if cmp -s generated.conf current.conf; then printf '%s\n' 'No change' else printf '%s\n' 'Files differ' fi
Einen festen Header-Bereich vergleichen
Begrenzen Sie den Vergleich, wenn ein Dateiformat eine bekannte Header-Größe hat.
cmp -n 512 disk-a.img disk-b.img
Container-Header überspringen
Verwenden Sie eine unterstützte Überspring-Form, wenn nur der Payload nach einem festen Offset verglichen werden soll.
cmp -i 4096 payload-a.bin payload-b.bin
cmp und verwandte Befehle
| Befehl | Hauptrolle | Geeignet für |
|---|---|---|
cmp |
Erste Abweichung auf Byte-Ebene | Gleichheit und Offset-Diagnose |
diff |
Textänderungen auf Zeilenebene | Lesbarer Textvergleich |
sha256sum |
Unabhängige Datei-Prüfsummen | Überprüfung aus der Ferne oder von vielen Dateien |
comm |
Vergleich sortierter Zeilensätze | Gemeinsame und einzigartige Einträge |
Wichtige Hinweise
Detaillierte Ausgaben können sehr umfangreich sein
Wenn sich eine große Datei durchgehend unterscheidet, kann -l für jedes geänderte Byte eine Zeile ausgeben.
Unterschied von Problemen unterscheiden
Status 1 bedeutet unterschiedlich; Status 2 kann einen Lesefehler, fehlende Eingabe oder ungültigen Aufruf bedeuten.
Byte-Gleichheit ist keine Authentizität
Cmp zeigt, dass die verglichenen Bereiche übereinstimmen; es überprüft nicht Ursprung, Signatur oder Dateiformatgültigkeit.
FAQ
Bedeutet keine Ausgabe, dass die Dateien gleich sind?
Wenn cmp mit Status 0 erfolgreich abgeschlossen wurde, sind die verglichenen Bereiche Byte für Byte gleich.
Wie zeige ich jeden Unterschied an?
Verwenden Sie cmp -l FILE1 FILE2, aber erwarten Sie große Ausgaben, wenn die Unterschiede zahlreich sind.
Kann cmp Textdateien vergleichen?
Ja, aber diff zeigt geänderte Zeilen lesbarer an.
Wie unterscheidet sich cmp von einer Prüfsumme?
Cmp liest zwei Eingaben zusammen, während Prüfsummen unabhängige Digests erzeugen, die über Maschinen oder Zeiträume hinweg praktisch sind.
Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU Diffutils cmp Dokumentation.




