Home » Поиск файлов в Linux: find и locate
Поиск файлов в Linux: find и locate

Поиск файлов в Linux: find и locate

Ты когда-нибудь ловил себя на том, что SSH-ишься на сервер, чтобы найти какой-то конфиг или забытый лог, а потом лихорадочно вспоминаешь: как там искать файл по имени, по содержимому, по размеру, по времени изменения? Если да — ты не одинок. Поиск файлов в Linux — это не просто must-have навык, а практически ежедневная рутина для любого, кто работает с VPS, облачными инстансами, Docker-контейнерами или железными серверами. В этом посте разберём, как быстро и эффективно искать файлы с помощью find и locate, почему это важно, и чем они отличаются, а также расскажу про лайфхаки, ошибки и автоматизацию.

Зачем вообще нужен поиск файлов в Linux?

Linux — это не Windows, где можно ткнуть мышкой в “Поиск” и ждать, пока система просканирует диск. Тут всё текстовое, файлов много, структура сложная, и часто нужно искать не только по имени, но и по маске, дате, владельцу, размеру, содержимому. Если у тебя на сервере крутится куча сервисов, контейнеров, логов, то без грамотного поиска можно потратить часы на рутину.

  • Быстро найти конфиг, чтобы исправить баг или обновить параметры
  • Вычислить, где лежит огромный файл, который жрёт все 100 Гб на /var
  • Понять, кто и когда создавал файлы (важно для безопасности и аудита)
  • Автоматизировать чистку мусора и бэкапов

А ещё — найти забытый скрипт, который на проде запускается кроном и портит тебе жизнь 😅.

Классика жанра: find и locate

Есть много способов искать файлы: ls с рекурсией, grep по содержимому, графические тулзы (на десктопах), но в серверной жизни рулят две утилиты — find и locate. Давай разберём, что это, как устроено и в чём различие.

Как работает find? Алгоритмы и структура

find — это мощнейший инструмент, который рекурсивно обходит директории и ищет файлы по куче критериев: имя, маска, расширение, размер, права, владелец, время изменения, и даже по содержимому (если в связке с grep). Работает медленно на больших файловых системах, потому что реально обходит все папки и файлы в реальном времени.


find /var/log -name "*.log" -mtime -7 -size +10M

Этот пример найдёт все логи за последнюю неделю, размером больше 10 мегабайт.

  • Плюсы: всегда актуально, гибко, работает с правами, можно выполнять действия над найденными файлами (удалять, копировать, менять права)
  • Минусы: долго ищет на больших объёмах, может грузить диск

Как работает locate? База данных и скорость

locate — это читерская штука. Она не ищет файлы в реальном времени, а смотрит в заранее созданную базу данных (обычно обновляется по крону раз в сутки или вручную через updatedb). Поэтому поиск — мгновенный, даже на огромных серверах. Но есть нюанс: если файл был создан/удалён после последнего обновления базы, locate его не найдёт или покажет “призрак”.


locate nginx.conf

Мгновенно выдаёт все пути, где встречается nginx.conf.

  • Плюсы: мгновенно, почти не грузит систему
  • Минусы: не всегда актуально, не ищет по дате/размеру/правам, не умеет искать по содержимому

Как быстро и просто настроить поиск файлов?

Установка и базовые команды

Обычно find уже есть в любой Linux-системе “из коробки”. locate (пакет mlocate или plocate) иногда надо установить:


# Ubuntu/Debian
sudo apt update
sudo apt install mlocate

# CentOS/RedHat
sudo yum install mlocate

# Arch
sudo pacman -S mlocate

После установки — обнови базу данных:


sudo updatedb

Теперь locate готов к работе.

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

  • Искать по имени (маске):

find /etc -name "nginx*"
  • Искать по расширению:

find /var/www -type f -name "*.php"
  • Искать по размеру:

find /home -size +100M
  • Искать по времени изменения (за последние 2 дня):

find /tmp -mtime -2
  • Искать по владельцу:

find /srv -user www-data
  • Искать по правам доступа:

find /var -perm 644
  • Искать и выполнять действие (например, удалить):

find /tmp -type f -name "*.tmp" -delete
  • Искать по содержимому (в связке с grep):

find /etc -type f -name "*.conf" -exec grep -H "listen" {} \;

Примеры использования locate

  • Быстрый поиск по имени:

locate php.ini
  • Поиск по части имени (поддерживает regex):

locate --regex '/nginx.*conf$'
  • Ограничить количество результатов:

locate -n 10 logrotate

Таблица сравнения find и locate

