Eu preciso dividir um arquivo binário em dois. Eu queria saber se a cabeça e / ou cauda poderia ser usada, mas então eu me perguntei ... é seguro usar o redirecionamento, a tubulação etc. com dados binários? As novas linhas são bagunçadas, ou os nulos são ignorados, ou retrocedem ou excluem algo especial? (bash, kubuntu 18.04 LTS)
command-line
18.04
bash
kubuntu
B.Tanner
fonte
fonte
split
comando.Respostas:
Sim, é seguro se você canalizar para outro processo ou salvá-lo em um arquivo. Existe uma "estranheza" potencial se você deixar o stdout binário imprimir em um terminal, pois ele pode conter seqüências de escape (aleatoriamente) que podem atrapalhar temporariamente a exibição do terminal.
fonte
reset
e pressionar enter para corrigi-lo.reset<enter>
na verdade não digitar a sequência de caracteres como visto pelo terminal ...stty sane; tput rs1
sequência de comandos fará o truque para quando houver casos de canto quereset
não funcionem. Esses casos, além dos mencionados por Bakuriu, podem incluir a largura da linha / colunas do terminal ou estou supondo as configurações relacionadas à comunicação serial (baudrate / paridade).O principal problema com o uso de comandos como
head
outail
é que eles são orientados a linhas e os arquivos binários não. Se eles possuem novas linhas, geralmente não estão sendo usados para representar o final de uma linha e, se houver, podem fazer parte de cadeias de caracteres, como mensagens de programas ou campos de dados.Se os dados estão estruturados de alguma forma, é necessário levar isso em consideração ao escolher pontos de divisão para não quebrar estruturas no meio.
Se você conhece a estrutura do arquivo, pode usar um comando como
com opções para copiar apenas tantos blocos de dados de um tamanho específico, começando em um deslocamento específico (incrementado) no arquivo.
Parece que o
split
comando mencionado por @egmont automatizará esse processo para você, mas parece ser orientado por linhas por padrão, portanto, você precisará especificar opções adicionais, como--bytes count
dizer qual o tamanho de cada parte do arquivo estar.Como uma observação lateral, se você não sabe o que há em um arquivo, mas suspeita que contém pelo menos alguns dados textuais significativos, o
strings
comando é uma ótima maneira de dar uma primeira olhada para ver com o que você está lidando.encontrará todas as séries de caracteres imprimíveis com pelo menos seis caracteres e exibirá-as em um pager para que não voem no terminal. Usar um número um pouco maior que o padrão de 4 caracteres ajuda a eliminar pequenos trechos de dados que, por acaso, podem ser impressos, mas não estão sendo usados dessa maneira no arquivo.
Se mais tarde você precisar explorar o arquivo em mais detalhes com o editor binário, como
hexedit
, você terá alguns pontos de referência que apontam onde algo interessante pode ser encontrado.strings
tem uma opção -t x
que precederá cada sequência impressa com seu deslocamento no arquivo em hexadecimal (o para octal / d para decimal) para que você saiba onde encontrá-la mais tarde. Mesmo arquivos muito curtos são muito para lidar quando você precisa analisá-los caractere por caractere.fonte