ѕодпишитесь на наш Telegram-канал Ѕудьте в курсе последних новостей 👇 😉 ѕодписатьс€
ѕоддержим в трудное врем€ —пециальное предложение на техническую поддержку вашей »“ - инфраструктуры силами наших экспертов ѕодобрать тариф
ѕоставка оборудовани€ √аранти€ и помощь с настройкой. —кидка дл€ наших читателей по промокоду WIKIMERIONET  упить
»нтерфейс статистики Merion Mertics показывает ключевые диаграммы и графики по звонкам, а также историю звонков в формате, который легко поймет менеджер ѕопробовать бесплатно
¬недрение
офисной телефонии
Ўаг на пути к созданию доступных унифицированных коммуникаций в вашей компании ¬недрить
»нтеграци€ с CRM ѕомогаем навести пор€док с данными
и хранить их в единой экосистеме
ѕодключить
»“ Ѕезопастность ”мна€ информационна€ безопасность дл€ вашего бизнеса «аказать
ћерион Ќетворкс

6 минут чтени€

Ќужно просмотреть текст внутри двоичного файла или файла данных?  оманда Linux strings извлечет и выведет на терминал биты текста, которые называютс€ "строками".

 ак использовать команду Strings в Linux

Linux полон команд, которые могут выгл€деть как решени€ в поисках проблем.  оманда strings одна из них. “ак, зачем же она нужна? ≈сть ли похожа€ команда, котора€ перечисл€ет строки дл€ печати из двоичного файла?

ƒавайте вернемс€ назад. ƒвоичные файлы, такие как программные файлы, могут содержать строки читаемого человеком текста. Ќо как мы их видим? ≈сли использовать cat или less, то, скорее всего, зависнет окно терминала. ѕрограммы, предназначенные дл€ работы с текстовыми файлами, не могу обрабатывать исполн€емые файлы, содержащие непечатаемые символы.

Ѕольша€ часть данных в двоичном файле нечитабельна и не могут быть выведены в окно терминала каким-либо образом, так как нет знаков или стандартных символов дл€ представлени€ двоичных значений, которые не соответствуют буквенно-цифровым символам, знакам пунктуации или пробелам. ¬ совокупности они называютс€ "печатаемыми" символами. ќстальные - "непечатаемые" символы.

ѕоэтому попытка просмотра или поиска текстовых строк в двоичном файле или файле данных €вл€етс€ проблемой. » вот здесь на помощь спешит strings. ќн извлекает строки печатаемых символов из файлов, чтобы другие команды могли использовать эти строки без необходимости контактировать с непечатаемыми символами.


»спользование команды strings

Ќа самом деле нет ничего сложного в этой команде: просто передаем команде название файла.

 ак пример, мы попробуем просмотреть содержимое исполн€емого файла jibber с помощью strings.

strings jibber

Ќа скриншоте ниже список строк, извлечЄнных из указанного файла:

strings jibber

”становка минимальной длины строки

ѕо умолчанию, команда strings ищет строки, содержащие четыре и более символов. „тобы изменить значение по умолчанию используетс€ ключ Цn.

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

Ќекоторые двоичные значени€ имеют то же числовое значение, что и значение, представл€ющее печатаемый символ. ≈сли два из этих числовых значений наход€тс€ р€дом в файле, а минимальна€ длина, равна двум, эти байты будут отображатьс€ как строки.

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

strings -n 2 jibber

“еперь у нас на выводе есть строки, длина который равна двум и более символам. ”чтите, что пробел тоже считаетс€ печатаемым символом.

strings -n 2 jibber

ќграничение вывода команды strings командой less

„тобы ограничить объем выведенной информации вывод команды strings можно передать команде less, а затем прокруткой просматривать всю информацию:

strings jibber | less

“еперь мы видим список, выводимый командой less, где начало списка отображено первым:

strings jibber | less

»спользование strings с файлами объектов

