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

Поиск в Linux: find, locate и другие команды

9 min read Linux Обновлено 25 Dec 2025
Поиск в Linux: find, locate и другие команды
Поиск в Linux: find, locate и другие команды

Иллюстрация поиска файлов и команд в терминале

Быстрые ссылки

  • The find Command

  • Using find With File Patterns

  • Ignoring Case With find

  • Recursing Subdirectories with find

  • Searching for Directories With find

  • Using File Attributes with find

  • The -type Option

  • Using Other Commands With find

  • The locate And mlocate Commands

  • The locate Database

  • Using locate

  • Telling locate How Many Results You Want

  • Counting Matching Files

  • Ignoring Case With locate

  • The locate Database Status

  • The which Command

  • The whereis Command

  • The whatis Command

  • Searching In Specific Sections of the Manual

  • Using whatis With Wildcards

  • The apropos Command

  • Using More Than One Search Term

  • Using Exact Matches

  • Matching All Search Terms

  • Yet More Options

Обзор: какие команды и зачем

Linux предлагает несколько инструментов для поиска. Каждый инструмент лучше всего подходит для конкретных задач:

  • find — глубокий рекурсивный поиск по файловой системе с мощными фильтрами и возможностью выполнить команду над найденными файлами. Используйте, когда нужно точное соответствие, фильтрация по атрибутам, правам, времени изменения.
  • locate / mlocate — сверхбыстрый поиск по предварительно собранной базе. Отлично, когда важна скорость и база свежая.
  • which — показывает путь к исполняемому файлу в PATH.
  • whereis — находит исполняемый файл и связанные с ним файлы (man, исходники) в стандартных местах.
  • whatis — краткое однострочное описание команды из man-страниц.
  • apropos — ищет в кратких описаниях man-страниц по ключевым словам.

Когда вы выбираете инструмент, думайте о точности, скорости и контексте: ищете ли вы исполняемые файлы, справку, или конкретные файлы в дереве каталогов.

The find Command

Команда find очень гибкая, но её синтаксис может показаться непривычным. После того как вы поймёте базовые элементы, вы оцените её возможности.

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

find

В некоторых реализациях find требуется явно указывать текущую директорию через точку:

find .

Чтобы начать поиск от корня файловой системы:

find /

Чтобы искать из домашней директории текущего пользователя:

find ~

Использование find с шаблонами файлов

Чтобы find был полезен, ему нужно сказать, что искать. Это может быть конкретное имя или шаблон (паттерн). В шаблонах доступны подстановки: * — любая строка символов, ? — любой одиночный символ.

Важно: шаблоны лучше заключать в кавычки, иначе оболочка (shell) попытается их разворачивать.

Пример: ищем файлы в текущем каталоге, у которых расширение оканчивается на s:

find . -name "*.*s"

Если нужно искать только файлы с расширением .js:

find . -name '*.js'

Игнорирование регистра в именах

Если вы не уверены в регистре букв в имени файла, используйте -iname:

find . -iname 'Yelp.js'

(Обратите внимание: если вы забыли пробел между find и аргументом, то команда не сработает — всегда проверяйте синтаксис.)

Рекурсивный поиск по подкаталогам

find по умолчанию рекурсивен. Например, найти файлы, начинающиеся с map:

find . -name "map*.*"

Поиск каталогов

Чтобы найти каталог по пути или имени используйте -path или -ipath (игнорируя регистр):

find . -path '*about'

Поиск по атрибутам файлов

find может фильтровать не только по имени, но и по свойствам файла:

  • Пустые файлы (0 байт):
find . -empty
  • Файлы с установленным битом на исполнение:
find . -executable

Каталоги также могут иметь бит исполнения — это означает, что в них можно заходить.

Опция -type

Опция -type позволяет указать тип объекта: f для обычных файлов, d для каталогов, l для символических ссылок и др.

Пример: только файлы:

find . -type f -executable

Только каталоги:

find . -type d

(Обратите внимание на порядок параметров: ключи и аргументы должны быть корректны.)

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

Вы можете передавать найденные файлы в другие команды через -exec или использовать -print0 с xargs для обработки имён с пробелами.

Пример: снять бит выполнения для конкретного файла:

find . -name "fix_aptget.sh" -exec chmod -x '{}' \;

Объяснение:

  • Поиск в текущем каталоге имени fix_aptget.sh.
  • Если найден — выполнить chmod -x на этом файле.
  • {} заменяется на имя файла.
  • \; завершает команду -exec (в терминале это выглядит как ;, но в Markdown/коде нужно экранировать).

Альтернатива с xargs для обработки большого числа файлов:

