Поиск текста в файлах Linux: команда grep -R с примерами для новичков
Задача быстрого поиска нужной строки в проекте
При администрировании серверов часто возникает необходимость найти, в каком конкретно файле прописан определенный пароль от базы данных, старый IP-адрес, доменное имя, функция или вредоносный код (eval/base64). Просматривать каждый файл вручную невозможно. Утилита grep позволяет за долю секунды просканировать миллионы строк исходного кода и конфигов.
Флаги-супергерои утилиты grep:
| Флаг | Что делает |
|---|---|
| -R или -r | Рекурсивный поиск по всем подпапкам и вложенным файлам. |
| -n | Показывает точный номер строки, где обнаружено совпадение. |
| -i | Игнорирует регистр (ищет и с маленькой, и с большой буквы). |
| -w | Ищет строго целое слово (не найдет «cat» внутри слова «category»). |
| -l | Выводит только имена файлов, не печатая сам найденный текст. |
Практические примеры использования grep
1. Базовый рекурсивный поиск с номерами строк
Найдем слово
DB_PASSWORDво всех файлах каталога/var/www/:grep -Rni "DB_PASSWORD" /var/www/2. Поиск только в файлах определенного типа (--include)
Если проект содержит миллионы картинок и логов, ограничьте поиск только скриптами
.phpили.conf:grep -Rn --include="*.php" "eval(base64_decode" /var/www/html/3. Исключение тяжелых папок (--exclude-dir)
Чтобы поиск не зависал в тяжелых папках кэша,
node_modulesили.git:grep -Rni --exclude-dir=node_modules --exclude-dir=.git "api_secret_key" ./4. Вывести только список файлов без лишнего текста (-l)
grep -Ril "mail.smtp2go.com" /etc/
Частые вопросы (FAQ)
В чем разница между grep -r и grep -R (с большой буквы)?
Маленький флаг -r не переходит по символическим ссылкам (symlinks), а большой флаг -R переходит по всем символическим ссылкам на файлы и каталоги.
Как скрыть ошибки Permission Denied при поиске по всему серверу?
Перенаправьте поток ошибок в черную дыру: grep -Rni "secret" / 2>/dev/null.
Как подсветить найденные слова ярким цветом?
Добавьте флаг цветного вывода: grep --color=always -Rni "pattern" /path/.
Как показать 3 строки до и 3 строки после найденного совпадения?
Используйте флаг контекста -C 3: grep -R -C 3 "Fatal error" /var/log/.