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

OptionAusgabeformatTypischer NutzenHinweis zur Interpretation

-x — Hexadezimale Ganzzahlen — allgemeine Binäranalyse — häufig mehrbyteige Einheiten

-i — Dezimale vorzeichenbehaftete Ganzzahlen — numerische Interpretation — Gruppierung zu größeren Einheiten möglich

-c — Zeichen und Escape-Sequenzen — Text und Steuerzeichen prüfen — Anzeige ist nicht gleich Bytewert

-tx1 — Hexadezimal, ein Byte pro Wert — bytegenaue Untersuchung — besonders für Rohbytes geeignet

-An — keine Offsetspalte — Weiterverarbeitung und Vergleiche — Datenwerte stehen ohne Adressen

-N ANZAHL — nur eine Byteanzahl lesen — Dateianfang oder Header prüfen — Ausgabe endet nach der angegebenen Länge

-j OFFSET — Bytes am Anfang überspringen — bestimmten Dateibereich untersuchen — Offset ist die Sprungposition

-v — Wiederholungen nicht verkürzen — vollständige Ausgabe identischer Bereiche — verhindert die Sternchen-Kürzung

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.

Dateiinhalte auf Byte-EbeneOktale AnsichtHexadezimale AnsichtZeichenansichtErklärung

A10141A — druckbares ASCII-Zeichen

Leerzeichen — 04020 — Leerzeichen — sichtbar vorhanden, aber optisch unauffällig

Zeilenumbruch — 0120a\n — beendet bei vielen Textformaten eine Zeile

Nicht druckbares Byte — beispielsweise 00000\0 — kein normales sichtbares Zeichen

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

WerkzeugHauptzweckStärkeWann od vorzuziehen ist

od — formatierbare Rohdatenanzeige — viele Zahlen- und Zeichenformate, Offsets und Bereichsoptionen — wenn Daten flexibel als Oktal, Hexadezimal, Dezimal oder Zeichen untersucht werden sollen

hexdump — formatierte Hexdump-Ausgabe — übersichtliche Standardformate und anpassbare Ausgabe — wenn ein klassischer Hexdump im Vordergrund steht

xxd — Hexdump und Rückwandlung — kompakte Hexansicht, teils praktisch für Editor-Workflows — wenn Hexdump oder Rückkonvertierung im gewünschten Werkzeug besser passt

strings — druckbare Zeichenketten extrahieren — findet lesbare Textfragmente in Binärdateien — nicht als Ersatz für eine vollständige Byteansicht

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

  • od bedeutet ursprünglich octal dump und zeigt Dateidaten formatiert an.
  • Ohne Datei liest od von der Standardeingabe, beispielsweise aus einer Pipe.
  • Die erste Ausgabespalte ist ein Offset; sie erscheint standardmäßig üblicherweise oktal.
  • -x wählt Hexadezimal-, -i Dezimal- und -c Zeichenanzeige.
  • -tx1 ist die passende Wahl für eine bytegenaue hexadezimale Analyse.
  • -N begrenzt die Länge, -j überspringt einen Bereich und -v verhindert das Zusammenfassen identischer Zeilen.
  • Bei mehrbyteigen Zahlen müssen Gruppierung und Endianness berücksichtigt werden.
  • strings extrahiert 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.