J'ai besoin de diviser un fichier binaire en deux. Je me demandais si la tête et / ou la queue pouvaient être utilisées mais ensuite je me suis demandé ... est-il sûr d'utiliser la redirection, la tuyauterie, etc. avec des données binaires? Est-ce que les nouvelles lignes sont gâchées, ou les valeurs nulles ignorées, ou le retour arrière ou la suppression fait quelque chose de spécial? (bash, kubuntu 18.04 LTS)
command-line
18.04
bash
kubuntu
B.Tanner
la source
la source
split
commande.Réponses:
Oui, c'est sûr si vous le redirigez vers un autre processus ou l'enregistrez dans un fichier. Il y a une "bizarrerie" potentielle si vous laissez la sortie standard binaire imprimer sur un terminal car elle peut contenir des séquences d'échappement (au hasard) qui peuvent temporairement gâcher l'affichage du terminal.
la source
reset
et appuyer sur Entrée pour le corriger.reset<enter>
ne tape pas réellement cette séquence de caractères telle que vue par le terminal ...stty sane; tput rs1
séquence de commandes fera l'affaire quand il y a des cas de coin dereset
ne pas fonctionner. De tels cas, en plus de ceux mentionnés par Bakuriu, pourraient inclure la largeur de la ligne / des colonnes du terminal ou je devine les paramètres liés à la communication série (vitesse de transmission / parité).Le principal problème avec l'utilisation de commandes comme
head
outail
est qu'elles sont orientées ligne et que les fichiers binaires ne le sont pas. S'ils contiennent des sauts de ligne, ils ne sont souvent pas utilisés pour représenter la fin d'une ligne et s'ils le sont, ils peuvent simplement faire partie de chaînes comme des messages de programme ou des champs de données.Si les données sont structurées de quelque manière que ce soit, vous devez en tenir compte dans le choix des points de partage afin de ne pas casser les structures au milieu.
Si vous connaissez la structure du fichier, vous pouvez utiliser une commande telle que
avec des options pour copier uniquement autant de blocs de données d'une taille spécifique à partir d'un décalage particulier (incrémenté) dans le fichier.
Il semble que la
split
commande mentionnée par @egmont automatisera ce processus pour vous, mais elle semble être orientée ligne par défaut, vous devrez donc spécifier des options supplémentaires telles que--bytes count
lui indiquer la taille de chaque élément du fichier. être.En guise de remarque, si vous ne savez pas ce qu'il y a dans un fichier, mais que vous pensez qu'il contient au moins des données textuelles significatives, la
strings
commande est un excellent moyen de jeter un premier coup d'œil pour voir de quoi vous parlez.trouvera toutes les séries de caractères imprimables d'au moins six caractères et les affichera dans un téléavertisseur afin qu'ils ne volent pas sur le terminal. L'utilisation d'un nombre un peu plus grand que la valeur par défaut de 4 caractères permet d'éliminer de minuscules extraits de données qui se trouvent être imprimables, mais qui ne sont pas utilisés de cette façon dans le fichier.
Si vous devez ultérieurement explorer le fichier plus en détail avec un éditeur binaire tel que
hexedit
, vous aurez des repères qui indiquent où quelque chose d'intéressant pourrait être trouvé.strings
a une option -t x
qui précédera chaque chaîne imprimée avec son décalage dans le fichier en hexadécimal (o pour octal / d pour décimal) afin que vous sachiez où le trouver plus tard. Même les fichiers très courts sont beaucoup à traiter lorsque vous devez les regarder caractère par caractère.la source