Können sich hd und od gegenseitig ersetzen?

11

hdund odsind beide Dump-Viewer von binären Inhalten. Kann hdüberall verwendet werden odund umgekehrt?

Tim
quelle
4
... und auch nicht vergessen xxd! : D
Aaron D. Marasco

Antworten:

19

hdist ein Synonym für hexdump -Cauf FreeBSD und auf einigen Linux - Distributionen. hexdumpist aus den BSD-Tagen ; odist von Anfang an . Nur odist von POSIX standardisiert . In der Begründung zu Single UNIX wird erläutert, warum odgegenüber hdoder bevorzugt wurde xd.

Diese Befehle führen sehr ähnliche Aktionen aus: Anzeigen einer Textdarstellung einer Binärdatei in Oktal-, Dezimal- oder Hexadezimalschreibweise. Es gibt keinen grundlegenden Unterschied zwischen den beiden.

Sie haben viele Optionen zur Steuerung des Ausgabeformats, und einige Formate können nur mit dem einen oder anderen Befehl erreicht werden. Um einen Blick auf die Inhalte einer Binärdatei zu werfen, gefällt mir hddas Ausgabeformat mit einer Spalte auf der rechten Seite, in der druckbare Zeichen buchstäblich angezeigt werden. odkann das nicht.

$ od /bin/sh | head -n 2                # od default: octal, 2-byte words
0000000 042577 043114 000402 000001 000000 000000 000000 000000
0000020 000002 000076 000001 000000 170020 000101 000000 000000

$ od -Ax -t x1 /bin/sh | head -n 2      # od showing bytes in hexadecimal
000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
000010 02 00 3e 00 01 00 00 00 10 f0 41 00 00 00 00 00

$ hd /bin/sh | head -n 2                # hd default output: nice
00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 3e 00 01 00 00 00  10 f0 41 00 00 00 00 00  |..>.......A.....|
Gilles 'SO - hör auf böse zu sein'
quelle
Vielen Dank! Bedeutet eine Ziffer bei der oktalen Ausgabe von od drei Bits? So sind zum Beispiel 04257718 Bits dh 9/4 Bytes?
Tim
@Tim Ja, oktal bedeutet, dass jede Ziffer 3 Bits entspricht (und hexadezimal 4 Bits). 042577 repräsentiert tatsächlich 16 Bits (2 Bytes); Die erste Ziffer in einem Block in diesem Format ist immer 0 oder 1. Oktal (042577) = Hexadezimal (7f45) = Dezimal (32581).
Gilles 'SO - hör auf böse zu sein'
Vielen Dank! Ich habe aus anderen Quellen gelesen, dass Oktalzahlen mit einer zusätzlichen 0 beginnen. Was bedeutet es, wenn es mit 1 beginnt?
Tim
@Tim In vielen Programmiersprachen 123wird eine Zahl in Basis 10 (dezimal) dargestellt, während dies 0123bedeutet, dass die Zahl in Basis 8 (oktal) dargestellt wird, dh 012383 ist. 0x123Dies wäre in Basis 16 (hexadezimal), dh 291. Dies ist unabhängig vom odAusgabeformat.
Gilles 'SO - hör auf böse zu sein'
Viele? Ich würde alle C-ähnlichen und Derivate sagen - ja, in der Tat. Was sonst? Wie viele?
Poige
5

Tatsächlich odkönnen beide hex Anzeige / Okt / dec und druckbare Zeichen:

$ od -Ax -tx1z /bin/sh | head -n2
000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  >.ELF............<
000010 03 00 3e 00 01 00 00 00 32 4e 00 00 00 00 00 00  >..>.....2N......<

Der Hauptunterschied ist wohl nur historisch. Einige Versionen hdkönnen auch Farben ausgeben.

Hurufu
quelle
OSX odunterstützt das zSuffix in-tx1z
Tripleee
Eigentlich wäre das größte Problem, sich an diesen Zug von Argumenten anstatt an einen zu erinnern hd. Trotzdem nützlich, danke :)
Poige