Поиск в Linux: find и grep
find отвечает «какие файлы», grep — «какие строки внутри».
find: поиск файла по имени
find . -name "*.log" # по маске от текущего каталога
find . -iname "APP.LOG" # без учёта регистра
find / -name "config.yaml" 2>/dev/null # по всей системе Маску всегда бери в кавычки: без них шелл раскроет звёздочку по текущему каталогу до запуска find. Хвост 2>/dev/null прячет Permission denied при поиске от корня.
find: по типу и свойствам
find . -type d # только каталоги
find . -type f -name "*.py" # только файлы
find . -type f -mtime -1 # изменённые за сутки
find . -type f -size +100M # больше 100 МБ Условия комбинируются простым перечислением — это логическое И. -mtime считает сутками: -1 значит «моложе 24 часов», +7 — «старше недели».
find -exec: обработать найденное
find . -name "*.log" -exec wc -l {} + # строки в каждом
find . -name "*.tmp" # 1) проверить глазами
find . -name "*.tmp" -exec rm {} + # 2) удалить {} — место подстановки найденного, + собирает все находки в один вызов команды. Перед разрушающим -exec запусти тот же find без него и проверь список.
grep: поиск текста в файле
grep "ERROR" app.log # строки с ERROR
grep -n "ERROR" app.log # + номера строк
grep -in "error" app.log # без учёта регистра grep по умолчанию чувствителен к регистру: без -i строки с error в нижнем регистре молча выпадут из выдачи, и пропажу легко не заметить.
grep -r: поиск по проекту
grep -rn "TODO" . # рекурсивно, файл:строка
grep -rl "TODO" src/ # только имена файлов
grep -rn --exclude-dir=node_modules --exclude-dir=.git "TODO" . Каталог grep сам не обходит — без -r ответит Is a directory. В репозиториях сразу исключай .git и node_modules, иначе выдачу зальёт служебными совпадениями.
grep -v и -c: фильтр и счёт
grep -v "INFO" app.log # строки БЕЗ образца
grep -c "INFO" app.log # только число совпавших строк
ps aux | grep -v grep | grep nginx # классика фильтров -v инвертирует условие, -c печатает счётчик вместо строк. В связке ps | grep сам grep попадает в выдачу — его выкидывают через -v grep (или берут pgrep).