Hd e od podem substituir um ao outro?

11

hde odsão ambos visualizadores de despejo de conteúdo binário. Pode hdser usado onde quer que odseja e vice-versa?

Tim
fonte
4
... e não esqueça xxdtambém! : D
Aaron D. Marasco

Respostas:

19

hdé sinônimo de hexdump -Cno FreeBSD e em algumas distribuições Linux. hexdumpé dos dias do BSD ; odé desde o início dos tempos . Somente odé padronizado pelo POSIX . A lógica do UNIX único discute por que odfoi escolhido em preferência a hdou xd.

Esses comandos fazem coisas muito semelhantes: exibem uma representação textual de um arquivo binário, usando notação octal, decimal ou hexadecimal. Não há diferença fundamental entre os dois.

Eles têm muitas opções para controlar o formato de saída e alguns formatos só podem ser alcançados com um ou outro comando. Em particular, para ver um pouco do conteúdo de um arquivo binário, eu gosto hddo formato de saída, com uma coluna à direita mostrando caracteres imprimíveis literalmente; odnão posso fazer isso.

$ 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- parar de ser mau'
fonte
Obrigado! Na saída octal por od, um dígito significa três bits? Então, por exemplo, 042577é de 18 bits, ou seja, 9/4 bytes?
Tim
@ Tim Sim, octal significa que cada dígito corresponde a 3 bits (e hexadecimal , 4 bits). 042577 na verdade representa 16 bits (2 bytes); o primeiro dígito em um bloco nesse formato será sempre 0 ou 1. octal (042577) = hexadecimal (7f45) = decimal (32581).
Gilles 'SO- stop be evil'
Obrigado! Li de outras fontes que os números octais começam com um 0. adicional. O que significa quando começa com 1?
Tim
@ Tim Em muitas linguagens de programação, 123é um número representado na base 10 (decimal), enquanto 0123que significa que o número é representado na base 8 (octal), ou seja, 0123é 83. 0x123estaria na base 16 (hexadecimal), ou seja, 291. Isso é não relacionado ao odformato de saída.
Gilles 'SO- stop be evil'
Muitos? Eu diria qualquer tipo C e derivados - sim, de fato. O quê mais? Quantos?
poige
5

Na verdade, odpode exibir caracteres hex / oct / dec e caracteres imprimíveis:

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

A principal diferença, eu acho, é apenas histórica. Além disso, algumas versões hdpodem imprimir em cores.

hurufu
fonte
O OSX odnão suporta o zsufixo in-tx1z
tripleee 18/10
Na verdade, o maior problema seria lembrar aquele trem de args em vez de um hd. No entanto, útil, obrigado :)
poige