Linux od-Befehl: Dateien als Oktal-, Hexadezimal-, Dezimal- und Zeichendump anzeigen
Lernen Sie den Linux-Befehl od kennen: Dateien oktal, hexadezimal, dezimal oder als Zeichen anzeigen, Offsets wählen und Datenbereiche begrenzen.
Der Linux-Befehl od untersucht Dateiinhalte in einer formatierten Rohdatenansicht. Das ist besonders hilfreich bei Binärdateien, Programmcodes, Steuerzeichen und Dateien mit ungewöhnlichen oder nicht direkt lesbaren Zeichen.
Was ist der od-Befehl?
od steht für octal dump, also „Oktaldump“. Ein Dump ist eine Ausgabe, die die Daten einer Eingabe in einer bestimmten Darstellung sichtbar macht. Obwohl der Name auf Oktal hinweist, kann od auch hexadezimale, dezimale und zeichenbasierte Ansichten erzeugen.
Ein Byte ist eine Dateneinheit aus acht Bits. Je nach gewähltem Format interpretiert od Bytes einzeln oder fasst mehrere Bytes zu größeren Werten zusammen. Deshalb sind die ausgegebenen Zahlen nicht immer eine direkte Liste einzelner Bytewerte.
Typische Einsatzgebiete sind das Prüfen eines Dateikopfs, das Auffinden von Nullbytes, das Erkennen von Zeilenenden oder die Untersuchung eines unbekannten Bereichs in einer Binärdatei. od ist ein Diagnosewerkzeug und kein vollständiger Hex-Editor: Es zeigt Daten an, bearbeitet sie aber nicht.
Grundsyntax
od [OPTIONEN] [DATEI]
Wird keine Datei angegeben, liest od aus der Standardeingabe. Das ist der Datenstrom, den ein Programm ohne Dateiangabe erhält, beispielsweise über eine Pipe. Ohne Formatoption erzeugt od traditionell eine oktale Ausgabe.
od beispiel.txt
Eine einfache Textdatei wird dabei nicht wie mit cat als Text ausgegeben, sondern als Zahlenwerte. Für eine Zeichenansicht verwenden Sie od -c.
Aufbau der Standardausgabe
$ od beispiel.txt
0000000 110145 154154 157012
0000006
| Ausgabebereich | Bedeutung | Zu beachtender Punkt |
|---|---|---|
| Offset-Spalte | Byte-Offset, also die Position relativ zum Beginn der Eingabe | In der Standarddarstellung wird der Offset üblicherweise oktal angezeigt. |
| Datenwerte | Die interpretierten Werte der folgenden Bytes | Die Werte können einzelne Bytes oder mehrbyteige Wörter darstellen. |
| Endoffset oder Abschlusszeile | Position hinter dem letzten ausgegebenen Datenbereich | Wiederholte Zeilen können je nach Implementierung mit * verkürzt werden. |
Der Offset ist eine Position, keine zusätzliche Nutzlast der Datei. Die nachfolgenden Gruppen hängen von Formatart und Wortbreite ab. Bei einem byteweisen Format wie -t x1 steht jeder Wert für genau ein Byte. Bei -x werden dagegen mehrbyteige Wörter gebildet.
Oktale Ausgabe
Die Standardansicht von od ist traditionell oktal. Oktal ist ein Zahlensystem zur Basis 8 und verwendet die Ziffern 0 bis 7.
od beispiel.txt
Oktal begegnet Ihnen in Unix/Linux unter anderem bei Dateirechten, etwa bei Werten wie 755 oder 644, sowie in historischen Systemdarstellungen und bei Bytewerten. Für moderne Binäranalysen ist Hexadezimal häufig kompakter und leichter mit technischen Dokumentationen zu vergleichen.
Hexadezimale Ausgabe
Mit -x fordert man hexadezimale Wörter an:
od -x beispiel.txt
Hexadezimal ist ein Zahlensystem zur Basis 16. Die Ziffern 0 bis 9 werden durch a bis f ergänzt. Ein Hexadezimalzeichen beschreibt vier Bits; zwei Hexadezimalzeichen entsprechen daher einem Byte. Das macht Binärdaten oft übersichtlicher als eine oktale Darstellung.
-x zeigt jedoch mehrbyteige Wörter. Die Reihenfolge der Bytes innerhalb eines solchen Wortes kann durch die Endianness beeinflusst werden. Endianness bezeichnet die Reihenfolge, in der die Bytes einer mehrbyteigen Zahl gespeichert oder interpretiert werden. Für eine unveränderte, byteweise Hexansicht verwenden Sie deshalb:
od -An -t x1 beispiel.txt
x1 bedeutet: hexadezimale Darstellung (x) mit einer Breite von einem Byte (1). -An blendet die Offset-Spalte aus.
Dezimale Ausgabe
Die Option -i gibt vorzeichenbehaftete dezimale Ganzzahlen aus:
od -i beispiel.txt
Dezimal bedeutet Darstellung zur Basis 10. Wichtig ist die Interpretation: -i behandelt die Daten als Integerwerte und liefert daher nicht zwingend eine dezimale Liste einzelner Bytes. Wenn jedes Byte einzeln als Dezimalwert erscheinen soll, verwenden Sie:
od -An -t d1 beispiel.txt
Bei d1 steht d für eine vorzeichenbehaftete dezimale Darstellung und 1 für eine Bytebreite.
Zeichendarstellung mit -c
od -c zeigt Bytes als Zeichen. Druckbare Zeichen erscheinen lesbar. Nicht druckbare Bytes werden als Escape- oder Steuerzeichendarstellungen ausgegeben, zum Beispiel \n für einen Zeilenumbruch, \t für einen Tabulator oder \0 für ein Nullbyte.
od -c beispiel.txt
Diese Ansicht hilft, versteckte Zeichen in Textdateien, Skripten und Datenströmen zu finden. Besonders nützlich ist sie bei unerwarteten Zeilenenden, Tabulatoren, eingebetteten Nullbytes oder Problemen bei der Verarbeitung von Eingaben.
printf 'A\tB\n' | od -c
Die Pipe übergibt die Ausgabe von printf über die Standardeingabe an od. Dadurch muss kein separates Dateisystemobjekt angelegt werden.
Präzise Formatsteuerung mit -t
Die Option -t TYPE legt den Formattyp explizit fest. Ein Formattyp besteht aus einer Darstellungsart und, sofern angegeben, einer Bytegröße.
| Darstellungsarten im Vergleich | Zahlenbasis oder Form | Geeignet für | Beispieloption |
|---|---|---|---|
| Oktal | Basis 8 | Traditionelle Unix-Ausgaben, Rechte und Bytewerte | -t o1 |
| Hexadezimal | Basis 16 | Binäranalysen und Vergleiche mit Dateiformat-Dokumentationen | -t x1 |
| Dezimal | Basis 10 | Numerische Byte- oder Integerwerte | -t d1 |
| Zeichen | Zeichen oder Escape-Notation | Steuerzeichen und lesbare Textbestandteile | -t c |
x1: jedes Byte als Hexadezimalwertd1: jedes Byte als vorzeichenbehafteter Dezimalwerto1: jedes Byte als Oktalwertc: Zeichen- und Escape-Darstellung
Mehrere Typen können kombiniert werden, indem -t mehrfach angegeben wird. So lassen sich dieselben Daten in mehreren Ansichten nebeneinander ausgeben:
od -t x1 -t c beispiel.txt
Die genaue Spaltenbreite und Anordnung kann zwischen Implementierungen variieren. Für Skripte sollten Sie sich daher auf die gewünschte Formatangabe und nicht auf eine feste visuelle Ausrichtung verlassen.
Wichtige od-Optionen
| Option | Wirkung | Typischer Einsatz |
|---|---|---|
-x | Hexadezimale Wörter anzeigen | Schnelle hexadezimale Übersicht |
-i | Vorzeichenbehaftete dezimale Integer anzeigen | Mehrbyteige Werte numerisch untersuchen |
-c | Zeichen und Escape-Darstellungen anzeigen | Steuerzeichen in Texten finden |
-t x1 | Byteweise Hexadezimalwerte anzeigen | Jedes Byte eindeutig prüfen |
-t d1 | Byteweise Dezimalwerte anzeigen | Bytewerte zur Basis 10 vergleichen |
-A | Basis der Offset-Anzeige wählen | Offsets als Dezimal, Oktal, Hex oder gar nicht ausgeben |
-j | Anfangsposition überspringen | Einen bestimmten Dateibereich untersuchen |
-N | Anzahl gelesener Bytes begrenzen | Große Dateien kontrolliert anzeigen |
-An | Offset-Anzeige unterdrücken | Nur die Datenwerte ausgeben |
Offsets und Datenmenge begrenzen
Mit -A wählen Sie die Basis der Offset-Spalte. Häufige Werte sind d für Dezimal, o für Oktal, x für Hexadezimal und n für keine Offset-Anzeige.
od -A x -t x1 -N 32 datei.bin
Dieser Befehl zeigt nur die ersten 32 Bytes und stellt die Offsets hexadezimal dar. Mit -j überspringen Sie einen Anfangsbereich:
od -A d -j 128 -N 16 -t x1 datei.bin
Hier werden die ersten 128 Bytes übersprungen und danach 16 Bytes byteweise in Hex ausgegeben. Das ist praktisch, wenn eine Dokumentation einen bekannten Header- oder Datenbereich nennt.
Arbeiten mit Standardeingabe und Pipelines
printf 'A\tB\n' | od -c
Eine Pipe verbindet die Standardausgabe eines Befehls mit der Standardeingabe des nächsten. So können Sie auch generierte Daten, Befehlsausgaben oder einzelne Testzeichen untersuchen.
printf 'ABC' | od -An -t x1
Die Option -An ist nützlich, wenn die Ausgabe anschließend weiterverarbeitet wird und die Positionsspalte stören würde.
Typische Probleme und Lösungen
- Die Ausgabe einer Textdatei wirkt unverständlich: Die Standardansicht verwendet Zahlenwerte. Nutzen Sie
od -cfür Zeichen oderod -t x1für einzelne Bytes. - Bei
-xerscheinen Bytes in unerwarteter Reihenfolge: Mehrbyteige Wörter können von der Endianness beeinflusst sein. Nutzen Sieod -An -t x1 DATEIfür eine byteweise Ansicht. - Dezimalwerte passen nicht zu erwarteten ASCII-Werten:
-iinterpretiert Integer statt einzelner Bytes. Verwenden Sieod -An -t d1 DATEI. - Eine große Datei erzeugt zu viel Ausgabe: Begrenzen Sie mit
-Ndie Byteanzahl und beginnen Sie mit-jan einem relevanten Offset. - Offsets lassen sich schlecht mit einer Hexangabe vergleichen: Setzen Sie die Basis mit
-A xauf Hexadezimal. - Eine Datei kann nicht geöffnet werden: Prüfen Sie Dateiname und Pfad mit
lsund kontrollieren Sie die Leseberechtigungen.
Einordnung und Grenzen
od zeigt Rohdaten in wählbaren Darstellungen, kennt aber nicht automatisch die Bedeutung eines proprietären Dateiformats. Ob ein Wert eine Zahl, ein Textzeichen, eine Länge oder ein Teil einer Struktur ist, hängt vom Dateiformat, Datentyp, der Bytebreite und gegebenenfalls der Endianness ab.
Für andere Darstellungsstile sind hexdump und xxd verwandte Werkzeuge. strings extrahiert druckbare Zeichen aus Binärdateien, während file einen wahrscheinlichen Dateityp ermittelt. Diese Werkzeuge ersetzen die genaue Formatkenntnis nicht.
Weiterführende Linux-Grundlagen
- Einführung in Linux für Shell- und Systemgrundlagen
- Arbeiten mit Dateien für Pfade und Dateiverwaltung
- Datenströme für Standardausgabe, Standardeingabe und Pipes
- Dateityp bestimmen mit file zur ergänzenden Dateianalyse
- Berechtigungsbits und Permission Bits zum Zusammenhang zwischen Unix-Rechten und Oktalwerten