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.....|
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:
xxd
também! : DRespostas:
hd
é sinônimo dehexdump -C
no FreeBSD e em algumas distribuições Linux.hexdump
é dos dias do BSD ;od
é desde o início dos tempos . Somenteod
é padronizado pelo POSIX . A lógica do UNIX único discute por queod
foi escolhido em preferência ahd
ouxd
.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
hd
do formato de saída, com uma coluna à direita mostrando caracteres imprimíveis literalmente;od
não posso fazer isso.fonte
042577
é de 18 bits, ou seja, 9/4 bytes?123
é um número representado na base 10 (decimal), enquanto0123
que significa que o número é representado na base 8 (octal), ou seja,0123
é 83.0x123
estaria na base 16 (hexadecimal), ou seja, 291. Isso é não relacionado aood
formato de saída.Na verdade,
od
pode exibir caracteres hex / oct / dec e caracteres imprimíveis:A principal diferença, eu acho, é apenas histórica. Além disso, algumas versões
hd
podem imprimir em cores.fonte
od
não suporta oz
sufixo in-tx1z
hd
. No entanto, útil, obrigado :)