Linux

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 для:
• Поиска по размеру, времени, правам
• Поиска в определенном каталоге
• Когда нужны сложные критерии поиска

Настройки

Цветовая схема

Тема