Linux Deutsch

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
AusgabebereichBedeutungZu beachtender Punkt
Offset-SpalteByte-Offset, also die Position relativ zum Beginn der EingabeIn der Standarddarstellung wird der Offset üblicherweise oktal angezeigt.
DatenwerteDie interpretierten Werte der folgenden BytesDie Werte können einzelne Bytes oder mehrbyteige Wörter darstellen.
Endoffset oder AbschlusszeilePosition hinter dem letzten ausgegebenen DatenbereichWiederholte 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 VergleichZahlenbasis oder FormGeeignet fürBeispieloption
OktalBasis 8Traditionelle Unix-Ausgaben, Rechte und Bytewerte-t o1
HexadezimalBasis 16Binäranalysen und Vergleiche mit Dateiformat-Dokumentationen-t x1
DezimalBasis 10Numerische Byte- oder Integerwerte-t d1
ZeichenZeichen oder Escape-NotationSteuerzeichen und lesbare Textbestandteile-t c
  • x1: jedes Byte als Hexadezimalwert
  • d1: jedes Byte als vorzeichenbehafteter Dezimalwert
  • o1: jedes Byte als Oktalwert
  • c: 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

OptionWirkungTypischer Einsatz
-xHexadezimale Wörter anzeigenSchnelle hexadezimale Übersicht
-iVorzeichenbehaftete dezimale Integer anzeigenMehrbyteige Werte numerisch untersuchen
-cZeichen und Escape-Darstellungen anzeigenSteuerzeichen in Texten finden
-t x1Byteweise Hexadezimalwerte anzeigenJedes Byte eindeutig prüfen
-t d1Byteweise Dezimalwerte anzeigenBytewerte zur Basis 10 vergleichen
-ABasis der Offset-Anzeige wählenOffsets als Dezimal, Oktal, Hex oder gar nicht ausgeben
-jAnfangsposition überspringenEinen bestimmten Dateibereich untersuchen
-NAnzahl gelesener Bytes begrenzenGroße Dateien kontrolliert anzeigen
-AnOffset-Anzeige unterdrückenNur 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 -c für Zeichen oder od -t x1 für einzelne Bytes.
  • Bei -x erscheinen Bytes in unerwarteter Reihenfolge: Mehrbyteige Wörter können von der Endianness beeinflusst sein. Nutzen Sie od -An -t x1 DATEI für eine byteweise Ansicht.
  • Dezimalwerte passen nicht zu erwarteten ASCII-Werten: -i interpretiert Integer statt einzelner Bytes. Verwenden Sie od -An -t d1 DATEI.
  • Eine große Datei erzeugt zu viel Ausgabe: Begrenzen Sie mit -N die Byteanzahl und beginnen Sie mit -j an einem relevanten Offset.
  • Offsets lassen sich schlecht mit einer Hexangabe vergleichen: Setzen Sie die Basis mit -A x auf Hexadezimal.
  • Eine Datei kann nicht geöffnet werden: Prüfen Sie Dateiname und Pfad mit ls und 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