Швидкий пошук інформації у терміналі 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, але має кілька ключових переваг:
- завдяки оптимізаціям і багатопоточності пошук проходить значно швидше, навіть у великих каталогах.
rgавтоматично перевіряє всі підтеки, не треба додатково вказувати прапорець-r.- приховані файли, .git-каталоги та бінарні файли відсіюються самостійно, тож ви отримуєте тільки релевантні результати.
- автоматично підсвічує результати та показує номери рядків, тож відразу видно, де саме знайдено потрібне.
Встановлення за командою:
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.