¿Pueden hd y od reemplazarse entre sí?

11

hdy odambos son visualizadores de contenido binario. ¿Se hdpuede usar donde odsea ​​y viceversa?

Tim
fuente
44
... y no te olvides xxdtambién! : D
Aaron D. Marasco

Respuestas:

19

hdes un sinónimo para hexdump -Cel FreeBSD y en algunas distribuciones de Linux. hexdumpes de los días BSD ; odEs desde los albores del tiempo . Solo odestá estandarizado por POSIX . La justificación Single UNIX discute por qué odse eligió con preferencia a hdo xd.

Estos comandos hacen cosas muy similares: mostrar una representación textual de un archivo binario, usando notación octal, decimal o hexadecimal. No hay diferencia fundamental entre los dos.

Tienen muchas opciones para controlar el formato de salida, y algunos formatos solo se pueden lograr con uno u otro comando. En particular, para ver un vistazo de lo que hay en un archivo binario, me gusta hdel formato de salida, con una columna a la derecha que muestra caracteres imprimibles literalmente; odNo puedo hacer eso.

$ 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- deja de ser malvado'
fuente
¡Gracias! En salida octal por od, ¿un dígito significa tres bits? Entonces, por ejemplo, ¿ 042577son 18 bits, es decir, 9/4 bytes?
Tim
@Tim Sí, octal significa que cada dígito corresponde a 3 bits (y hexadecimal , 4 bits). 042577 en realidad representa 16 bits (2 bytes); el primer dígito en un bloque en este formato siempre será 0 o 1. octal (042577) = hexadecimal (7f45) = decimal (32581).
Gilles 'SO- deja de ser malvado'
¡Gracias! Leí de otras fuentes que los números octales comienzan con un 0. adicional ¿Qué significa cuando comienza con 1?
Tim
@Tim En muchos lenguajes de programación, 123es un número representado en base 10 (decimal), mientras 0123que significa que el número está representado en base 8 (octal), 0123es decir, 83. 0x123estaría en base 16 (hexadecimal), es decir, 291. Esto es no relacionado con el odformato de salida.
Gilles 'SO- deja de ser malvado'
¿Muchos? Yo diría cualquier tipo de C y derivados, sí, de hecho. ¿Qué más? ¿Cuántos?
Poige
5

En realidad, odpuede mostrar tanto caracteres hexadecimales / oct / dec como imprimibles:

$ 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 principal diferencia, supongo, es solo histórica. También algunas versiones hdpueden dar salida al color.

hurufu
fuente
OSX odno es compatible con el zsufijo en-tx1z
tripleee
En realidad, el mayor problema sería recordar ese tren de args en lugar de uno hd. Sin embargo, útil, gracias :)
Poige