Поиск в 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).

поделиться: Telegram VK

Что дальше