HD e OD possono sostituirsi?


11

hde odsono entrambi dump viewer di contenuto binario. Può hdessere utilizzato ovunque ode viceversa?


4
... e non dimenticare xxdanche! : D
Aaron D. Marasco il

Risposte:


19

hdè sinonimo di hexdump -Csu FreeBSD e di alcune distribuzioni Linux. hexdumpè dai giorni BSD ; odè dall'alba dei tempi . Solo odè standardizzato da POSIX . La logica unica di UNIX discute il motivo per cui è odstato scelto in preferenza hdo xd.

Questi comandi eseguono operazioni molto simili: visualizzare una rappresentazione testuale di un file binario, usando la notazione ottale, decimale o esadecimale. Non c'è alcuna differenza fondamentale tra i due.

Hanno molte opzioni per controllare il formato di output e alcuni formati possono essere raggiunti solo con l'uno o l'altro comando. In particolare, per vedere il contenuto di un file binario, mi piace hdil formato di output, con una colonna a destra che mostra letteralmente i caratteri stampabili; odnon posso farlo.

$ 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.....|

Grazie! Nell'output ottale di od, una cifra significa tre bit? Quindi, ad esempio, 042577sono 18 bit, ovvero 9/4 byte?
Tim

@Tim Sì, ottale significa che ogni cifra corrisponde a 3 bit (e esadecimale , 4 bit). 042577 rappresenta in realtà 16 bit (2 byte); la prima cifra in un blocco in questo formato sarà sempre 0 o 1. ottale (042577) = esadecimale (7f45) = decimale (32581).
Gilles 'SO- smetti di essere malvagio' il

Grazie! Ho letto da altre fonti che i numeri ottali iniziano con un ulteriore 0. Cosa significa quando inizia con 1?
Tim

@Tim In molti linguaggi di programmazione, 123è un numero rappresentato nella base 10 (decimale), mentre 0123significa che il numero è rappresentato nella base 8 (ottale), ovvero 012383. 0x123sarebbe nella base 16 (esadecimale), ovvero 291. Questo è non correlato al odformato di output.
Gilles 'SO- smetti di essere malvagio' il

Molti? Direi qualsiasi C-like e derivati ​​- sì, davvero. Cos'altro? Quanti?
poige

5

In realtà odpuò visualizzare sia caratteri esadecimali / ott / dec che caratteri stampabili:

$ 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......<

La differenza principale, immagino, è solo storica. Inoltre alcune versioni hdpossono colorare l'output.


OSX odnon supporta il zsuffisso in-tx1z
tripleee,

In realtà il problema più grande sarebbe ricordare quel treno di args invece di uno hd. Tuttavia, utile, grazie :)
poige
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.