Отображение печатаемых символов файла с помощью строк

Вы когда-нибудь пытались открыть файл в редакторе только для того, чтобы обнаружить, что он содержит нечитаемый двоичный контент?

Команда Linux "strings" позволяет просматривать удобочитаемые символы в любом файле.

Основная цель использования команды «strings» — определить, какой тип файла вы просматриваете, но вы также можете использовать ее для извлечения текста. Например, если у вас есть файл из проприетарной программы, которая сохраняет файлы в странном двоичном формате, вы можете использовать «строки» для извлечения текста, который вы помещаете в файл.

Пример использования команды Strings

Отличный способ продемонстрировать возможности команды strings — создать документ с помощью LibreOffice Writer.

Просто откройте LibreOffice Writer и введите текст, а затем сохраните его в стандартном формате ODT.

Теперь откройте окно терминала (нажмите CTRL, ALT и T одновременно), а затем с помощью команды cat отобразите файл следующим образом:

кот твой

(Замените yourfilename.odt именем созданного вами файла)

Вы увидите целую стену неразборчивого текста.

Нажмите пробел для прокрутки файла. Время от времени в файле вы будете видеть часть введенного вами текста.

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

В простейшей форме вы можете выполнить следующую команду:

струны yourfi

Как и прежде, появится стена текста, но только текст, который вы можете прочитать как человек. Если вам повезет, вы сможете увидеть свой текст.

Однако главное, что вы увидите, находится в первой строке:

mimetypeapplication / vnd.oasis.

Мы знаем, что тип файла — ODT-файл LibreOffice Writer по двум причинам:

  1. Мы создали файл
  2. Расширение — .ODT

Представьте, что вы не создавали файл или нашли файл на восстановленном диске, и у файла нет расширения.

Восстановление Windows часто восстанавливало файлы с такими именами, как 0001, 0002, 0003 и т. Д. Тот факт, что файлы были восстановлены, — это замечательно, но попытка выяснить, какие типы этих файлов были, было кошмаром.

Используя строки, у вас есть шанс определить тип файла. Знание того, что файл является файлом opendocument.text, означает, что вы можете сохранить его с расширением ODT и открыть в LibreOffice writer.

Если вы не знали, что файл ODT — это в основном сжатый файл. Если вы переименуете yourfilename.odt в yourfilename.zip, вы можете открыть его в инструменте архивирования и даже распаковать файл.

Альтернативное поведение

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

Что именно это означает? Кажется, никто не знает.

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

Если при запуске команды strings с использованием поведения по умолчанию вы не получаете результат, на который надеялись, попробуйте выполнить одну из следующих команд, чтобы увидеть, имеет ли это значение:

строка

or

строки —data yourfilename

На странице руководства указано, что указанная выше команда может помочь уменьшить количество мусора, возвращаемого из строк.

Команду «strings» можно настроить для работы в обратном порядке, так что переключатель «минус d» является поведением по умолчанию. Если это так в вашей системе, вы можете вернуть все данные, используя следующую команду:

строка

Форматирование вывода

Вы можете получить текст в выводе для отображения имени файла рядом с каждой строкой текста.

Для этого выполните одну из следующих команд:

строка

or

строки —print-file-name yourfilename

Результат теперь будет выглядеть примерно так:

yourfilename: кусок текста

or

yourfilename: еще один фрагмент текста

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

строка

Результат будет выглядеть примерно так:

Смещение на самом деле является восьмеричным смещением, хотя в зависимости от того, как строки были скомпилированы для вашей системы, это также может быть шестнадцатеричное или десятичное смещение.

Более точный способ получить желаемое смещение — использовать следующие команды:

строки -td yourfilename
строки -to yourfilename
строки -th yourfilename

Минус t означает возврат смещения, а следующий за ним символ определяет тип смещения. (т.е. d = десятичное, o = восьмеричное, h = шестнадцатеричное).

По умолчанию команда strings печатает каждую новую строку с новой строки, но вы можете установить разделитель по вашему выбору. Например, чтобы использовать вертикальную черту ("|") в качестве разделителя, выполните следующую команду:

строки -s "| &

Отрегулируйте предел строки

Команда strings по умолчанию ищет строку из 4 печатных символов подряд. Вы можете настроить значение по умолчанию, чтобы оно возвращало только строку с 8 печатаемыми символами или 12 печатными символами.

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

Чтобы настроить ограничение строки, выполните следующую команду:

струны

В приведенном выше примере я изменил ограничение на 8. Вы можете заменить 8 на любое число по вашему выбору.

Вы также можете использовать следующую команду, чтобы сделать то же самое:

строки — байты & #

Включить пробелы

По умолчанию команда strings включает в себя пробелы, такие как табуляция или пробел, в качестве печатаемого символа. Поэтому, если у вас есть строка, которая читается как «кошка сидела на циновке», тогда команда strings вернет весь текст.

Символы новой строки и символы возврата каретки по умолчанию не считаются печатными символами.

Чтобы заставить строки распознавать символы новой строки и символы возврата каретки в виде печатаемых символов, выполните строки следующим образом:

строка

Изменить кодировку

Для использования со строками доступно 5 вариантов кодирования:

  • s = 7-битный байт (используется для ASCII, ISO 8859)
  • S = 8-битный байт
  • b = 16-битный bigendian
  • l = 16 бит, маленький индийский

По умолчанию — 7-битный байт.

Чтобы изменить кодировку, выполните следующую команду:

строки -es yourfilename
строки —encoding = s yourfilename

В приведенной выше команде я указал значение по умолчанию «s», что означает 7-битный байт. Просто замените "s" буквой кодировки по вашему выбору.

Изменение имени описания двоичного файла

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

Этот переключатель предназначен для экспертов. Если у вас есть другая библиотека, вы можете сделать это, выполнив следующую команду strings:

st

Параметры чтения из файла

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

Что вы можете сделать, так это создать текстовый файл с помощью nano и указать параметры в этом файле.

Чтобы попробовать это в терминале, выполните следующую команду:

В файле введите следующий текст:

-f -o -n

Сохраните файл, нажав CTRL и O, и выйдите, нажав CTRL и X.

Чтобы запустить строковые команды с этими параметрами, выполните следующую команду:

строки @strings

Параметры будут считаны из файла stringsopts, и вы должны увидеть имя файла перед каждой строкой, смещение и знак "|" как разделитель.

Получение справки

Если вы хотите узнать больше о строках, вы можете запустить следующую команду, чтобы получить помощь.

Кроме того, вы также можете прочитать страницу руководства:

Узнайте, какую версию строк вы используете

Чтобы найти версию запущенных строк, выполните одну из следующих команд:

строки -v
струны -V
строки — версия