Гид по технологиям

Как использовать команду find в Linux — подробное руководство

6 min read Linux Обновлено 20 Dec 2025
Как использовать find в Linux — руководство
Как использовать find в Linux — руководство

Команда find в терминале Linux, вывод результатов поиска

Есть ситуации, когда нужно найти конкретный файл, но система не организована и вы не помните, где он хранится. В Linux для этого есть удобные инструменты. Команда find — одна из самых гибких: она умеет фильтровать по имени, правам, расширению, размеру, времени и многому другому.

В этом руководстве вы найдёте ясные примеры, практические советы, шаблоны для типовых задач и рекомендации по безопасности.

Что делает команда find

Команда find рекурсивно обходит файловую систему, применяет заданные фильтры (тесты) и выполняет действие для найденных путей. В отличие от графических поисков она даёт детальный контроль: можно комбинировать условия, использовать регулярные выражения, изменять права файлов и удалять результаты.

Краткое определение: find — утилита для поиска файлов и каталогов по набору критериев.

Важно: чтобы искать в каталоге, у вас должны быть права на чтение этого каталога (для обхода содержимого).

Базовый синтаксис

find [путь] [опции/тесты] [действия]

Пример: поиск всех текстовых файлов в /home

find /home -type f -name "*.txt"

Если путь опущен, часто используют “.” — текущий каталог:

find . -type f -name "filename.txt"

Поиск по имени

  • -name — чувствительный к регистру поиск по шаблону (глобу).
  • -iname — нечувствительный к регистру.

Примеры:

find /home -type f -name filename.txt
find /home -type f -iname "FileName.TXT"

Подсказка: всегда берите шаблон в кавычки, чтобы оболочка не раскрывала звездочки.

Поиск по расширению

find /home -type f -name "*.pdf"

Инверсия условия (все, кроме PDF):

find /home -type f -not -name "*.pdf"

Применение действия: изменить права для найденных файлов (пример, безопаснее использовать -exec … {} +):

find /home -type f -name "*.pdf" -exec chmod 644 {} +

Важно: chmod 777 делает файлы доступными для записи и исполнения всеми — не рекомендуется.

Поиск по типу объектов

Типы, которые понимает find:

  • f — обычные файлы
  • d — каталоги
  • l — символические ссылки
  • c — символьные устройства
  • b — блочные устройства
  • p — именованные каналы (FIFO)
  • s — сокеты

Пример: найти только подкаталоги в /home

find /home -type d

Поиск по размеру

Суффиксы для -size:

  • b — 512-байтные блоки
  • c — байты
  • w — двухбайтовые слова
  • k — килобайты
  • M — мегабайты
  • G — гигабайты

Примеры:

find /home -type f -size 1G       # ровно 1 ГБ
find /home -type f -size -1G      # меньше 1 ГБ
find /home -type f -size +1G      # больше 1 ГБ
find /home -type f -size +1M -size -10M  # от 1МБ до 10МБ

Поиск по временным меткам

Файлы в Linux имеют три важных времени: atime (время доступа), mtime (время последней модификации содержимого) и ctime (время изменения метаданных/прав). Для поиска используются опции:

  • -atime N — доступ N дней назад
  • -mtime N — модифицирован N дней назад
  • -ctime N — статус (правки) N дней назад
find /home -type f -name "*.txt" -mtime 5    # изменён ровно 5 дней назад
find /home -type f -mtime +7                  # изменён более 7 дней назад
find /home -type f -mtime -30                 # изменён в последние 30 дней

Подсказка: для более точного диапазона используйте find в связке с touch/с временными файлами или с -newermt.

# прим.: файлы изменённые после 2024-01-01
find /home -type f -newermt "2024-01-01"

Поиск по правам и владельцу

  • -perm MODE — точное совпадение прав. Для частичного соответствия используйте / или -.
  • -user USER — файлы принадлежат USER
  • -group GROUP — файлы принадлежат GROUP
find /home -type f -perm 0644
find /home -type f -perm /u=w     # любой файл где владелец имеет право на запись
find /home -user alice

Внимание: точный синтаксис -perm может быть сложным; проверьте man find для разновидностей (GNU find vs BSD find).

Удаление найденных файлов — осторожно

Прямое удаление:

find /home -type f -name "*.pdf" -delete

Рекомендации безопасности:

Важно: сначала выполните поиск без удаления, чтобы убедиться в результатах. Протестируйте команду с -print или замените -delete на -exec echo {} \;.

Альтернатива с xargs (быстрее при большом количестве файлов):

find /home -type f -name "*.log" -print0 | xargs -0 rm -f

Или использование -exec {} +, которое эффективнее, чем \;:

find /home -type f -name "*.tmp" -exec rm -f {} +

Замечание: -delete выполняется при обнаружении элемента и требует, чтобы порядок выражений допускающим его тип тестов был корректен (например, -prune перед -path и т.д.).

Примеры комбинирования и оптимизации

  • Ограничение глубины поиска:
find /var/log -maxdepth 2 -type f -name "*.log"
  • Исключение каталогов (prune):
find / -path "/proc" -prune -o -type f -name "*.conf" -print
  • Использование регулярных выражений:
find /home -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.(jpg|png)$"
  • Быстрый подсчёт найденных файлов:
find /home -type f -name "*.mp3" -print | wc -l
  • Работа с sudo при поиске системных файлов:
sudo find / -type f -name "ssh_config"

