HD et OD peuvent-ils se remplacer?

11

hdet odsont tous les deux des visualiseurs de vidage de contenu binaire. Peut hdêtre utilisé où qu'il se odtrouve et vice versa?

Tim
la source
4
... et n'oubliez pas non xxdplus! : D
Aaron D. Marasco

Réponses:

19

hdest synonyme de hexdump -Csur FreeBSD et sur certaines distributions Linux. hexdumpest des jours BSD ; odest de la nuit des temps . Seul odest normalisé par POSIX . La justification UNIX unique explique pourquoi a odété choisi de préférence à hdou xd.

Ces commandes font des choses très similaires: afficher une représentation textuelle d'un fichier binaire, en utilisant une notation octale, décimale ou hexadécimale. Il n'y a pas de différence fondamentale entre les deux.

Ils ont de nombreuses options pour contrôler le format de sortie, et certains formats ne peuvent être obtenus qu'avec l'une ou l'autre commande. En particulier, pour voir ce qui se trouve dans un fichier binaire, j'aime hdle format de sortie de, avec une colonne à droite montrant les caractères imprimables littéralement; odne peut pas faire ça.

$ 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- arrête d'être méchant'
la source
Merci! En sortie octale par od, un chiffre signifie-t-il trois bits? Ainsi, par exemple, 042577est de 18 bits, soit 9/4 octets?
Tim
@Tim Oui, octal signifie que chaque chiffre correspond à 3 bits (et hexadécimal , 4 bits). 042577 représente en fait 16 bits (2 octets); le premier chiffre d'un bloc dans ce format sera toujours 0 ou 1. octal (042577) = hexadécimal (7f45) = décimal (32581).
Gilles 'SO- arrête d'être méchant'
Merci! J'ai lu dans d'autres sources que les nombres octaux commencent par un 0 supplémentaire. Qu'est-ce que cela signifie quand il commence par 1?
Tim
@Tim Dans de nombreux langages de programmation, 123est un nombre représenté en base 10 (décimal), alors que 0123signifie que le nombre est représenté en base 8 (octal), c'est 0123-à- dire 83. 0x123serait en base 16 (hexadécimal), soit 291. C'est sans rapport avec le odformat de sortie.
Gilles 'SO- arrête d'être méchant'
Beaucoup? Je dirais n'importe quel C-like et dérivés - oui, en effet. Quoi d'autre? Combien?
poige
5

En fait, odpeut afficher à la fois les caractères hex / oct / dec et imprimables:

$ 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 principale différence, je suppose, n'est qu'historique. Certaines versions hdpeuvent également colorer la sortie.

hurufu
la source
OSX odne prend pas en charge le zsuffixe dans-tx1z
tripleee
En fait, le plus gros problème serait de se souvenir de ce train d'arguments au lieu d'un hd. Néanmoins, utile, merci :)
poige