Команда find в Linux — поиск файлов и каталогов, примеры

13.10.2026
0
0
---

find — стандартная консольная утилита Linux и UNIX-подобных операционных систем, предназначенная для поиска файлов и каталогов по имени, типу, размеру, владельцу, правам доступа и времени изменения. Инструмент широко используется системными администраторами для обслуживания серверов, анализа файловой системы, поиска устаревших данных, проверки прав доступа и автоматизации рутинных задач.

Главное преимущество find — возможность не только находить нужные объекты, но и выполнять над ними команды: выводить подробную информацию, изменять права доступа, архивировать данные или удалять файлы. Благодаря гибким параметрам поиска утилита подходит для работы как с отдельными каталогами, так и со всей файловой системой.

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

Общий формат команды выглядит следующим образом:

find [путь] [условия поиска] [действия]
  • путь — каталог, с которого начинается поиск;
  • условия поиска — имя, тип, размер, владелец, права доступа и другие характеристики;
  • действия — вывод результатов, выполнение команд или удаление найденных объектов.

Например, для поиска файлов с расширением .log в каталоге /var/log используется команда:

find /var/log -type f -name '*.log'

Основные параметры find в Linux

Для эффективного администрирования Linux важно знать наиболее востребованные опции утилиты find.

Поиск по имени и типу файла

  • -name — поиск по имени с учетом регистра символов.
  • -iname — поиск по имени без учета регистра.
  • -type f — поиск обычных файлов.
  • -type d — поиск каталогов.
  • -type l — поиск символических ссылок.
  • -empty — поиск пустых файлов и каталогов.

Примеры:

find . -name 'iodmin*'find . -iname '*.conf'find /etc -type f -name '*.conf'find /tmp -type d -empty

При использовании шаблонов * и ? рекомендуется заключать выражение в кавычки, чтобы оболочка не раскрывала его до запуска find.

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

Параметры -user и -group позволяют находить объекты, принадлежащие определенному пользователю или группе.

find /home -user adminfind /var/www -group www-datafind / -uid 1000 -type f

Параметр -uid выполняет поиск по числовому идентификатору пользователя, а -gid — по идентификатору группы.

Поиск по правам доступа

Опция -perm используется для поиска файлов и каталогов с определенными разрешениями.

find /var/www -type f -perm 0644find /home -type f -perm -4000find /tmp -type f -perm -0002

В первом примере находятся файлы с точно указанными правами 0644. Во втором — файлы с установленным битом SUID. В третьем — файлы, доступные для записи всем пользователям.

Для проверки потенциально небезопасных разрешений полезно использовать:

find / -type f -perm -0002 2>/dev/null

Такие результаты требуют проверки: наличие определенных прав само по себе не всегда означает уязвимость.

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

Параметр -size позволяет находить файлы заданного размера. Для указания единиц измерения используются специальные суффиксы:

  • c — байты;
  • k — килобайты;
  • M — мегабайты;
  • G — гигабайты.

Знаки + и - задают поиск соответственно больше или меньше указанного значения.

find / -type f -size +100M 2>/dev/nullfind /var/log -type f -size +500Mfind /tmp -type f -size -1Mfind /home -type f -size 0c

Эти команды помогают находить крупные файлы, анализировать использование дискового пространства и выявлять пустые файлы.

Поиск по времени доступа и изменения

Утилита find поддерживает несколько параметров для фильтрации по времени:

  • -atime — время последнего доступа к файлу в днях;
  • -amin — время последнего доступа в минутах;
  • -mtime — время последнего изменения содержимого в днях;
  • -mmin — время последнего изменения содержимого в минутах;
  • -ctime — время последнего изменения метаданных, например прав доступа или владельца, в днях;
  • -cmin — аналогичный поиск в минутах;
  • -newer — поиск объектов, время изменения которых новее указанного файла.

Примеры:

find /var/log -type f -mtime -7find /tmp -type f -mmin +60find /home -type f -atime +30find /etc -type f -newer /tmp/reference.file

Важно учитывать, что -mtime, -atime и -ctime используют интервалы, округляемые до полных суток. Для более точного поиска по времени удобнее применять -mmin, -amin и -cmin.

Практические примеры использования find

Поиск файлов по названию

Найти файлы и каталоги, имена которых начинаются с iodmin, в текущем каталоге:

find . -name 'iodmin*'

Выполнить поиск по всей файловой системе:

find / -name 'iodmin*' 2>/dev/null

Найти файлы в нескольких каталогах:

find /usr/local/man /opt/local/man -type f -name 'iodmin*'

Перенаправление 2>/dev/null скрывает сообщения об ошибках доступа, которые могут возникать при поиске по системным каталогам.

Поиск изображений по расширению

Для поиска файлов JPG, JPEG, GIF и PNG можно использовать регулярные выражения:

find . -type f -regextype posix-extended \  -iregex '.*\.(jpg|jpeg|gif|png)'

Здесь -regextype posix-extended включает расширенный синтаксис регулярных выражений, а -iregex позволяет искать без учета регистра символов.

Поиск файлов в каталогах почтовой очереди Postfix

Чтобы найти обычные файлы в нескольких каталогах почтовой очереди, можно использовать раскрытие фигурных скобок оболочкой Bash:

