Як знайти певний файл за вмістом у Linux

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

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

grep, find, ack, ripgrep

Створіть тестову директорію з деякими файлами (створіть директорію, яка відповідає вашим потребам)

Змоделюємо робочий каталог з конфігураційними файлами.

mkdir -p ~/test-config
cd ~/test-config

echo "db_user=root" > db.conf
echo "db_password=12345" >> db.conf
echo "api_key=abcdef" > api.conf
echo "some random data" > readme.txt

Тепер маєш:

Класичний варіант: grep find

🔍 Рекурсивний пошук рядка у всіх файлах:

grep -r "search_term" /path/to/search

grep -r "password" ~/test-config

Фільтруйте за типом файлу за допомогою find:

find /path/to/search -type f -exec grep -l "search_term" {}
find . -type f -exec grep -l "password" {}
  • . = поточний каталог

  • тип f = тільки файли

  • exec grep -l “password” {} = запустити grep для файлів і показати лише ті, що містять “password”.

2. Потужніший варіант: grep з фільтрацією за regex і розширенням файлів

Приклад: Знайти всі файли .conf у каталозі /etc/, які містять “max_connections”

find . -name "*.conf" -exec grep -Hn "max_connections" {} +

  • find . – пошук з поточного каталогу

  • name “*.conf” – шукає тільки файли .conf

  • exec grep -Hn – шукає рядок max_connections

    • H виводить ім’я файлу

    • n – виводить номер рядка

Розширені інструменти для роботи з кодовими базами

🔍 ack – Швидкий, розумний grep для програмістів

ack "назва функції" /шлях/до/коду
  • Ігнорує .git, node_modules, vendor/ тощо.

  • Підтримує regex та фільтри за типами файлів

  • Швидше і чистіше, ніж grep у середовищі розробників

Встановлення ack (якщо ще не встановлено)

sudo apt install ack-grep # Debian/Ubuntu

brew install ack # macOS

ack "connectDB" ~/test-code

⚡ ripgrep (також відомий як rg) – найшвидша альтернатива grep

rg "token=123" /var/www/
  • Надшвидкий (написаний на Rust)

  • Рекурсивний за замовчуванням

  • Підсвічування синтаксису

  • Враховує Git (пропускає .git-нормовані файли)

✅ Встановити:

sudo apt install ripgrep

4. Пошук від імені користувача Root

Деякі системні файли потребують підвищених привілеїв:

sudo grep -r "PermitRootLogin" /etc/ssh

Або в комбінації з find:

sudo find / -type f -exec grep -l "root:" {} 2>/dev/null \;
  • 2>/dev/null: пригнічує помилки з правами доступу

5. Пошук без урахування регістру та по всьому слову

Без урахування регістру:

grep -ri "search_term" /path

Ціле слово:

grep -rw "exactword" /path
  • Комбінація: grep -rwi “word”

Поради професіоналів

уникайте бінарних файлів:

grep -rI "text" /path # I = ігнорувати бінарні

✅ Обмеження глибини:

find . -maxdepth 3 -type f -exec grep -l "X-Frame-Options" {}

✅ Пошук файлів журналу за датою:

grep "2025-04-17" /var/log/nginx/access.log

Бонус: Використання sed або awk для видобування вмісту із знайдених файлів

Приклад – витягнути знайдений рядок через 2 рядки після нього:

grep -A2 "error" /var/log/syslog

Або скористайтеся awk для вилучення шаблонів:

awk '/User/{print $1, $2, $3}' /var/log/auth.log

Висновок

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

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