Критерий find locate
Скорость Медленно (реальный обход) Мгновенно (по базе)
Актуальность Всегда актуально Зависит от свежести базы
Гибкость поиска Максимальная (имя, размер, дата, права, владелец, содержимое) Только имя/путь
Возможность действий над файлами Да (exec, delete, chmod, и т.д.) Нет
Потребление ресурсов Высокое (особенно на больших FS) Минимальное
Поиск скрытых/системных файлов Да (если есть права) Может быть ограничено настройками базы

Кейсы из жизни: когда что использовать?

  • Нужно быстро найти путь к конфигу, который точно естьlocate. Например, где лежит php.ini на сервере с 10 PHP-версиями?
  • Нужно найти свежие логи за последние суткиfind с -mtime или -ctime.
  • Ищешь большой файл, который забил дискfind / -size +1G.
  • Автоматическая чистка мусорных файловfind /tmp -type f -mtime +7 -delete в кроне.
  • Нужно массово поменять права на файлы определённого типаfind . -type f -name "*.sh" -exec chmod +x {} \;

Ошибки новичков и мифы

  • Ожидать, что locate всегда покажет свежие файлы. Нет, база обновляется не в реальном времени. После копирования/создания файла — sudo updatedb!
  • Пытаться искать по содержимому через locate. Это невозможно — только по имени/пути.
  • Запускать find от рута по всему диску без нужды. Может сильно нагрузить диск и систему, особенно на больших серверах.
  • Забывать про права доступа. find не увидит файлы, к которым у пользователя нет доступа.
  • Путать -name и -iname. -name ищет case-sensitive, -iname — не чувствителен к регистру.
  • Пытаться искать по маске через locate без regex. locate ищет подстроку, а не маску, если не использовать –regex.

Похожие решения и альтернативы

  • fd — современная альтернатива find, быстрее и удобнее, поддерживает цвет, регулярки, игнорирует .gitignore. https://github.com/sharkdp/fd
  • ripgrep (rg) — для поиска по содержимому, очень быстрый. https://github.com/BurntSushi/ripgrep
  • plocate — альтернатива mlocate, быстрее, экономичнее, используется в новых дистрибутивах. https://github.com/berglas/plocate
  • grep — если нужен поиск по содержимому файлов, в связке с find.

Статистика и сравнение

  • На сервере с 1 млн файлов find / -name "*.log" может идти 3-10 минут, а locate .log — менее 1 секунды.
  • Поиск по содержимому grep -r "error" /var/log — медленно, но незаменимо для анализа логов.
  • plocate на SSD в 3-5 раз быстрее mlocate при схожем потреблении ресурсов.

Интересные факты и лайфхаки

  • Можно настроить updatedb на более частое обновление (например, каждые 10 минут для dev-серверов).
  • locate поддерживает wildcard и regex, что позволяет искать даже по частям пути.
  • find можно использовать для поиска и автоматического удаления/архивации/отправки файлов на другой сервер.
  • В Docker-контейнерах часто отсутствует locate, но find всегда под рукой — пригодится для CI/CD.
  • Можно использовать find для поиска и подсчёта количества файлов/папок:

find /var/www -type f | wc -l
  • find умеет искать по inode, что полезно при восстановлении удалённых файлов (например, после удаления, но до размонтирования FS).

Автоматизация и новые возможности

Скрипты на bash с find — это целый мир. Примеры:

  • Автоматическая чистка старых логов:

find /var/log -type f -name "*.log" -mtime +30 -delete
  • Бэкап только изменённых за сутки файлов:

find /home/user/data -type f -mtime -1 -exec cp {} /mnt/backup/ \;
  • Мониторинг больших файлов и отправка алерта:

find / -size +5G -exec echo "Big file: {}" \; | mail -s "Big files alert" [email protected]

locate отлично вписывается в автодополнение и быстрые поисковые скрипты для админских тулз.

Вывод и рекомендации

Поиск файлов в Linux — это не просто про удобство, а про выживание на сервере. find — твой друг, когда нужно что-то сложное, гибкое и максимально актуальное. locate — твой ускоритель, когда нужен быстрый результат и не критична абсолютная свежесть базы. Не забывай обновлять базу updatedb, не запускай find по всему серверу без нужды, используй exec для автоматизации, и не стесняйся пробовать альтернативы типа fd и ripgrep.

  • Для VPS, облачных серверов и выделенных машин — обязательно держи под рукой оба инструмента.
  • Для контейнеров — чаще всего достаточно find, но locate тоже можно поставить, если нужно.
  • Для автоматизации и скриптов — find незаменим, особенно с exec и xargs.

Если ты ищешь надёжный VPS или выделенный сервер для экспериментов и продакшена — вот ссылки на проверенные решения:

Прокачивай свои навыки поиска — и никакой забытый конфиг или мусорный лог не останется незамеченным!

Официальные ссылки:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked