Швидкий пошук інформації у терміналі Linux

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

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

У цьому гайді ми покажемо, як працювати з основними командами пошуку: від класичного grep до сучасного ripgrep, інтерактивного fzf та інструменту для коду ack

Пошук тексту у файлах за допомогою grep

Якщо ви плануєте опанувати лише одну команду — обирайте grep.

Назва означає Global Regular Expression Print, а основне призначення: знаходити рядки, що відповідають певному текстовому шаблону. У більшості дистрибутивів Linux grep уже встановлений, тож ви можете почати користуватися ним відразу.

Приклад базового пошуку

Щоб знайти всі рядки з текстом «error» у файлі fileserver.log, використайте команду:

grep "error" fileserver.log
  • grep перевіряє кожен рядок файлу.
  • Якщо рядок містить error, він буде виведений на екран.

Якщо вам не важливий регістр букв (щоб знайшло Error, ERROR або error), додайте прапорець -i:

grep -i "error" fileserver.log

Тепер grep ігноруватиме великі та малі літери.

Рекурсивний пошук у директорії

Щоб знайти слово у всіх файлах поточної теки та її підтеках, використайте прапорець -r (recursive):

grep -r "TODO"
  • grep переглядає всі файли та підтеки.
  • Зручно, якщо ви не знаєте точного розташування файлу.

Фільтрування зайвих рядків

Іноді потрібно навпаки відфільтрувати непотрібні результати. Для цього використовуйте прапорець -v:

grep -v "DEBUG" app.log
  • Показує всі рядки крім тих, що містять DEBUG.
  • Корисно для очищення логів від шуму або другорядних повідомлень.

Поєднання grep з іншими командами

grep чудово працює у парі з іншими командами через пайп | — вивід однієї команди можна передати іншій.

Наприклад, щоб знайти процеси, пов’язані з SSH:

ps aux | grep "ssh"
  • ps aux показує всі запущені процеси.
  • grep "ssh" відсіює лише ті рядки, де згадується SSH.

Цей принцип можна застосувати для будь-яких списків — від відкритих файлів до мережевих з’єднань.

Регулярні вирази в grep

grep підтримує регулярні вирази, що дозволяє шукати складніші шаблони. Наприклад, щоб знайти рядки, що починаються з числа:

ps aux | grep "ssh"
cc
grep "^[0-9]" file.txt
  • ^ — початок рядка.
  • [0-9] — будь-яка цифра від 0 до 9.

Це зручно для аналізу логів, структурованих даних або ідентифікаторів, які починаються з цифр.

ripgrep — сучасний і швидкий аналог grep

Якщо ви працюєте з великими проєктами та хочете шукати текст ще швидше, ніж за допомогою grep, вам на допомогу прийде ripgrep (або просто rg).

Він працює майже так само, як grep, але має кілька ключових переваг:

  1. завдяки оптимізаціям і багатопоточності пошук проходить значно швидше, навіть у великих каталогах.
  2. rg автоматично перевіряє всі підтеки, не треба додатково вказувати прапорець -r.
  3. приховані файли, .git-каталоги та бінарні файли відсіюються самостійно, тож ви отримуєте тільки релевантні результати.
  4. автоматично підсвічує результати та показує номери рядків, тож відразу видно, де саме знайдено потрібне.

Встановлення за командою:

sudo apt install ripgrep

Приклад пошуку

Щоб знайти всі TODO-коментарі в поточній теці та її підтеках:

rg "TODO"

Результат з’явиться миттєво, без зайвих файлів і з кольоровим підсвічуванням.

Пошук файлів і тек з find

Якщо потрібно знайти сам файл або теку, а не конкретний рядок всередині, використовуйте find.

find /path -name "filename"

Наприклад, знайти конфігураційний файл:

find /etc -name "config.json"
  • -name чутливий до регістру.

Щоб ігнорувати регістр, використайте -iname:

find . -iname "readme.md"

Пошук за датою чи маскою

Наприклад, щоб знайти всі лог-файли, змінені за останні 3 дні, застосуйте цю команду:

find /var/log -name "*.log" -mtime -3
  • *.log — будь-які файли з розширенням .log.
  • -mtime -3 — зміни протягом трьох днів.

Це зручно, коли потрібно розібратися з логами, резервними копіями або великими файлами, що займають місце.

Інтерактивний пошук з fzf

fzf — це інтерактивний fuzzy-фільтр для термінала. Його головна сила в тому, що ви можете шукати файли або записи на льоту, навіть якщо не пам’ятаєте точну назву.

Уявіть, що у вашому проєкті є файл react_component.js. Вам не потрібно вводити повну назву — достатньо набрати, наприклад, rctjs, і fzf все знайде.

Команда для завантаження:

sudo apt install fzf

Простіший спосіб запуску

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

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

Поєднання fzf з іншими командами

fzf чудово працює разом із find. Наприклад:

find . -type f | fzf
  • find формує список усіх файлів у поточній теці та підтеках;
  • fzf дає можливість інтерактивно обрати потрібний, фільтруючи результати прямо під час введення.

Це значно швидше, ніж переглядати списки вручну, особливо у великих проєктах.

Пошук в історії команд

Для цього підійде команда:

history | fzf
  • Якщо пам’ятаєте лише частину команди, достатньо набрати кілька букв;
  • fzf покаже збіг, який можна одразу виконати повторно.

Це особливо зручно, коли потрібно швидко повторити складну команду, яку ви виконували кілька днів тому, але не можете згадати повністю.

Пошук у коді з ack

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

Крім того, ack розуміє типи файлів і дозволяє обмежувати пошук, наприклад, тільки кодом Python, файлами JavaScript або документами Markdown.

Встановити інструмент можна командою:

sudo apt install ack

Приклад пошуку

Щоб знайти визначення функції у файлах Python, достатньо виконати:

ack --python "def my_function"

А якщо потрібно швидко переглянути всі TODO-коментарі у проєкті, можна запустити простіший варіант:

ack "TODO"

Прапорці -i та -n дають змогу ігнорувати регістр символів і виводити номери рядків — зручно, коли хочете одразу перейти до потрібного фрагмента коду.

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

Післяслово

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

Якщо хочете поглибити знання та системно прокачати роботу з Linux, рекомендуємо звернути увагу на каталог авторських курсів Linux від ITEDU

Програми створені інженерами-практиками, орієнтовані на реальні робочі сценарії та підходять як для старту в системному адмініструванні, так і для розвитку в напрямі DevOps.

Залишити відповідь

Дякуємо, що поділились