Как использовать команду strings в Linux
Опубликовано: 2022-01-29 Хотите увидеть текст внутри двоичного файла или файла данных? Команда Linux strings
извлекает для вас эти биты текста, называемые «строками».
В Linux полно команд, которые могут выглядеть как решения для поиска проблем. Команда strings
определенно попадает в этот лагерь. Только какова его цель? Есть ли смысл в команде, которая выводит список печатных строк из двоичного файла?
Сделаем шаг назад. Двоичные файлы, такие как программные файлы, могут содержать строки удобочитаемого текста. Но как их увидеть? Если вы используете cat
или less
, вы, вероятно, получите зависшее окно терминала. Программы, предназначенные для работы с текстовыми файлами, плохо справляются, если через них пропускаются непечатаемые символы.
Большинство байтов в двоичном файле не могут быть прочитаны человеком и не могут быть выведены в окно терминала осмысленным образом. Нет символов или стандартных символов для представления двоичных значений, которые не соответствуют буквенно-цифровым символам, знакам препинания или пробелам. В совокупности они известны как «печатные» символы. Остальные — «непечатаемые» символы.
Таким образом, попытка просмотра или поиска текстовых строк в двоичном файле или файле данных является проблемой. И вот тут на помощь приходят strings
. Он извлекает из файлов строки печатных символов, чтобы другие команды могли использовать эти строки без необходимости бороться с непечатаемыми символами.
Использование строковой команды
В команде strings
нет ничего сложного, и ее основное использование очень простое. Мы указываем имя файла, который мы хотим, чтобы strings
искали в командной строке.
Здесь мы собираемся использовать строки в двоичном файле — исполняемом файле, называемом «jibber». Мы набираем strings
, пробел, «jibber» и нажимаем Enter.
струны тарабарщина
Строки извлекаются из файла и отображаются в окне терминала.
Установка минимальной длины строки
По умолчанию строки будут искать строки, состоящие из четырех или более символов. Чтобы установить большую или меньшую минимальную длину, используйте параметр -n
(минимальная длина).
Обратите внимание, что чем короче минимальная длина, тем выше вероятность того, что вы увидите больше мусора.
Некоторые двоичные значения имеют то же числовое значение, что и значение, представляющее печатный символ. Если два из этих числовых значений окажутся рядом в файле, и вы укажете минимальную длину, равную двум, эти байты будут представлены, как если бы они были строкой.
Чтобы попросить strings
использовать два в качестве минимальной длины, используйте следующую команду.
строки -n 2 джиббер
Теперь у нас есть двухбуквенные строки, включенные в результаты. Обратите внимание, что пробелы считаются печатными символами.
Протягивание струн через Less
Из-за длины вывода strings
мы собираемся передать его через less
. Затем мы можем прокрутить файл в поисках интересующего текста.
струны тарабарщина | меньше
Список теперь представлен для нас в less
, причем сначала отображается верхняя часть списка.
Использование строк с объектными файлами
Обычно файлы исходного кода программы компилируются в объектные файлы. Они связаны с файлами библиотеки для создания двоичного исполняемого файла. У нас есть объектный файл jibber, так что давайте заглянем внутрь этого файла. Обратите внимание на расширение файла «.o».
джиббер.о | меньше
Все строки первого набора переносятся на восьмой столбец, если они длиннее восьми символов. Если они были завернуты, в девятом столбце стоит символ «H». Вы можете распознать эти строки как операторы SQL.
Прокрутка вывода показывает, что это форматирование не используется во всем файле.
Интересно увидеть различия в текстовых строках между объектным файлом и готовым исполняемым файлом.
Поиск в определенных областях файла
Скомпилированные программы имеют внутри себя разные области, которые используются для хранения текста. По умолчанию strings
ищет текст во всем файле. Это так же, как если бы вы использовали опцию -a
(все). Чтобы поиск строк выполнялся только в инициализированных, загруженных разделах данных в файле, используйте параметр -d
(данные).
строки -d джиббер | меньше
Если у вас нет веской причины, вы можете также использовать настройки по умолчанию и выполнять поиск по всему файлу.
Печать смещения строки
Мы можем заставить strings
печатать смещение от начала файла, в котором расположена каждая строка. Для этого используйте параметр -o
(смещение).
строки -o parse_phrases | меньше
Смещение дается в восьмеричном формате.
Чтобы смещение отображалось в другой системе счисления, например, в десятичной или шестнадцатеричной системе счисления, используйте параметр -t
(основание счисления). За параметром системы счисления должно следовать d
(десятичное), x
(шестнадцатеричное) или o
(восьмеричное). Использование -to
аналогично использованию -o
.
строки -td parse_phrases | меньше
Смещения теперь печатаются в десятичном формате.
строки -tx parse_phrases | меньше
Смещения теперь печатаются в шестнадцатеричном формате.
Включая пробелы
strings
считает символы табуляции и пробела частью найденных строк. Другие пробельные символы, такие как перевод строки и возврат каретки, не обрабатываются так, как если бы они были частью строк. Параметр -w
(пробел) заставляет строки обрабатывать все символы пробела, как если бы они были частью строки.
строки -w add_data | меньше
Мы видим пустую строку в выводе, которая является результатом (невидимого) возврата каретки и символов новой строки в конце второй строки.
Мы не ограничены файлами
Мы можем использовать strings
со всем, что представляет собой или может создавать поток байтов.
С помощью этой команды мы можем просмотреть оперативную память (RAM) нашего компьютера.
Нам нужно использовать sudo
, потому что мы обращаемся к /dev/mem. Это файл символьного устройства, который содержит образ основной памяти вашего компьютера.
строки sudo /dev/mem | меньше
Список не является всем содержимым вашей оперативной памяти. Это просто строки, которые можно извлечь из него.
СВЯЗАННЫЕ С: Что означает «Все является файлом» в Linux?
Поиск во многих файлах одновременно
Подстановочные знаки можно использовать для выбора групп файлов для поиска. Символ *
представляет несколько символов, а ?
символ представляет любой отдельный символ. Вы также можете указать несколько имен файлов в командной строке.
Мы собираемся использовать подстановочный знак и искать все исполняемые файлы в каталоге /bin. Поскольку листинг будет содержать результаты из многих файлов, мы будем использовать параметр -f
(имя файла). Это напечатает имя файла в начале каждой строки. Затем мы можем увидеть, в каком файле была найдена каждая строка.
Мы передаем результаты через grep и ищем строки, содержащие слово «Авторское право».
строки -f /bin/* | авторское право
Мы получаем аккуратный список заявлений об авторских правах для каждого файла в каталоге /bin с именем файла в начале каждой строки.
струны распущены
В струнах нет никакой тайны; это типичная команда Linux. Он делает что-то очень конкретное и делает это очень хорошо.
Это еще один из винтиков Linux, и он действительно оживает, когда работает с другими командами. Когда вы видите, как она может располагаться между двоичными файлами и другими инструментами, такими как grep
, вы начинаете ценить функциональность этой малоизвестной команды.
Команды Linux | ||
Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
Процессы | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · тайм-аут · стена · да · убить · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · дата · bg · fg | |
Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов