Dans certain cas de figure, il peut être utile de regarder un fichier binaire sous sa forme ASCII (comme un fichier texte), l’utilisation d’une commande comme cat
ne sera pas très pertinente, car il est probable que la commande rencontrera de nombreux caractères qui seront interprétés comme des caractères de contrôle, ce qui, par exemple, effacera l’écran, voir bloquera le terminal.
La solution consiste donc à utiliser un outil qui ne traitera pas les caractères de contrôles.
La commande hexdump
L’utilitaire hexdump est une commande qui affiche les fichiers spécifiés, ou l’entrée standard, si aucun fichier n’est spécifié, dans un format spécifié par l’utilisateur (en caractères affichables).
Supposons le fichier donné par :
cat <<EOF | tee filetest.txt
Lorem ipsum_dolor sit_amet, consectetuer adipiscing_elit.
Aenean commodo ligulaeget dolor.
EOF
La commande
hexdump -c filetest.txt
donnera
0000000 L o r e m i p s u m _ d o l o
0000010 r s i t _ a m e t , c o n s
0000020 e c t e t u e r a d i p i s c
0000030 i n g _ e l i t . \n A e n e a n
0000040 c o m m o d o l i g u l a e
0000050 g e t d o l o r . \n
000005b
Alors que la commande
hexdump -C filetest.txt
00000000 4c 6f 72 65 6d 20 69 70 73 75 6d 5f 64 6f 6c 6f |Lorem ipsum_dolo|
00000010 72 20 73 69 74 5f 61 6d 65 74 2c 20 63 6f 6e 73 |r sit_amet, cons|
00000020 65 63 74 65 74 75 65 72 20 61 64 69 70 69 73 63 |ectetuer adipisc|
00000030 69 6e 67 5f 65 6c 69 74 2e 0a 41 65 6e 65 61 6e |ing_elit..Aenean|
00000040 20 63 6f 6d 6d 6f 64 6f 20 6c 69 67 75 6c 61 65 | commodo ligulae|
00000050 67 65 74 20 64 6f 6c 6f 72 2e 0a |get dolor..|
0000005b
Il est possible de définir un motif pour l’affichage.
Par exemple :
hexdump -v -e '"%010_ad |" 16/1 "%_p" "|\n"' filetest.txt
qui produira :
0000000000 |Lorem ipsum_dolo|
0000000016 |r sit_amet, cons|
0000000032 |ectetuer adipisc|
0000000048 |ing_elit..Aenean|
0000000064 | commodo ligulae|
0000000080 |get dolor..|
Les paramètres de formatage sont aussi puissants qu’il sont obscure :
hexdump -v -e '"%08.8_ax "' -e' 4/1 "%02x " " " 4/1 "%02x " " " 4/1 "%02x " " " 4/1 "%02x " ' -e '" |" 16/1 "%_p" "|\n"' filetest.txt
00000000 4c 6f 72 65 6d 20 69 70 73 75 6d 5f 64 6f 6c 6f |Lorem ipsum_dolo|
00000010 72 20 73 69 74 5f 61 6d 65 74 2c 20 63 6f 6e 73 |r sit_amet, cons|
00000020 65 63 74 65 74 75 65 72 20 61 64 69 70 69 73 63 |ectetuer adipisc|
00000030 69 6e 67 5f 65 6c 69 74 2e 0a 41 65 6e 65 61 6e |ing_elit..Aenean|
00000040 20 63 6f 6d 6d 6f 64 6f 20 6c 69 67 75 6c 61 65 | commodo ligulae|
00000050 67 65 74 20 64 6f 6c 6f 72 2e 0a |get dolor..|
La commande xxd
Une alternative à hexdump est xxd
xxd filetest.txt
00000000: 4c6f 7265 6d20 6970 7375 6d5f 646f 6c6f Lorem ipsum_dolo
00000010: 7220 7369 745f 616d 6574 2c20 636f 6e73 r sit_amet, cons
00000020: 6563 7465 7475 6572 2061 6469 7069 7363 ectetuer adipisc
00000030: 696e 675f 656c 6974 2e0a 4165 6e65 616e ing_elit..Aenean
00000040: 2063 6f6d 6d6f 646f 206c 6967 756c 6165 commodo ligulae
00000050: 6765 7420 646f 6c6f 722e 0a get dolor..
Pour obtenir quelque chose de semblable à hexdump, on peut utiliser sed:
xxd filetest.txt | sed -e ':a;/.\{67\}/!{s/$/ /;ba}' -r -e 's/(................)$/|\1|/g'
Et voilà:
00000000: 4c6f 7265 6d20 6970 7375 6d5f 646f 6c6f |Lorem ipsum_dolo|
00000010: 7220 7369 745f 616d 6574 2c20 636f 6e73 |r sit_amet, cons|
00000020: 6563 7465 7475 6572 2061 6469 7069 7363 |ectetuer adipisc|
00000030: 696e 675f 656c 6974 2e0a 4165 6e65 616e |ing_elit..Aenean|
00000040: 2063 6f6d 6d6f 646f 206c 6967 756c 6165 | commodo ligulae|
00000050: 6765 7420 646f 6c6f 722e 0a |get dolor.. |
Références
- 10+ Practical “hexdump” Command Usage Examples in Linux
- https://unix.stackexchange.com/questions/476079/how-to-get-hexdump-output-in-same-format-as-hexedit
ᦿ