find . -name '*.sh' -print0 | xargs -0 chmod -x

Примеры полезных фильтров

  • По времени изменения: -mtime, -atime, -ctime.
  • По размеру: -size +10M (больше 10 мегабайт), -size -1k (меньше 1 килобайта).
  • По владельцу: -user username, -group groupname.
  • По правам: -perm 644 или -perm /u+x.

Частые ошибки при работе с find

  • Неэкранированные шаблоны (забыли кавычки).
  • Пропущенные пробелы, например find. -iname вместо find . -iname.
  • Неправильный порядок опций и аргументов.

The locate And mlocate Commands

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

Установка на Manjaro:

sudo pacman -Syu mlocate

Проверка версии:

locate --version

Если система настроена так, что locate вызывает mlocate, вы увидите версию mlocate.

Как работает база данных locate

locate не сканирует файловую систему при каждом запросе. Он смотрит в базу, которую обычно обновляют автоматически через cron.daily (или systemd-timer) — это означает, что база может быть не свежей, если машина долго не работала или выключена.

Обновить базу вручную:

sudo updatedb

Путь к ежедневной задаче можно проверить:

ls /etc/cron.daily/*loc*

Если записи нет — можно настроить крон или systemd-таймер самостоятельно.

Когда использовать locate

  • Нужна скорость.
  • Вам не обязательно иметь идеально актуальные результаты (например, файлы, созданные в последние минуты, могут отсутствовать).
  • Ищете по имени, а не по атрибутам (время, права и т.д.).

Ограничения locate

  • База может быть устаревшей.
  • locate ищет в базе, а не в реальном времени — это делает его быстрым, но потенциально неточным.
  • В базе могут отсутствовать файлы, расположенные в нестандартных точках, если updatedb игнорирует их (например, временные монтирования).

which, whereis, whatis, apropos — быстрые утилиты для команд и man

  • which — показывает путь к исполняемому файлу, который будет запущен при вводе команды в текущем PATH.
which python3
  • whereis — ищет исполняемые файлы и связанные с ними man-страницы и исходники в стандартных папках:
whereis bash
  • whatis — показывает краткую строку описания из man:
whatis ls
  • apropos — ищет ключевое слово в заголовках/описаниях man-страниц:
apropos network

Поиск по разделам man

man-страницы разделены на секции (1 — пользовательские команды, 2 — системные вызовы и др.). Чтобы искать в конкретной секции:

apropos "3 printf"

(пример: искать слово printf в секции 3 — библиотечные функции).

Использование нескольких терминов в apropos

Вы можете искать несколько слов; поведение зависит от версии apropos: некоторые реализации ищут вхождение любого из слов, другие поддерживают ключи для точного совпадения. Для точного соответствия используйте кавычки и проверяйте man apropos для вашей системы.

Сравнительная матрица: какой инструмент выбрать

СценарийКомандаПреимуществаОграничения
Найти все файлы по маске рекурсивноfindПолный контроль, фильтры по атрибутам, можно выполнить командыМедленнее, т.к. сканирует диск в реальном времени
Очень быстрый поиск по имениlocate/mlocateМолниеносно, простая командаНужна актуальная база; не подойдёт для поиска по атрибутам
Найти путь к исполняемому файлуwhichПоказывает то, что запустит shellТолько PATH, не ищет man-страницы
Найти man-страницу и бинарникwhereisИщет бинарники, man и исходникиИщет только в стандартных местах
Краткая справка по командеwhatisОчень компактноЗависит от заполненности базы man-страниц
Поиск по описанию manaproposПолезно при неизвестной командеМожет давать много нерелевантных результатов

Пошаговая методика поиска (мини-методология)

  1. Определите цель: имя файла, исполняемый файл или справка.
  2. Если цель — исполняемый файл, сначала используйте which, затем whereis для дополнительных путей.
  3. Если цель — быстро найти файл по имени, попробуйте locate; если база устарела, запустите sudo updatedb и повторите.
  4. Если нужна фильтрация по времени/правам/размеру — используйте find.
  5. Для массовых действий с найденными файлами используйте -exec или -print0 | xargs -0.

Чек-листы по ролям

  • Системный администратор:

    • Проверить наличие mlocate и настройку обновления базы (cron/systemd).
    • Использовать find для поиска по правам и времени изменения.
    • Использовать xargs и -exec аккуратно для массовых изменений.
  • Разработчик:

    • Использовать locate для быстрой навигации по исходникам.
    • Использовать find с -name и -path для поиска тестовых файлов.
    • Использовать git grep/rg для поиска по содержимому файлов (альтернатива для поиска по содержимому).
  • Обычный пользователь:

    • Сначала попробуйте locate для скорости.
    • Если не найдено, используйте find в своём домашнем каталоге.
    • Для поиска программ используйте which/whereis/whatis/apropos.

Cheat sheet: часто используемые команды

# Поиск файлов в текущем каталоге и подкаталогах
find . -name 'pattern'

# Игнорировать регистр
find . -iname 'pattern'

# Только файлы
find . -type f -name '*.log'

# Только каталоги
find . -type d -name 'backup*'

# Пустые файлы
find . -empty

# Файлы старше 7 дней
find . -mtime +7

# Выполнить команду для каждого найденного файла
find . -name '*.sh' -exec chmod a-x '{}' \;

# Безопасная передача в xargs (имена с пробелами)
find . -name '*.jpg' -print0 | xargs -0 ls -l

# Быстрый поиск по имени (использует базу)
locate filename

# Обновить базу locate
sudo updatedb

# Где находится исполняемый файл
which python3

# Где находятся бинарник и man
whereis bash

# Краткое описание команды из man
whatis ls

# Поиск по описаниям man
apropos ssh

Decision tree — Как выбрать команду (Mermaid)

flowchart TD
  A[Что вы ищете?] --> B{Ищете программу/исполняемый файл?}
  B -- Да --> C[Используйте which]
  C --> D{Хотите man или исходники?}
  D -- Да --> E[Используйте whereis]
  B -- Нет --> F{Ищете файл по имени или по содержимому?}
  F -- По имени --> G{Нужна совсем свежая информация?}
  G -- Да --> H[Используйте find]
  G -- Нет --> I[Используйте locate]
  F -- По содержимому --> J[Используйте grep/rg/git-grep]
  H --> K[Добавьте фильтры: -type, -size, -mtime]

Отказоустойчивость и возможные проблемы

  • Если locate не находит недавно созданный файл — обновите базу: sudo updatedb.
  • Если find возвращает «permission denied» — запустите с sudo или уточните путь/права.
  • Если результаты слишком громоздки — комбинируйте условия (например, -name + -mtime + -size).
  • Будьте осторожны с -exec при массовых изменениях — сначала проверьте вывод без -exec.

Критерии приёмки

  • Найдена целевая сущность (файл, каталог, исполняемый файл) при использовании рекомендованной команды.
  • Результаты соответствуют ожидаемым фильтрам (тип, размер, время изменения).
  • При массовых операциях применены безопасные практики (preview, -print, dry-run, бэкап).

1‑строчный глоссарий

  • find — рекурсивный поиск по файловой системе.
  • locate/mlocate — быстрый поиск по базе.
  • updatedb — обновляет базу locate.
  • which — показывает путь к исполняемому файлу в PATH.
  • whereis — находит бинарные и man-файлы в стандартных местах.
  • whatis — краткое описание команды из man.
  • apropos — поиск по описаниям man-страниц.

Примеры тест-кейсов (приёмочные)

  • Поиск существующего файла по имени в домашней директории через find возвращает его путь.
  • locate возвращает путь для файла, присутствующего в базе; после создания нового файла locate не находит его до обновления базы.
  • which возвращает путь к исполняемому файлу, который находится в первом элементе PATH.
  • whereis возвращает и путь к бинарнику, и путь к man-странице, если они присутствуют в стандартных директориях.

Сводка

  • Для гибкого рекурсивного поиска используйте find. Он мощный и даёт множество фильтров.
  • Для очень быстрого поиска по имени используйте locate/mlocate, но следите за актуальностью базы (updatedb).
  • Для поиска исполняемых файлов и справочной информации используйте which, whereis, whatis и apropos.

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

Результат выполнения find в терминале, показаны файлы и каталоги

Результаты поиска в подкаталоге в терминале

Результат locate --version в терминале

Пример результата поиска без исполняемых файлов в терминале

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Chrome для поиска работы: настройка и советы
Продуктивность

Chrome для поиска работы: настройка и советы

Как делиться плейлистами в Spotify
Музыка

Как делиться плейлистами в Spotify

Очистить ленту Facebook — практическое руководство
Социальные сети

Очистить ленту Facebook — практическое руководство

Как подключить Samsung Galaxy Buds к любому устройству
Аудио

Как подключить Samsung Galaxy Buds к любому устройству

Процент изменения в Excel — как посчитать
Excel

Процент изменения в Excel — как посчитать

Как пользоваться Math Notes на iPhone, iPad и Mac
Руководство

Как пользоваться Math Notes на iPhone, iPad и Mac