No shell, como posso ler os bytes de um arquivo binário que tenho e imprimir a saída como números hexadecimais?
shell
text-processing
binary
Tom Brito
fonte
fonte
Respostas:
Usar
hexdump(1)
...
fonte
od
. Há também um editor hexadecimal no estilo vi chamadohexer
.hexdump -e '"\\\x" /1 "%02x"' filename
10
16 hexadecimal. A representação de dois bytes depende da continuidade do sistema. Digiteman hexdump
para todos os detalhes.Outra opção é od :
ou
od
tem muitas opções para ajuste fino.fonte
od -t x1
formato preferido, eu acho.od -t test
eu tenho #od: invalid character 't' in type string 'test'
--t
od --version od (GNU coreutils) 7.4
Enquanto estamos no
od
ehexdump
, mais duas ferramentas semelhantes:Saída de amostra:
Ou, se você quiser ler os bytes um de cada vez e imprimi-los em seu próprio formato, tente algo como:
Saída de amostra:
fonte
while
loop não funciona para caracteres de barra invertida e nova linha (e no bash (ao contrário de ksh93) para caracteres em branco), nem funcionará corretamente em locais utf8 para bytes com o oitavo bit definido. Além disso, você não precisa de "od" lá, pode usarprintf '%02x\n' "'$byte"
offset
é apenas uma espécie de "variável dummy" aqui; não tem uso prático. É apenas usado como um espaço reservado para chegarhex
. Isso é o que às vezes afeta a legibilidade de maneira negativa comread
: variáveis surgindo do nada.$offset
é limitado pelo subshell, então não o vejo como um problema.Meus dois centavos:
Eu gosto disso porque você está seguindo um arquivo atualmente em buffer enquanto pode ver o hexdump ao vivo. Não esqueça que TUDO no Unix é um arquivo e podemos facilmente encadear comandos como
tail
ehexdump
resolver uma grande variedade de problemas.fonte
for((i=0;i<100;i++));do echo $i >>tst2.bin;sleep 1;done&
ele funciona bem para monitoramento thx :)O comandante da meia-noite é outra opção. Não sei se está disponível para todos os sabores unix. Pode ser necessário fazer o download primeiro.
F3 F4para visualizar no editor interno / no modo hexadecimal.
fonte
Uso od com c e x1, quando preciso procurar texto dentro do arquivo binário:
fonte