ќбычно исходный код программ компилируетс€ в файлы объектов. ќни в свою очередь св€заны с файлами библиотек, чтобы создать исполн€емый файл. ” нас есть файл объектов jibber, давайте посмотрим, что в нем:

jibber.o | less

ƒанные вывод€тс€ в таблице по 8 колонок, кажда€ из строк которой заканчиваетс€ на букву УHФ. ¬ данном примере у нас SQL запрос.

jibber.o | less

Ќо если прокрутить ниже, то можно заметить, что форматирование не относитс€ ко всему файлу.

форматирование

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


ѕоиск в конкретной области файла

—компилированные программы имеют различные области, которые используютс€ дл€ хранени€ текста. ѕо умолчанию, strings ищет текст во всем файле. Ёто так же, как если бы вы использовали параметр -a (all). ƒл€ поиска строк только в инициализированных, загруженных разделах данных в файле используйте параметр -d (data).

strings -d jibber | less

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


¬ывод номера строки

»ногда бывает необходимо узнать точное смещение, расположение строки в файле. ¬ этом нам поможет ключ Цo (offset).

strings -o parse_phrases | less

¬ данном случае номера строки показаны в восьмеричной системе.

strings -o parse_phrases | less

ƒл€ получени€ значений в других системах исчислени€, достаточно использовать опцию Цt, а затем передать нужный ключ: d (дес€тична€ система), x (шестнадцатерична€) или o (восьмерична€). ќпци€ Цt с ключом o равнозначна запуску команды strings с ключом Цo.

strings -t d parse_phrases | less

“еперь номера строк показаны в дес€тичной системе:

strings -t d parse_phrases | less
strings -t x parse_phrases | less

ј тут в шестнадцатеричной:

strings -t x parse_phrases | less

¬ывод управл€ющих символов

 оманда strings принимает знаки табул€ции и пробела, как часть строки, игнориру€ при этом символ начала новой строки - /r или возврата каретки - /r. „тобы включить их отображение нужно добавить ключ Цw.

strings -w add_data | less

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

strings -w add_data | less

ћы не ограничены только файлами

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

— помощью этой команды мы можем просмотреть содержимое оперативной пам€ти (RAM) нашего компьютера. Ќам нужно использовать >sudo, потому что мы получаем доступ /dev/mem. Ёто символьного файл устройства, в котором хранитс€ изображение оперативной пам€ти компьютера.

sudo strings /dev/mem | less

¬ списке не все содержимое оперативной пам€ти, а лишь то, что команда strings смогла извлечь.

sudo strings /dev/mem | less

ѕоиск нескольких файлов сразу

ћаски можно использовать дл€ выбора групп файлов дл€ поиска. —имвол * обозначает нуль и больше символов, а символ Ђ?ї означает любой отдельный символ. ћожно также указать в командной строке множество имен файлов.

ћы будем использовать маску дл€ поиска всех исполн€емых файлов в каталоге /bin. ѕоскольку список будет содержать результаты из многих файлов, будет использоватьс€ параметр -f (им€ файла). »м€ файла будет напечатано в начале каждой строки. «атем можно просмотреть файл, в котором была найдена данна€ строка.

«атем передадим результаты через grep и выведем строки, содержащие слово "Copyright":

strings -f /bin/* | grep Copyright

ћы получаем упор€доченный список с об авторских правах каждого файла в каталоге /bin, с именем файла в начале каждой строки.

strings -f /bin/* | grep Copyright

 оманда strings распутана

 оманда strings Ц это не кака€-то тайна€ команда. Ёто обычна€ команда Linux. ќн делает выполн€ет конкретные задачи и делает это очень хорошо. Ёто еще один из преимуществ Linux, и действительно мощных в сочетании с другими командами.  огда вы видите, как он может оперировать двоичными файлами и другими инструментами, такими как grep, начинаете по-насто€щему ценить функциональность этой слегка непон€тной команды.