Действительно ли безопасно использовать стандартный вход и вывод с двоичными данными?

Я должен разделить двоичный файл на два. Я задавался вопросом, могли ли голова и/или хвост использоваться, но затем я задался вопросом..., действительно ли безопасно использовать перенаправление, передавая по каналу и т.д. с двоичными данными? Новые строки становятся имевшими предосудительные отношения, или аннулирует проигнорированный, или клавиша Backspace, или удалите, делают что-то специальное? (удар, kubuntu 18.04 LTS)

14
задан 29 December 2018 в 05:58

2 ответа

Да безопасно, если Вы передаете его по каналу к другому процессу или сохраняете его в файл. Существует потенциальная "странность" при разрешении двоичному файлу stdout печать к терминалу, так как это может содержать escape-последовательности (наугад), которые могут временно испортить дисплей терминала.

19
ответ дан 23 November 2019 в 02:59

Основная проблема с использованием команд как head или tail это, они ориентированы на строку, и двоичные файлы не. Если у них действительно есть новые строки в них, они часто не используются для представления конца строки и если они, они могут быть, просто часть строк как сообщения программы или поля данных.

Если данные структурированы всегда, то необходимо принять это во внимание в выборе точек разделения, таким образом, Вы не повреждаете структуры в середине.

Если Вы знаете структуру файла, можно использовать команду такой как

dd -if input-file -of output-file ...

с опциями только скопировать столько блоков данных определенного размера, запускающегося при конкретном (увеличенном) смещении в файл.

Это похоже split команда, как упомянуто @egmont автоматизирует этот процесс для Вас, но это, кажется, ориентировано на строку по умолчанию, таким образом, необходимо будет указать дополнительные опции такой как --bytes count сказать это, насколько большой каждая часть файла должна быть.


Как примечание стороны, если Вы не знаете то, что находится в файле, но подозреваемом, это содержит по крайней мере некоторые значимые текстовые данные, strings команда является отличным способом взятия первого, надеются видеть то, с чем Вы имеете дело.

strings -n 6 file | less

найдет все выполнения печатаемых символов по крайней мере шестью символами в длине и отобразит их в пейджере, таким образом, они не летят на терминале. Используя число, немного больше, чем значение по умолчанию 4 символов, помогает устранить крошечные отрывки данных, которые просто, оказывается, являются печатаемыми, но не используются тот путь в файле.

Если позже необходимо исследовать файл более подробно с двоичным редактором такой как hexedit, у Вас будут некоторые ориентиры, которые указывают, где что-то интересное могло бы быть найдено.

strings имеет опцию -t x это будет предшествовать каждой печатной строке с ее смещением в файл в шестнадцатеричном (o для octal/d для десятичного числа), таким образом, Вы будете знать, где найти его позже. Даже очень короткие файлы много для контакта с тем, когда необходимо посмотреть на них символ символом.

1
ответ дан 23 November 2019 в 02:59

Другие вопросы по тегам:

Похожие вопросы: