VMware ESXi and vSphere Cluster Management
Linux od-Befehl: Dateien als Oktal-, Hexadezimal- und Dezimaldump ausgeben
Lernen Sie den Linux-Befehl od kennen: Oktal-, Hexadezimal-, Dezimal- und Zeichendarstellung, Offsets, Bytebreite, Pipes und praktische Optionen.
Der Linux-Befehl od stellt den Inhalt einer Datei als Zahlenwerte oder Zeichen dar. Dadurch lassen sich auch Binärdateien, ausführbare Programme, Steuerzeichen und andere Rohdaten untersuchen, die im normalen Texteditor oder mit cat schwer verständlich wären.
Was bedeutet od?
od steht ursprünglich für octal dump, also eine Datendarstellung im Oktalsystem. Ein Byte besteht aus 8 Bit und kann als Zahl, Hexadezimalwert, Oktalwert oder Zeichen angezeigt werden. Der Befehl verändert die Datei nicht, sondern liest sie und schreibt eine formatierte Darstellung auf die Standardausgabe.
Typische Einsatzfälle sind:
- Untersuchen von Binärdateien und ausführbaren Programmen
- Prüfen von Dateiköpfen und Dateisignaturen
- Sichtbarmachen von Leerzeichen, Tabulatoren und Zeilenumbrüchen
- Kontrollieren von Rohdaten aus Pipes oder Geräten
- Vergleichen einzelner Bytebereiche
Grundsyntax
od [OPTIONEN] [DATEI]
Mit einer angegebenen Datei liest od deren Inhalt:
od datei.txt
Wird keine Datei angegeben, liest od von der Standardeingabe. Das ist die normale Eingabequelle eines Prozesses, beispielsweise eine Pipe:
printf 'ABC\n' | od -c
Der Befehl liest hier die vier Bytes A, B, C und den Zeilenumbruch aus der Pipe.
Die Standardausgabe im Oktalformat
Ohne Formatoption verwendet od eine oktale Darstellung. Oktal ist ein Zahlensystem zur Basis 8 und verwendet nur die Ziffern 0 bis 7. Eine typische Ausgabe kann etwa so aussehen:
$ printf 'ABC\n' | od
0000000 041103 00512
0000005
Die erste Spalte ist der Offset. Er bezeichnet die Byteposition, an der die jeweilige Ausgabezeile beginnt. In der Standardausgabe erscheint dieser Offset üblicherweise oktal. Die folgenden Werte sind die dargestellten Dateidaten.
Wichtig: Die Standardausgabe und Optionen wie -x gruppieren Bytes je nach Format oft zu größeren Einheiten. Deshalb ist ein ausgegebener Zahlenwert nicht immer genau ein einzelnes Byte. Die Anzeige ist eine Interpretation des Byteinhalts, nicht zusätzlicher Inhalt der Datei.
Oktalwerte begegnen unter Unix außerdem häufig bei Dateiberechtigungen, beispielsweise in einer Angabe wie 755. Das ist ein praktischer Grund, warum Oktal in der Linux-Welt weiterhin vertraut ist.
Ausgabeformate auswählen
Hexadezimal
Mit -x werden Werte hexadezimal ausgegeben:
od -x datei.txt
Hexadezimal ist ein Zahlensystem zur Basis 16. Es verwendet 0 bis 9 und a bis f. Zwei Hexadezimalziffern können ein Byte übersichtlich darstellen, weshalb dieses Format bei Byteanalysen sehr verbreitet ist.
Dezimal
-i verwendet dezimale, vorzeichenbehaftete Ganzzahlen:
od -i datei.txt
Dezimal ist die Basis 10, also das Zahlensystem des täglichen Rechnens. Bei -i werden Daten normalerweise in größeren Einheiten gruppiert. Der Zahlenwert ist daher nicht zwingend der dezimale Wert eines einzelnen Bytes.
Zeichen
-c versucht, die Bytes als Zeichen darzustellen:
od -c datei.txt
Sichtbare Zeichen erscheinen lesbar. Nicht druckbare Bytes werden durch symbolische Darstellungen kenntlich gemacht, zum Beispiel \n für Zeilenumbruch, \t für Tabulator und \0 für ein Nullbyte. Leerzeichen sind als Zeichen vorhanden, können aber in einer Ausgabe optisch unauffällig sein.
Der tatsächliche Dateiinhalt bleibt immer derselbe. Nur die Anzeigeform ändert sich. Ein Byte mit dem Hexadezimalwert 41 kann beispielsweise als Oktalwert 101, als Dezimalwert 65 oder als Zeichen A erscheinen.
Wichtige Optionen und Ausgabearten
Bytegenaue Hexadezimalansicht
Für eine Untersuchung Byte für Byte ist -tx1 meist geeigneter als -x. Die 1 bedeutet eine Gruppierung zu Einheiten von einem Byte:
od -An -tx1 datei.bin
-An unterdrückt dabei die Offsetspalte. Das ist nützlich, wenn ausschließlich die Bytewerte weiterverarbeitet oder mit einer anderen Ausgabe verglichen werden sollen.
Ein Offset kann stattdessen sichtbar bleiben, wenn die Positionen wichtig sind:
od -tx1 datei.bin
Zeichen, Leerzeichen und Steuerzeichen
Im Zeichenmodus werden druckbare Zeichen direkt und Steuerzeichen symbolisch ausgegeben. Ein Steuerzeichen ist ein nicht direkt druckbares Zeichen, etwa ein Zeilenumbruch oder Tabulator.
Bei UTF-8 kann ein sichtbares Zeichen aus mehreren Bytes bestehen. Die Darstellung als Zeichen hängt daher von der Zeichenkodierung ab. Für eine unabhängige Byteprüfung ist -tx1 die klarere Wahl.
Offsets korrekt lesen
Ein Offset ist die Byteposition innerhalb einer Datei. Beginnt eine Ausgabezeile mit dem Offset 0000020, beginnt dieser Datenblock an der Position 16 im Dezimalsystem, weil die Standard-Offsetanzeige oktal ist.
Offsets helfen, einen bekannten Bereich wiederzufinden, beispielsweise einen Dateikopf ab Position 0 oder eine Struktur ab Byte 16. Die Basis der Adressanzeige kann mit Adressformaten beeinflusst werden, etwa -Ad für dezimale, -Ao für oktale oder -Ax für hexadezimale Adressen:
od -Ax -tx1 datei.bin
Wenn die Positionen nicht gebraucht werden, blendet -An sie aus.
Datenbreite, Gruppierung und Endianness
Ein Byte ist eine einzelne 8-Bit-Einheit. Formate wie -i und -x können jedoch mehrere Bytes zu einem Zahlenwert zusammenfassen. Dadurch erscheinen weniger Werte als tatsächlich Bytes gelesen wurden.
Bei einem mehrbyteigen Wert spielt die Endianness eine Rolle. Sie bezeichnet die Reihenfolge, in der die Bytes eines Zahlenwerts gespeichert sind. Bei Little-Endian steht das niederwertige Byte zuerst, bei Big-Endian das höherwertige. Derselbe Byteblock kann deshalb je nach Interpretation unterschiedliche Zahlen ergeben.
Wenn eine Zahl unerwartet wirkt, prüfen Sie zunächst die Rohbytes:
od -An -tx1 datei.bin
Danach vergleichen Sie die Byte-Reihenfolge mit der Dokumentation des Dateiformats. Eine Zahlenanzeige von od beweist nicht automatisch, dass die Datei diese Zahl in genau dieser Bedeutung enthält.
Nur bestimmte Dateibereiche anzeigen
Ausgabe begrenzen
Mit -N wird die Anzahl der gelesenen Bytes begrenzt. So lässt sich beispielsweise nur ein Dateikopf mit 32 Bytes untersuchen:
od -An -tx1 -N 32 datei.bin
Ab einem Offset beginnen
-j überspringt Bytes am Dateianfang. Der folgende Befehl zeigt 16 Bytes ab Position 16:
od -An -tx1 -j 16 -N 16 datei.bin
Auf diese Weise können bekannte Datenbereiche gezielt geprüft werden, ohne die gesamte Datei auszugeben.
Wiederholte Zeilen vollständig ausgeben
Wiederholt sich eine komplette Ausgabezeile, verkürzt od längere Folgen standardmäßig möglicherweise mit einer Zeile aus Sternchen. Mit -v wird jede Zeile ausgegeben:
od -v -An -tx1 datei.bin
Das ist besonders bei Nullbytes oder Füllbereichen hilfreich.
Offsets für Weiterverarbeitung ausblenden
Für Vergleiche, Skripte oder weitere Pipes ist eine Ausgabe ohne Adressen oft einfacher:
od -An -tx1 datei.bin
Beachten Sie, dass Leerraum zwischen den ausgegebenen Werten weiterhin zur Formatierung gehört. Wenn ein Skript einzelne Werte verarbeiten soll, kann es die Felder anschließend mit üblichen Shell-Werkzeugen aufteilen.
Praktische Beispiele
Textdatei standardmäßig untersuchen
od datei.txt
Sie sehen die Offsetspalte und oktale Datenwerte. Die Ausgabe ist eine Rohdatenansicht und kein normaler Fließtext.
Dasselbe Material in verschiedenen Formaten prüfen
od datei.txt
od -x datei.txt
od -i datei.txt
od -c datei.txt
Die Befehle lesen dieselben Bytes, zeigen sie aber unterschiedlich. -c eignet sich für Text und Steuerzeichen, -x für kompakte Byte- oder Wortwerte und -i für eine dezimale Zahleninterpretation.
Standardeingabe untersuchen
printf 'ABC\n' | od -c
Der Zeilenumbruch wird als \n sichtbar. Ohne Datei liest od so lange von der Standardeingabe, bis die Eingabequelle endet.
Abgrenzung zu verwandten Werkzeugen
cat ist für die normale Ausgabe von Text gedacht. Es zeigt Binärdaten nicht strukturiert an und kann Steuerzeichen unauffällig oder problematisch darstellen. od macht dagegen die numerische oder symbolische Repräsentation der gelesenen Bytes sichtbar.
Fehlerbehebung
Die Ausgabe zeigt nicht den erwarteten Text
Ursache: od zeigt standardmäßig numerische Bytewerte und keinen normalen Text. Lösung: Verwenden Sie -c für eine Zeichenansicht. Für die Rohdatenanalyse bleiben numerische Formate sinnvoll.
Offsets scheinen falsch zu sein
Ursache: Die Standard-Offsetspalte kann oktal sein. Lösung: Nutzen Sie beispielsweise -Ad für dezimale Adressen oder -Ax für hexadezimale Adressen. Mit -An können Sie die Offsetspalte ausblenden.
Bei -x erscheinen weniger Werte als Bytes
Ursache: Das Format gruppiert mehrere Bytes zu größeren Einheiten. Lösung: Verwenden Sie -tx1 für eine Byte-für-Byte-Ansicht.
Zahlenwerte wirken vertauscht
Ursache: Die Endianness des mehrbyteigen Werts wurde nicht berücksichtigt. Lösung: Prüfen Sie die einzelnen Rohbytes mit -tx1 und vergleichen Sie deren Reihenfolge mit der Spezifikation des Dateiformats.
Wiederholte Bereiche erscheinen als Sternchen
Ursache: Identische Ausgabezeilen werden standardmäßig zusammengefasst. Lösung: Verwenden Sie -v, um alle Zeilen auszugeben.
Die Datei kann nicht geöffnet werden
Ursachen: falscher Pfad, Tippfehler im Dateinamen oder fehlende Leseberechtigung. Prüfen Sie den Pfad mit ls, setzen Sie Dateinamen mit Leerzeichen in Anführungszeichen und kontrollieren Sie die Zugriffsrechte.
Prüfungsrelevante Merksätze
odbedeutet ursprünglich octal dump und zeigt Dateidaten formatiert an.- Ohne Datei liest
odvon der Standardeingabe, beispielsweise aus einer Pipe. - Die erste Ausgabespalte ist ein Offset; sie erscheint standardmäßig üblicherweise oktal.
-xwählt Hexadezimal-,-iDezimal- und-cZeichenanzeige.-tx1ist die passende Wahl für eine bytegenaue hexadezimale Analyse.-Nbegrenzt die Länge,-jüberspringt einen Bereich und-vverhindert das Zusammenfassen identischer Zeilen.- Bei mehrbyteigen Zahlen müssen Gruppierung und Endianness berücksichtigt werden.
stringsextrahiert nur druckbare Zeichenketten und ersetzt keine vollständige Byteansicht.
Als nächstes können Sie die Darstellung mit dem od-Befehl anhand eigener Text- und Binärdateien üben.