Ich muss eine Binärdatei in zwei Teile aufteilen. Ich habe mich gefragt, ob Kopf und / oder Schwanz verwendet werden könnten, aber dann habe ich mich gefragt ... ist es sicher, Umleitung, Piping usw. mit Binärdaten zu verwenden? Werden neue Zeilen durcheinander gebracht oder werden Nullen ignoriert oder Rücktaste oder Löschen tun etwas Besonderes? (bash, kubuntu 18.04 LTS)
command-line
18.04
bash
kubuntu
B.Tanner
quelle
quelle
split
Befehl an.Antworten:
Ja, es ist sicher, wenn Sie es an einen anderen Prozess weiterleiten oder in einer Datei speichern. Es besteht die Möglichkeit einer "Verrücktheit", wenn Sie binäres stdout auf ein Terminal drucken lassen, da es zufällige Escape-Sequenzen enthalten kann, die die Terminal-Anzeige vorübergehend durcheinander bringen können.
quelle
reset
eingeben und die Eingabetaste drücken, um das Problem zu beheben.reset<enter>
nicht die vom Terminalstty sane; tput rs1
Befehlssequenz hilfreich, wenn Eckfälle auftreten, in denen esreset
nicht funktioniert. Solche Fälle könnten, zusätzlich zu den von Bakuriu erwähnten, die Breite der Terminalleitung / -spalten beinhalten oder ich vermute die Einstellungen in Bezug auf die serielle Kommunikation (Baudrate / Parität).Das Hauptproblem bei der Verwendung von Befehlen wie
head
odertail
ist, dass sie zeilenorientiert sind und Binärdateien nicht. Wenn sie Zeilenumbrüche enthalten, werden sie häufig nicht zur Darstellung des Zeilenendes verwendet. Wenn dies der Fall ist, sind sie möglicherweise nur Teil von Zeichenfolgen wie Programmnachrichten oder Datenfeldern.Wenn die Daten in irgendeiner Weise strukturiert sind, müssen Sie dies bei der Auswahl der Aufteilungspunkte berücksichtigen, damit Sie keine Strukturen in der Mitte aufbrechen.
Wenn Sie die Struktur der Datei kennen, können Sie einen Befehl wie z
Mit der Option, nur so viele Datenblöcke einer bestimmten Größe ab einem bestimmten (inkrementellen) Versatz in die Datei zu kopieren.
Es sieht so aus,
split
als würde der von @egmont erwähnte Befehl diesen Vorgang für Sie automatisieren, aber er scheint standardmäßig zeilenorientiert zu sein, sodass Sie zusätzliche Optionen angeben müssen, um anzugeben--bytes count
, wie groß die einzelnen Teile der Datei sein sollen Sein.Nebenbei bemerkt: Wenn Sie nicht wissen, was in einer Datei enthalten ist, aber vermuten, dass sie zumindest einige aussagekräftige Textdaten enthält, können Sie mit dem
strings
Befehl einen ersten Blick darauf werfen, womit Sie es zu tun haben.findet alle Serien druckbarer Zeichen mit einer Länge von mindestens sechs Zeichen und zeigt sie in einem Pager an, damit sie auf dem Terminal nicht vorbeifliegen. Wenn Sie eine Zahl verwenden, die etwas größer als die Standardeinstellung von 4 Zeichen ist, können Sie winzige Datenschnipsel entfernen, die nur gedruckt werden können, aber in der Datei nicht auf diese Weise verwendet werden.
Wenn Sie die Datei später mit einem Binäreditor wie z. B. genauer untersuchen müssen
hexedit
, haben Sie einige Orientierungspunkte, die darauf hinweisen, wo sich möglicherweise etwas Interessantes befindet.strings
Es gibt eine Optiont x
, mit der jeder gedruckten Zeichenfolge der Offset in der Datei hexadezimal vorangestellt wird (o für Oktal / d für Dezimal), damit Sie später wissen, wo Sie ihn finden. Selbst sehr kurze Dateien sind eine Menge zu bewältigen, wenn Sie sie Zeichen für Zeichen betrachten müssen.quelle