7.1 find - поиск файлов
find — самая мощная команда для поиска файлов в Linux. Она может искать по имени, размеру, времени изменения и многим другим критериям.
Базовый синтаксис
find [путь] [критерии] [действие]
Поиск по имени
find . -name "*.txt" # найти все .txt файлы в текущем каталоге
find /home -name "document*" # найти файлы, начинающиеся с "document"
find /etc -name "*.conf" # найти конфигурационные файлы
Поиск по типу файла
find . -type f # только файлы
find . -type d # только каталоги
find . -type l # только символические ссылки
Поиск по размеру
find . -size +100M # файлы больше 100 МБ
find . -size -1k # файлы меньше 1 КБ
find . -size 0 # пустые файлы
Поиск по времени
find . -mtime -7 # измененные за последние 7 дней
find . -mtime +30 # измененные более 30 дней назад
find . -newer file.txt # новее указанного файла
Поиск по правам доступа
find . -perm 755 # файлы с правами 755
find . -perm -u+x # исполняемые файлы для владельца
find . -perm /o+w # файлы, доступные для записи остальным
Действия с найденными файлами
find . -name "*.tmp" -delete # удалить временные файлы
find . -name "*.log" -exec ls -l {} \; # показать подробную информацию
find . -name "*.txt" -exec cp {} backup/ \; # скопировать в backup
Символы в find:
•
•
•
•
•
.
— текущий каталог•
*
— любое количество символов•
?
— один символ•
[]
— любой символ из скобок
7.2 grep - поиск текста
grep — команда для поиска текста в файлах. Одна из самых полезных команд в Linux.
Базовое использование
grep "error" file.txt # найти строки с "error"
grep "ERROR" *.log # найти "ERROR" во всех .log файлах
grep -r "function" /home/user/ # рекурсивный поиск в каталоге
Полезные флаги
grep -i "error" file.txt # поиск без учета регистра
grep -n "error" file.txt # показать номера строк
grep -v "error" file.txt # исключить строки с "error"
grep -c "error" file.txt # подсчитать количество совпадений
Регулярные выражения
grep "^error" file.txt # строки, начинающиеся с "error"
grep "error$" file.txt # строки, заканчивающиеся на "error"
grep "er.*or" file.txt # строки с "er", затем любые символы, затем "or"
grep "[0-9]" file.txt # строки, содержащие цифры
Поиск в нескольких файлах
grep -r "TODO" . # найти "TODO" во всех файлах
grep -l "error" *.txt # показать только имена файлов с совпадениями
grep -L "error" *.txt # показать файлы без совпадений
Контекст поиска
grep -A 3 "error" file.txt # показать 3 строки после совпадения
grep -B 2 "error" file.txt # показать 2 строки до совпадения
grep -C 2 "error" file.txt # показать 2 строки до и после
Практические примеры
# Найти все IP-адреса в логах
grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" /var/log/auth.log
# Найти все email адреса
grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" file.txt
# Найти пустые строки
grep "^$" file.txt
7.3 Комбинация find и grep
Комбинация find и grep позволяет создавать мощные команды поиска.
Поиск текста в определенных файлах
find . -name "*.py" -exec grep -l "import" {} \; # найти Python файлы с import
find . -name "*.log" -exec grep "ERROR" {} \; # найти ошибки в логах
Поиск с фильтрацией по содержимому
find . -name "*.txt" -exec grep -q "important" {} \; -print # найти .txt файлы с "important"
find . -type f -exec grep -l "TODO" {} \; # найти файлы с TODO
Анализ логов
# Найти все ошибки за сегодня
find /var/log -name "*.log" -mtime 0 -exec grep -H "ERROR" {} \;
# Найти файлы с определенным IP
find . -name "*.log" -exec grep -l "192.168.1.1" {} \;
Поиск конфигурационных файлов
# Найти файлы с настройками базы данных
find /etc -name "*.conf" -exec grep -l "database" {} \;
# Найти файлы с паролями (осторожно!)
find . -name "*.conf" -exec grep -l "password" {} \;
Сложные комбинации
# Найти большие файлы с определенным содержимым
find . -size +10M -type f -exec grep -l "backup" {} \;
# Найти файлы, измененные недавно, с ошибками
find . -mtime -1 -name "*.log" -exec grep -H "ERROR" {} \;
Осторожно с поиском паролей! Не ищите пароли в открытом виде в системных файлах. Это может быть небезопасно.
7.4 locate - быстрый поиск
locate — быстрая команда поиска файлов, использующая предварительно построенную базу данных.
Базовое использование
locate filename # найти файл по имени
locate "*.txt" # найти все .txt файлы
locate -i "document" # поиск без учета регистра
Обновление базы данных
sudo updatedb # обновить базу данных locate
# База данных обновляется автоматически, но можно принудительно
Ограничение результатов
locate "*.log" | head -10 # показать первые 10 результатов
locate "*.txt" | wc -l # подсчитать количество файлов
Поиск с фильтрацией
locate "*.conf" | grep "nginx" # найти конфиги nginx
locate "*.py" | grep "test" # найти Python тесты
Преимущества и недостатки
Преимущества locate
- Очень быстрый поиск
- Ищет по всей файловой системе
- Простой синтаксис
Недостатки locate
- База данных может быть устаревшей
- Не ищет по содержимому файлов
- Менее гибкий, чем find
Когда использовать locate vs find
Используйте locate для:
• Быстрого поиска файлов по имени
• Поиска по всей файловой системе
• Когда не нужны сложные критерии поиска
• Быстрого поиска файлов по имени
• Поиска по всей файловой системе
• Когда не нужны сложные критерии поиска
Используйте find для:
• Поиска по размеру, времени, правам
• Поиска в определенном каталоге
• Когда нужны сложные критерии поиска
• Поиска по размеру, времени, правам
• Поиска в определенном каталоге
• Когда нужны сложные критерии поиска