Одна из частых задач админа или разработчика — понять, в каких файлах встречается нужная строка, параметр или кусок кода. Особенно когда проект большой или система незнакомая.
Рекурсивный поиск в текущей папке:
grep -r "search_text" .
Команда пройдёт по всем подпапкам и покажет совпадения с именем файла и строкой.
-r — ищет рекурсивно, не заходя в символические ссылки;-R — тоже рекурсивно, но идёт по symlink’ам, поэтому можно случайно улететь в лишние каталоги или циклы;Показать только файлы, где есть совпадения:
grep -rl "search_text" .
Выведет просто список файлов без самих строк.
Без учёта регистра:
grep -ril "search_text" .
Найдёт и Text, и TEXT, и text.
Искать только в файлах нужного типа:
grep -r --include="*.conf" "search_text" /etc
Полезно, когда знаешь, что нужное лежит, например, только в конфигах.
Исключить лишние системные каталоги:
grep -r --exclude-dir=proc --exclude-dir=sys --exclude-dir=dev --exclude-dir=run "search_text" /
Если искать по всей системе, без этого можно получить тонну мусора.
Если раздражают ошибки доступа — можно добавить в конец:
2>/dev/null
Поиск по имени файла + содержимому (через
find):find /var/www -type f -name "*.php" -exec grep -nH "search_text" {} +Сначала выбираются нужные файлы, потом проверяется их содержимое.
-H — показывает имя файла-n — номер строки{} + — обрабатывает файлы пачками (обычно быстрее)Вариант через
xargs:find /var/www -type f -name "*.php" -print0 | xargs -0 grep -nH "search_text"
Нормально работает с пробелами в именах файлов и тоже быстрый на больших объёмах.
🔥 Эти приёмы позволяют быстро находить конфиги, секреты в тестовых средах, точки использования API и любые текстовые данные в системе или проекте.
➡️ DevOps Ready | #практика