find /var/spool/postfix/{deferred,active,maildrop,incoming} -type f

Команда проверяет указанные каталоги и выводит найденные файлы. Для диагностики почтовой очереди Postfix результаты поиска следует интерпретировать с учетом состояния службы и структуры ее каталогов.

Ограничение глубины поиска

Параметр -maxdepth ограничивает глубину обхода каталогов.

find . -maxdepth 1 -type ffind /var/log -maxdepth 2 -type d

Первая команда выводит только обычные файлы непосредственно в текущем каталоге. Вторая ищет каталоги на глубине не более двух уровней относительно /var/log.

Параметр -mindepth позволяет, наоборот, пропустить начальные уровни поиска:

find . -mindepth 2 -type f

Исключение каталогов из поиска

Опция -prune позволяет исключить определенные каталоги, например каталоги с зависимостями или кэшированными данными.

find . -type d -name 'node_modules' -prune -o -type f -name '*.js' -print

Команда ищет jаvascript-файлы, не обходя каталоги node_modules.

Поиск на одной файловой системе

Параметр -xdev запрещает переход на другие файловые системы при обходе каталогов.

find / -xdev -type f -size +1G 2>/dev/null

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

Поиск пустых файлов и каталогов

find /tmp -type f -emptyfind /var/www -type d -empty

Первая команда находит пустые обычные файлы, вторая — пустые каталоги. Перед очисткой системных директорий необходимо убедиться, что найденные объекты действительно не используются приложениями.

Выполнение команд над найденными файлами

Одна из самых полезных возможностей find для системного администратора — запуск внешних команд с помощью -exec.

Общий синтаксис:

find /путь -type f -name '*.log' -exec команда {} \;

Здесь {} заменяется путем к найденному объекту, а \; завершает команду -exec.

Вывод информации о найденных файлах

find /var/log -type f -name '*.log' -exec ls -lh {} \;

Для запуска одной команды сразу над несколькими найденными файлами можно использовать +:

find /var/log -type f -name '*.log' -exec ls -lh {} +

Второй вариант обычно эффективнее при обработке большого количества файлов.

Подтверждение выполнения команды

Параметр -ok запрашивает подтверждение перед каждым выполнением команды:

find /tmp -type f -name '*.tmp' -ok rm {} \;

Это позволяет проверить каждый объект перед удалением.

Удаление найденных файлов

Параметр -delete удаляет найденные объекты без дополнительного подтверждения.

Например, найти временные файлы старше семи дней:

find /tmp -type f -name '*.tmp' -mtime +7 -print

После проверки списка можно выполнить удаление:

find /tmp -type f -name '*.tmp' -mtime +7 -delete

Внимание: команда с -delete не запрашивает подтверждение. Перед ее использованием рекомендуется сначала выполнить поиск с -print, проверить путь и условия, а затем запускать удаление.

Безопасная обработка имен файлов

Имена файлов в Linux могут содержать пробелы, кавычки и другие специальные символы. Для надежной передачи путей между командами рекомендуется применять -print0 совместно с xargs -0.

Например, найти все файлы с расширением .log и вывести их подробный список:

find /var/log -type f -name '*.log' -print0 |  xargs -0 ls -lh

Нулевой байт используется в качестве разделителя, поэтому пробелы и переводы строк в именах файлов не нарушают обработку.

Для удаления файлов по заданным условиям часто достаточно встроенной опции -delete, без использования xargs.

Дополнительные параметры find

  • -print — выводит пути найденных объектов; обычно используется по умолчанию.
  • -print0 — выводит пути с разделителем NUL для безопасной передачи другим программам.
  • -ls — выводит подробную информацию о найденных объектах.
  • -depth — обрабатывает содержимое каталогов до самих каталогов.
  • -mount или -xdev — ограничивает обход текущей файловой системой.
  • -P — не следует по символическим ссылкам; это поведение по умолчанию.
  • -L — следует по символическим ссылкам при обходе.
  • -regex — проверяет путь на соответствие регулярному выражению.
  • -regextype — задает тип регулярных выражений.
  • -delete — удаляет найденные объекты.

Следует учитывать, что -regex проверяет полный путь, а не только имя файла. Также -L меняет поведение обхода символических ссылок, поэтому его нужно использовать осознанно.

Заключение

Команда find в Linux — универсальный инструмент системного администрирования, который помогает искать файлы по имени, размеру, владельцу, правам доступа и времени изменения. Сочетание условий поиска с -exec, -delete, -prune и другими параметрами позволяет автоматизировать обслуживание серверов, контролировать файловую систему и упрощать диагностику проблем.

Знание основных возможностей find особенно полезно администраторам Linux-серверов, DevOps-инженерам и специалистам по информационной безопасности. При выполнении операций изменения и удаления данных всегда проверяйте условия поиска и используйте предварительный вывод результатов, чтобы избежать случайного воздействия на важные системные файлы.

Понравиласть статья? Жми лайк или расскажи своим друзьям!
Теги к новости:
Linux, Ubuntu
Комментарии
Добавить комментарий
Добавление комментария
Ваше Имя:
Ваш E-Mail:
Это код:
Кликните на изображение чтобы обновить код, если он неразборчив
Введите сюда: