Как найти файл в Linux по имени или тексту внутри: команды find и grep для новичков
Проблема поиска нужной информации в файловой системе Linux
В операционной системе Linux нет графической кнопки «Поиск», а файлы конфигураций, скрипты и логи разбросаны по сотням системных каталогов (/etc/, /var/, /opt/, /usr/). Начинающие администраторы часто тратят часы на ручной перебор папок в попытке вспомнить, где лежит нужный конфиг или в каком файле прописан пароль от базы данных. Две базовые утилиты — find (для поиска по свойствам файлов) и grep (для поиска по содержимому) решают эту задачу за секунды.
Разница между find и grep простыми словами
| Утилита | Что ищет | Пример запроса |
|---|---|---|
find | Сам файл по его имени, размеру, дате изменения или расширению | «Где на диске лежит файл с именем wp-config.php?» |
grep | Текст внутри файлов (поиск строки, переменной, IP-адреса) | «В каких файлах папки /etc/ написано слово 192.168.1.100?» |
Практические примеры поиска файлов и текста
Сценарий 1: Поиск файла по точному имени или маске (find)
Найдем конфигурационный файл nginx.conf по всей файловой системе:
sudo find / -name "nginx.conf" 2>/dev/null/— искать начиная с корня диска (можно указать конкретную папку, например/etc).-name— точное имя файла (с учетом регистра).-iname— поиск без учета регистра (найдет иFile.txt, иfile.TXT).2>/dev/null— скрыть системные ошибки «Permission denied» для папок, к которым нет доступа.
Сценарий 2: Поиск всех файлов с расширением .log, весом больше 100 МБ
Найдем тяжелые файлы логов, забивающие свободное место на диске:
sudo find /var/log -type f -name "*.log" -size +100MСценарий 3: Поиск текста внутри всех файлов в папке (grep -rnw)
Найдем, в каком именно файле сайта прописана база данных db_shop:
grep -rnw '/var/www/my_site/' -e 'db_shop'-r(Recursive) — сканировать все вложенные подпапки.-n(Line Number) — показать точный номер строки в найденном файле.-w(Word) — искать слово целиком (исключает ложные совпадения).-I(дополнительно) — игнорировать бинарные файлы (картинки, архивы).
Сценарий 4: Связка find + grep (Поиск текста только в PHP-файлах)
Если в проекте лежат миллионы картинок, искать по всем файлам подряд неэффективно. Найдем текст только в файлах с расширением .php:
find /var/www/ -type f -name "*.php" -exec grep -Hn "DB_PASSWORD" {} +Типовые ошибки администраторов
- Поиск find / без перенаправления ошибок 2>/dev/null: Без перенаправления поток ошибок доступа заблокирует весь экран терминала тысячами строк «Permission denied».
- Использование обычного grep на гигантских дампах SQL: Поиск регулярного выражения по SQL-дампу на 50 ГБ может подвесить диск. Ограничивайте вывод утилитой
headили используйте многопоточныйripgrep (rg).
Специалисты ITSTM проведут комплексное сканирование файловой системы на наличие уязвимостей, бэкдоров и инъекций вредоносного кода.
Частые вопросы (FAQ)
Как найти файлы, которые изменялись за последние 24 часа?
Используйте параметр mtime: sudo find /var/www/ -type f -mtime -1 (значение -1 означает менее 1 дня назад).
Как найти и сразу удалить все временные файлы .tmp?
Используйте ключ -delete: find /tmp -type f -name "*.tmp" -delete (будьте предельно внимательны перед запуском!).
В чем преимущество утилиты locate перед find?
Утилита locate ищет файлы мгновенно по заранее проиндексированной базе данных (updatedb), но не видит файлы, созданные пару минут назад.
Как с помощью grep исключить определенные папки из поиска?
Используйте флаг --exclude-dir: grep -rnw --exclude-dir={node_modules,vendor,cache} '/var/www/' -e 'SECRET_KEY'.