Как да използвате командата за низове в Linux

Искате ли да видите текста в двоичен файл или файл с данни? Командата на Linux strings издърпва тези битове текст – наречени „низове“ – вместо вас.

Linux е пълен с команди, които могат да изглеждат като решения при търсене на проблеми. Командата на струните определено попада в този лагер. Само каква е целта му? Има ли смисъл към команда, която изброява низовете за печат от двоичен файл?

Да направим крачка назад. Двоичните файлове – като програмни файлове – може да съдържат низове от текст, четим от човека. Но как можете да ги видите? Ако използвате cat или по-малко, вероятно ще се окажете с окачен прозорец на терминала. Програмите, които са проектирани да работят с текстови файлове, не се справят добре, ако през тях се подават непечатаеми знаци.

Повечето от байтовете в двоичен файл не са четими от човека и не могат да бъдат отпечатани в прозореца на терминала по начин, който има някакъв смисъл. Няма знаци или стандартни символи за представяне на двоични стойности, които не съответстват на буквено-цифрови знаци, пунктуация или празни интервали. Заедно те са известни като „печатни“ знаци. Останалите са символи, които не могат да бъдат отпечатани.

Така че опитът за преглед или търсене чрез двоичен файл или файл с данни за текстови низове е проблем. И тук идват струните. Те се извличат низове от печатаеми знаци от файлове така че други команди да могат да използват низовете, без да се налага да се борят с непечатаеми знаци.

Използване на низовете Command

Няма нищо сложно в командата strings, а основната й употреба е много проста. Предоставяме името на файла, в който желаем низовете да търсят в командния ред.

  Как да направите резервно копие на Thunderbird профил в Linux

Тук ще използваме низове в двоичен файл – изпълним файл – наречен „jibber“. Въведем низове, интервал, „jibber“ и след това натискаме Enter.

strings jibber

Низовете се извличат от файла и се изброяват в прозореца на терминала.

Задаване на минимална дължина на низа

По подразбиране низовете ще търсят низове, които са четири знака или по-дълги. За да зададете по-дълга или по-къса минимална дължина, използвайте опцията -n (минимална дължина).

Имайте предвид, че колкото по-къса е минималната дължина, толкова по-голям е шансът да видите повече боклуци.

Някои двоични стойности имат същата цифрова стойност като стойността, която представлява символ за печат. Ако две от тези числови стойности се случи да са една до друга във файла и посочите минимална дължина от две, тези байтове ще бъдат отчетени, сякаш са низ.

За да поискате низовете да използват две като минимална дължина, използвайте следната команда.

strings -n 2 jibber

Вече имаме двубуквени низове, включени в резултатите. Имайте предвид, че интервалите се отчитат като символ за печат.

Тръбни струни През По-малко

Поради дължината на изхода от низове, ние ще го предаваме през по-малко. След това можем да превъртаме през файла, търсейки текст, който ни интересува.

strings jibber | less

Обявата вече е представена за нас в по-малко, като горната част на списъка се показва първо.

Използване на низове с обектни файлове

Обикновено файловете с изходен код на програмата се компилират в обектни файлове. Те са свързани с библиотечни файлове за създаване на двоичен изпълним файл. Разполагаме с обектния файл jibber, така че нека да погледнем вътре в този файл. Обърнете внимание на разширението на файла „.o“.

jibber.o | less

Първият набор от низове се обвиват в колона осем, ако са по-дълги от осем знака. Ако са били увити, символът „H“ е в колона девет. Може да разпознаете тези низове като SQL изрази.

  Как да възпроизвеждате видео от терминала в Linux с Mplayer

Превъртането през изхода разкрива, че това форматиране не се използва в целия файл.

Интересно е да се видят разликите в текстовите низове между обектния файл и готовия изпълним файл.

Търсене в определени области във файла

Компилираните програми имат различни области в себе си, които се използват за съхранение на текст. По подразбиране strings търси целия файл, търсейки текст. Това е все едно сте използвали опцията -a (всички). За да имате търсене на низове само в инициализирани, заредени секции с данни във файла, използвайте опцията -d (данни).

strings -d jibber | less

Освен ако нямате основателна причина за това, можете също да използвате настройката по подразбиране и да търсите в целия файл.

Отпечатване на отместване на низа

Можем да накараме низовете да отпечатват отместването от началото на файла, в който се намира всеки низ. За да направите това, използвайте опцията -o (отместване).

strings -o parse_phrases | less

Отместването е дадено Осмични.

За да изведете отместването в различна числова основа, като десетична или шестнадесетична, използвайте опцията -t (основание). Опцията за основа трябва да бъде последвана от d (десетичен), х (шестнадесетичен), или o (Осмично). Използването на -to е същото като използването на -o.

strings -t d parse_phrases | less

Отместванията вече се отпечатват в десетичен знак.

strings -t x parse_phrases | less

Отместванията вече се отпечатват в шестнадесетичен формат.

Включително празно пространство

strings счита табулацията и интервала за част от низовете, които намира. Други символи за интервал, като нови редове и връщане на карета, не се третират така, сякаш са част от низовете. Опцията -w (бело пространство) кара низовете да третират всички символи за интервали, сякаш са части от низа.

strings -w add_data | less

Можем да видим празния ред в изхода, който е резултат от (невидимото) връщане на карета и знаци за нов ред в края на втория ред.

  Каква е разликата между Linux и Unix?

Не сме ограничени до файлове

Можем да използваме низове с всичко, което представлява или може да произведе поток от байтове.

С тази команда можем да разгледаме оперативна памет (RAM) на нашия компютър.

Трябва да използваме sudo, защото имаме достъп до /dev/mem. Това е файл с символно устройство, който съдържа изображение на основната памет на вашия компютър.

sudo strings /dev/mem | less

Списъкът не е цялото съдържание на вашата RAM памет. Това са само низовете, които могат да бъдат извлечени от него.

Търсене на много файлове наведнъж

Заместващите символи могат да се използват за избор на групи файлове, които да се търсят. Знакът * представлява множество знаци, а ? символът представлява всеки единичен знак. Можете също да изберете да предоставите много имена на файлове в командния ред.

Ще използваме заместващ знак и ще търсим във всички изпълними файлове в директорията /bin. Тъй като списъкът ще съдържа резултати от много файлове, ще използваме опцията -f (име на файл). Това ще отпечата името на файла в началото на всеки ред. След това можем да видим в кой файл е намерен всеки низ.

Пренасяме резултатите grepи търси низове, които съдържат думата „Авторски права“.

strings -f /bin/* | grep Copyright

Получаваме изряден списък на изявленията за авторски права за всеки файл в директорията /bin, с името на файла в началото на всеки ред.

струни Разплетени

Няма мистерия за струните; това е типична команда за Linux. Прави нещо много конкретно и го прави много добре.

Това е още едно от зъбните колела на Linux и наистина оживява, когато работи с други команди. Когато видите как може да седи между двоични файлове и други инструменти като grep, започвате да оценявате функционалността на тази леко неясна команда.