Як використовувати команду рядків у Linux

Хочете побачити текст у двійковому файлі чи файлі даних? Команда Linux strings витягує ці фрагменти тексту, які називаються «рядками», для вас.

Linux сповнений команд, які можуть виглядати як рішення для пошуку проблем. Команда струн точно потрапляє в цей табір. Тільки яка його мета? Чи є сенс у команді, яка перераховує рядки для друку з двійкового файлу?

Зробимо крок назад. Двійкові файли, такі як програмні файли, можуть містити рядки тексту, зрозумілого людині. Але як їх побачити? Якщо ви використовуєте cat або менше, ви, ймовірно, отримаєте завісе вікно терміналу. Програми, розроблені для роботи з текстовими файлами, погано справляються, якщо через них подаються недруковані символи.

Більшість байтів у двійковому файлі не читаються людиною і не можуть бути надруковані у вікні терміналу у спосіб, який має будь-який сенс. Немає символів або стандартних символів для представлення двійкових значень, які не відповідають буквено-цифровим символам, пунктуації чи пробілам. У сукупності вони відомі як «друковані» символи. Решта символи, які не можна друкувати.

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

Використання рядків Command

У команді strings немає нічого складного, і її основне використання дуже просте. У командному рядку ми надаємо ім’я файлу, за яким потрібно шукати рядки.

  Як використовувати команду lsof Linux

Тут ми будемо використовувати рядки у двійковому файлі — виконуваному файлі — під назвою «jibber». Ми вводимо рядки, пробіл, «jibber», а потім натискаємо Enter.

strings jibber

Рядки витягуються з файлу та відображаються у вікні терміналу.

Встановлення мінімальної довжини рядка

За замовчуванням рядки шукатимуть рядки, які містять чотири символи або більше. Щоб встановити більшу або коротшу мінімальну довжину, використовуйте параметр -n (мінімальна довжина).

Зауважте, що чим коротша мінімальна довжина, тим вище ймовірність, що ви побачите більше сміття.

Деякі двійкові значення мають те саме числове значення, що й значення, що представляє символ для друку. Якщо два з цих числових значень знаходяться поруч у файлі і ви вкажете мінімальну довжину в два, ці байти будуть відображатися як рядок.

Щоб попросити рядки використовувати два як мінімальну довжину, скористайтеся такою командою.

strings -n 2 jibber

Тепер ми маємо дволітерні рядки, включені в результати. Зверніть увагу, що пробіли враховуються як символ для друку.

Трубопровідні струни Through Less

Через довжину виводу з рядків ми збираємося передавати його менше. Потім ми можемо прокручувати файл, шукаючи цікавий текст.

strings jibber | less

Перелік тепер представлений для нас у меншій кількості, першим відображається верхня частина списку.

Використання рядків з об’єктними файлами

Як правило, файли вихідного коду програми компілюються в об’єктні файли. Вони пов’язані з файлами бібліотеки для створення двійкового виконуваного файлу. У нас є файл об’єкта jibber, тож давайте заглянемо всередину цього файлу. Зверніть увагу на розширення файлу «.o».

jibber.o | less

Перший набір рядків загортається у вісім стовпців, якщо вони довші за вісім символів. Якщо вони були загорнуті, символ «H» міститься в дев’ятому стовпці. Ви можете розпізнати ці рядки як оператори SQL.

  Як грати в Orcs Must Die! 2 на Linux

Прокручування виводу показує, що це форматування не використовується в усьому файлі.

Цікаво побачити відмінності в текстових рядках між об’єктним файлом і готовим виконуваним файлом.

Пошук у певних областях у файлі

Скомпільовані програми мають різні області всередині себе, які використовуються для зберігання тексту. За замовчуванням strings шукає текст у всьому файлі. Це так само, як якщо б ви використовували параметр -a (all). Щоб рядки шукали лише в ініціалізованих, завантажених розділах даних у файлі, використовуйте параметр -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

Ми бачимо порожній рядок у виводі, який є результатом (невидимого) повернення каретки та символів нового рядка в кінці другого рядка.

  Як грати в ігри Nintendo DS на Linux за допомогою DesmuME

Ми не обмежуємось файлами

Ми можемо використовувати рядки з усім, що є або може створити потік байтів.

За допомогою цієї команди ми можемо переглядати оперативна пам’ять (ОЗУ) нашого комп’ютера.

Нам потрібно використовувати sudo, оскільки ми отримуємо доступ до /dev/mem. Це файл символьного пристрою, який містить образ основної пам’яті вашого комп’ютера.

sudo strings /dev/mem | less

Список не є повним вмістом вашої оперативної пам’яті. З нього можна витягти лише рядки.

Пошук кількох файлів одночасно

Для вибору груп файлів для пошуку можна використовувати символи підстановки. Символ * представляє кілька символів, а ? символ представляє будь-який окремий символ. Ви також можете надати багато імен файлів у командному рядку.

Ми будемо використовувати символ підстановки та здійснити пошук у всіх виконуваних файлах у каталозі /bin. Оскільки список міститиме результати з багатьох файлів, ми будемо використовувати параметр -f (ім’я файлу). Це надрукує назву файлу на початку кожного рядка. Потім ми можемо побачити, в якому файлі знайдено кожен рядок.

Ми передаємо результати grepі шукайте рядки, які містять слово «Авторське право».

strings -f /bin/* | grep Copyright

Ми отримуємо акуратний список заяв про авторські права для кожного файлу в каталозі /bin з назвою файлу на початку кожного рядка.

струни Розгадана

У струнах немає таємниці; це типова команда Linux. Він робить щось дуже конкретне і робить це дуже добре.

Це ще один із гвинтиків Linux, який дійсно оживає, коли він працює з іншими командами. Коли ви бачите, як він може розташовуватися між двійковими файлами та іншими інструментами, такими як grep, ви починаєте цінувати функціональність цієї трохи незрозумілої команди.