Команда find в Linux — поиск файлов и каталогов, примеры
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-инженерам и специалистам по информационной безопасности. При выполнении операций изменения и удаления данных всегда проверяйте условия поиска и используйте предварительный вывод результатов, чтобы избежать случайного воздействия на важные системные файлы.
Вас заинтересуют так же следующие новости
- AWS Lambda Web Functions: новый способ запуска веб-приложений без серверов
- Exim 4.100: новая версия почтового сервера с поддержкой DMARC и расширенными возможностями
- На GitHub обнаружили 543 тысячи действующих токенов API-ключей и паролей
- Let's Encrypt сократит срок действия TLS-сертификатов до 64 дней с февраля 2027 года
- Зачем нужен Terraform State (terraform.tfstate) и как он работает?
- Тестирование программного обеспечения: базовый курс, 3-е издание (2025)
