Мне нужно разбить двоичный файл на две части. Мне было интересно, можно ли использовать голову и / или хвост, но потом я подумал ... безопасно ли использовать перенаправление, трубопровод и т. Д. С двоичными данными? Новые строки портятся, или игнорируются пустые значения, или backspace или delete делают что-то особенное? (Баш, Кубунту 18.04 LTS)
command-line
18.04
bash
kubuntu
B.Tanner
источник
источник
split
команду.Ответы:
Да, это безопасно, если вы передадите его другому процессу или сохраните в файл. Существует потенциальная «странность», если вы разрешите двоичному выводу на печать на терминал, поскольку он может содержать escape-последовательности (случайным образом), которые могут временно испортить отображение терминала.
источник
reset
и нажать Enter, чтобы исправить это.reset<enter>
фактически не будет набираться та последовательность символов, которую видит терминал ...stty sane; tput rs1
последовательность команд поможет вам, когда есть угловые случаи, когда выreset
не работаете. Такие случаи, в дополнение к упомянутым Бакуриу, могут включать в себя ширину линии терминала / столбцов или я предполагаю настройки, относящиеся к последовательной связи (скорость передачи / четность).Основная проблема с использованием команд типа
head
илиtail
состоит в том, что они ориентированы на строки, а двоичные файлы - нет. Если в них есть новые строки, они часто не используются для представления конца строки, и если они есть, они могут быть просто частью строк, таких как программные сообщения или поля данных.Если данные структурированы каким-либо образом, вы должны принять это во внимание при выборе точек разделения, чтобы не разбивать структуры в середине.
Если вы знаете структуру файла, вы можете использовать такую команду, как
с параметрами, позволяющими копировать в файл только столько блоков данных определенного размера, начиная с определенного (увеличенного) смещения.
Похоже, что
split
команда, упомянутая @egmont, автоматизирует этот процесс для вас, но она по умолчанию ориентирована на строки, поэтому вам придется указать дополнительные параметры, например, указать размер--bytes count
каждого фрагмента файла. быть.В качестве примечания: если вы не знаете, что находится в файле, но подозреваете, что он содержит хотя бы некоторые значимые текстовые данные, эта
strings
команда является отличным способом первого взгляда, чтобы увидеть, с чем вы имеете дело.найдет все серии печатных символов длиной не менее шести символов и отобразит их в пейджере, чтобы они не пролетали над терминалом. Использование числа, немного превышающего значение по умолчанию из 4 символов, помогает исключить крошечные фрагменты данных, которые просто могут быть напечатаны, но не используются таким образом в файле.
Если вам позже потребуется более подробно изучить файл с помощью бинарного редактора, например
hexedit
, у вас будут некоторые ориентиры, указывающие, где можно найти что-то интересное.strings
имеет опцию -t x
которая будет предшествовать каждой напечатанной строке с ее смещением в файл в шестнадцатеричном формате (o для восьмеричного / d для десятичного), чтобы вы знали, где ее найти позже Даже с очень короткими файлами приходится иметь дело, когда нужно смотреть на них символ за символом.источник