Показать файлы для печати символов со строками

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

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

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

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

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

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

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

кошка yourfilename.odt | Больше

(Замените yourfilename.odt на имя файла, который вы создали)

То, что вы увидите, это целая стена неразборчивого текста.

Нажмите пробел, чтобы прокрутить файл. Спорадически по всему файлу вы увидите часть текста, который вы ввели.

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

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

строки yourfilename.odt | Больше

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

То, что вы сможете увидеть, что является ключевым, однако, находится на первой строке:

mimetypeapplication / vnd.oasis.opendocument.text

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

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

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

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

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

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

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

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

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

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

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

строки -d ваше имя файла

строки —data yourfilename

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

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

строки -a ваше имя файла

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

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

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

строки -f ваше имя файла

strings —print-file-name yourfilename

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

yourfilename: фрагмент текста

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

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

строки -o ваше имя файла

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

16573 твой
17024 текст

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

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

строки -t d ваше имя файла

strings -t o yourfilename

строки -t h твое имя файла

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

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

строки -s "|" yourfilename

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

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

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

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

строки -n 8 твое имя файла

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

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

strings --bytes = 8 yourfilename

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

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

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

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

строки -w ваше имя файла

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

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

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

По умолчанию используется 7-битный байт.

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

строки -e ваше имя файла

строки —encoding = s ваше имя файла

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

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

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

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

Строки -T bfdname 

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

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

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

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

нано стрингсоптс

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

-f -o -n 3 -s "|"

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

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

строки @stringsopts yourfilename

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

Получать помощь

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

строки --help

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

мужские струны

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

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

строки -v

струны -V

строки — версия

Ссылка на основную публикацию