Частые ошибки и когда find ломается

  • Неправильно экранированные звездочки приводят к раскрытию оболочкой; всегда берите шаблон в кавычки.
  • Отсутствие прав чтения каталогов — find не сможет зайти внутрь.
  • Неправильный порядок аргументов: -delete и -prune зависят от позиции в выражении.
  • Различия между реализациями find (GNU vs BSD) могут давать разные опции (например, -delete доступен не везде).

Быстрый Cheat Sheet (шпаргалка)

# По имени (регистр важен / не важен)
find . -type f -name "*.conf"
find . -type f -iname "readme*"

# Типы
find / -type d      # каталоги
find / -type l      # симв. ссылки

# Размер
find /home -type f -size +100M

# Время
find /tmp -type f -mtime -2

# Права
find /srv -type f -perm 0644

# Удаление (ОБЯЗАТЕЛЬНО ПРОВЕРЬТЕ)
find /tmp -type f -mtime +30 -delete

# Запуск команды на найденных файлах
find . -type f -name "*.sh" -exec chmod +x {} +

Методика: как безопасно удалять старые логи (SOP)

  1. Выполнить поиск и вывести список в файл для проверки:
find /var/log -type f -name "*.log" -mtime +180 -print > /tmp/old-logs.txt
  1. Просмотреть /tmp/old-logs.txt, убедиться, что в списке нет нужных файлов.
  2. Сделать тестовый проход, показывая файлы, которые будут удалены:
cat /tmp/old-logs.txt | xargs -d '\n' -r ls -l
  1. Удаление (через xargs или -exec) с резервным копированием при необходимости:
# Резервная копия перед удалением
tar -czf /backup/old-logs-$(date +%F).tar.gz -T /tmp/old-logs.txt
# Удаление
cat /tmp/old-logs.txt | xargs -d '\n' -r rm -f

Рекомендации по безопасности и производительности

  • Не давайте файлам права 777 без необходимости.
  • Для больших деревьев используйте -maxdepth / -mindepth и -prune, чтобы исключать временные FS (/proc, /sys).
  • Для массовых операций предпочитайте -exec … {} + или find | xargs -0.
  • Тестируйте команды с -print или echo перед вызовом rm/-delete.

Контрольный список по ролям

Администратор:

  • Использовать sudo для системных каталогов.
  • Ограничивать глубину поиска на больших FS.
  • Логировать и архивировать перед массовым удалением.

Разработчик:

  • Искать по расширению и времени (например, tmp-файлы старше 1 дня).
  • Автоматизировать очистку в CI с осторожностью.

Обычный пользователь:

  • Использовать find в своём домашнем каталоге.
  • Не удалять файлы вне домашней директории без разрешения.

Примеры реальных задач

  • Найти и удалить все core-файлы:
find / -type f -name "core" -exec rm -f {} +
  • Найти все большие файлы и показать первые 20 по размеру:
find /home -type f -printf "%s %p\n" | sort -nr | head -n 20
  • Поиск по нескольким расширениям:
find /photos -type f \( -iname "*.jpg" -o -iname "*.png" \) -print

Часто задаваемые вопросы

Как убедиться, что команда не удалит лишнего?

Сначала запустите find без действий, с -print. Затем замените действие на -exec echo {} \; или на запись в файл. После проверки выполняйте удаление.

Чем отличается -exec \; от -exec {} +?

-exec \; запускает команду для каждого найденного файла отдельно. -exec {} + группирует файлы и вызывает команду минимальное число раз, что обычно быстрее.

Можно ли искать по содержимому файла?

Сам find по содержимому не ищет; используйте find для сбора файлов и передавайте их в grep, например:

find /var/www -type f -name "*.php" -print0 | xargs -0 grep -n "TODO"

Краткое резюме

  • find — мощный инструмент для поиска и массовых операций над файлами.
  • Всегда тестируйте выражение перед удалением.
  • Используйте -exec {} + или xargs для производительности.
  • Ограничивайте область поиска и исключайте системные псевдо-ФС.

Важное: если вы работаете на продакшене, обязательно выполните резервное копирование перед массовыми изменениями.


Если нужно, могу подготовить короткий шаблон команды под вашу задачу (удаление логов, поиск больших файлов, поиск по расширению и т. п.).

FAQ

Можно ли искать скрытые файлы?

Да. find обходит все файлы в каталоге, включая скрытые (имена, начинающиеся с “.”). Убедитесь, что путь и шаблон соответствуют.

Найдено пусто — что проверить?

Проверьте права доступа к каталогам, используемые шаблоны (кавычки), и не исключаете ли вы каталоги с помощью -prune.

Есть ли графический эквивалент find?

Графические менеджеры имеют поиск, но они обычно медленнее и менее гибки; для сложных фильтров эффективнее использовать find.

Контактная шпаргалка (короткий набор команд)

# Поиск по имени
find . -type f -name "*.md"

# Найти и распечатать путь
find /etc -type f -name "*conf" -print

# Найти старые файлы и удалить
find /tmp -type f -mtime +7 -delete

# Найти и изменить права
find /srv -type f -name "*.sh" -exec chmod +x {} +
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Анимация круговой диаграммы в PowerPoint
Презентации

Анимация круговой диаграммы в PowerPoint

Астропрофиль в Snapchat — как создать
Руководство

Астропрофиль в Snapchat — как создать

Отключить автоповорот экрана в Windows 8
Windows

Отключить автоповорот экрана в Windows 8

Как подготовиться к краже Android‑телефона
Мобильная безопасность

Как подготовиться к краже Android‑телефона

Поделиться твитом в Snapchat — стикер истории
Социальные сети

Поделиться твитом в Snapchat — стикер истории

Как снизить галлюцинации у ИИ
Искусственный интеллект

Как снизить галлюцинации у ИИ