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

Поиск файлов и папок в Linux через терминал

8 min read Linux Обновлено 24 Dec 2025
Поиск файлов в Linux через терминал
Поиск файлов в Linux через терминал

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

  • Команда find
  • Команда locate и mlocate
  • Команда which
  • Команда whereis
  • В чём разница между whereis и which

Как найти файлы и папки в Linux с помощью командной строки

Большинство пользователей ищут файлы в графическом файловом менеджере (Nautilus в GNOME, Dolphin в KDE, Thunar в Xfce). Но для автоматизации, удалённого доступа или высокой гибкости часто удобнее и быстрее работать из терминала. Ниже — подробный разбор команд, примеры и практические приёмы.

Поиск в Nautilus — пример графического менеджера файлов

Команда find

Команда find выполняет реальный рекурсивный поиск по файловой системе начиная с указанной директории. Она полезна, когда нужно задать точные критерии: имя, тип, права, владелец, размер, дата изменения и т. п.

Основные идеи:

  • find выполняет живой поиск: читает текущие директории и файлы, поэтому результаты актуальны.
  • Работает медленнее, чем locate, но даёт мощные фильтры и действия над найденными объектами.
  • По умолчанию поиск чувствителен к регистру; используйте -iname для нечувствительного поиска по имени.

Простейший пример: список всех файлов и папок в текущей директории и её поддиректориях.

find .

Точка означает текущую директорию.

Поиск по шаблону имени (с метасимволами):

find . -name "pro*"

Или с экранированием метасимвола, если вы не хотите, чтобы shell разворачивал шаблон:

find . -name pro\*

Нечувствительный к регистру вариант:

find . -iname "readme*"

Полезные фильтры и примеры (коротко, затем — расширенные советы):

  • По типу: -type f (файлы), -type d (директории)
    find /var -type f -name "*.log"
  • По глубине: -maxdepth N, -mindepth N
    find . -maxdepth 2 -name "*.conf"
  • По времени изменения: -mtime, -mmin
    find /home -type f -mtime -7   # изменённые за последние 7 дней
  • По размеру: -size +100M, -size -10k
    find / -type f -size +1G  # файлы больше 1 гигабайта
  • По правам: -perm
    find . -type f -perm /u=x   # файлы с правом исполнения для владельца
  • По владельцу/группе: -user, -group
    find /srv -user www-data
  • Выполнение команды над результатами: -exec … \; или -exec … +
    find . -name "*.tmp" -exec rm -f {} \;
    find . -name "*.jpg" -exec mogrify -resize 1024x {} +
  • Безопасная передача в xargs: -print0 и xargs -0
    find . -name "*.mp3" -print0 | xargs -0 du -h
  • Удаление найденных элементов (внимание!):
    find /tmp -type f -name "core.*" -delete

Расширенные приёмы и советы:

  • Используйте -prune, чтобы исключать большие каталоги из поиска и резко ускорить выполнение:

    find / -path "/proc" -prune -o -name "*.conf" -print
  • Комбинируйте условия с логикой И/ИЛИ/НЕ: -a (AND), -o (OR), ! или -not (NOT). Не забывайте про скобки, экранируйте их в shell:

    find . \( -name "*.c" -o -name "*.h" \) -and -not -path "*/.git/*"
  • Регулярные выражения: -regex и -iregex. Помните, что синтаксис regex для find соответствует пути (включая начальную точку). Для большей гибкости используйте -regex.

Ограничения и когда find не подходит:

  • Медленный при поиске по всему диску на больших файловых системах.
  • Права доступа: если у вас нет прав на чтение директории, find не сможет пройти в неё.
  • Нагрузка: массовые -exec rm могут стать опасными — тестируйте сначала с -print.

Краткая методология поиска с find:

  1. Определите стартовую директорию (чем уже, тем быстрее).
  2. Отфильтруйте типы (-type).
  3. Добавьте имя/время/размер по необходимости.
  4. Сначала выполните пробный прогон с -print.
  5. Когда уверены, замените -print на -exec или сохраните список.

Команда locate и mlocate

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

Ключевые моменты:

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

Обновление базы вручную:

sudo updatedb

Базовый поиск:

locate mydata

Поиск точного совпадения имени (используем -b и экранирование слэша):

locate -b '\mydata'

Поиск по регулярному выражению (в некоторых реализациях поддерживается опция -r):

locate -r "\.conf$"

Ограничения locate/mlocate:

  • База может быть устаревшей — обновляйте updatedb, если ожидаете новые файлы.
  • mlocate исключает файлы, к которым у вас нет доступа, что хорошо для безопасности, но может скрыть результаты для root-операций до запуска updatedb с правами root.
  • locate не выполняет фильтрации по дате/размеру — для этого нужен find.

Когда выбирать locate:

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

Замена locate при необходимости живого поиска: используйте find, если требуется актуальность или сложные фильтры.

Команда which

which показывает абсолютный путь к исполняемому файлу, который будет вызван вашей оболочкой, то есть ищет в переменной окружения PATH текущего пользователя. Это удобно для создания ярлыков или проверки, какая копия исполняемого используется.

Примеры:

which firefox
which -a firefox   # показать все совпадения в PATH
which python3 pip3

Особенности:

  • which ищет только в PATH текущего пользователя. Если исполняемый доступен только для root (например, в /sbin), обычный пользователь может не увидеть его.
  • По умолчанию which выводит только первый найденный путь; опция -a показывает все найденные в PATH.

Когда which полезен:

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

Команда whereis

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

Примеры:

whereis firefox
whereis -b firefox   # только бинарник
whereis -s ls        # только исходники
whereis -m bash      # только man-страницы

Особенности и отличия:

  • whereis опирается на заранее заданный список директорий (обычно стандартные системные пути). Поэтому он может найти man-страницы и исходники, которые which не покажет.
  • which ищет в PATH пользователя и показывает, какой именно исполняемый будет использоваться.

В чём разница между whereis и which

  • what they show: whereis возвращает бинарные файлы, исходники и man-страницы; which возвращает только путь к исполняемому, который найдётся в PATH.
  • scope: whereis ищет по жёстко закодированному набору директорий; which использует PATH пользователя.
  • results: whereis показывает все найденные типы по умолчанию; which по умолчанию показывает первый найденный путь (use -a to list all).

Выбор инструмента: используйте which, чтобы узнать, какую копию программы вы запускаете сейчас; используйте whereis, чтобы найти системные man-страницы или исходники.

Частые сценарии и шаблоны использования (cheat sheet)

Поиск больших файлов в / (только читать список):

sudo find / -type f -size +1G -print

Поиск старых файлов и вывод их размера в человекочитаемом виде:

find /var/log -type f -mtime +30 -print0 | xargs -0 du -h

Удаление временных файлов с подтверждением (безопасно):

find /tmp -type f -name "*.tmp" -print
# проверьте список, затем
find /tmp -type f -name "*.tmp" -delete

Быстрый поиск по всей системе (может быть медленным):

sudo find / -name "mysecretkey.pem"

Быстрый нерекурсивный поиск в текущей директории (maxdepth=1):

find . -maxdepth 1 -type f -name "*.sh"

Использование locate для быстрого предположения, где может быть файл:

locate -i readme | head

Найти, какую версию python использует оболочка:

which python3
python3 --version

Роль‑ориентированные чеклисты

Сисадмин — быстрый чеклист:

  • Использовать find с точным стартовым каталогом и -prune для исключений.
  • Перед удалением всегда просматривать результаты (-print).
  • Обновлять базу mlocate (sudo updatedb) после массовых изменений.
  • Использовать -exec с + для групповой обработки, а не по одному файлу.

Разработчик — быстрый чеклист:

  • which -a для проверки, какая библиотечная/CLI-версия запускается.
  • Поиск тестовых артефактов: find . -name “*.test” или locate.
  • Исключить .git и node_modules с помощью -path и -prune.

Новичок — быстрый чеклист:

  • Начните с locate для быстрых подсказок.
  • Если нужны точные и свежие результаты, используйте find.
  • Всегда пробуйте команду сначала с выводом списка, прежде чем удалять.

Советы по производительности и безопасности

  • Ограничивайте пространство поиска: чем уже стартовая директория, тем быстрее команда отработает.
  • Используйте -prune, чтобы исключать каталоги с миллионами файлов (например, /proc, /sys, .git, node_modules).
  • Запуск find от root даст доступ к большему числу директорий, но будьте осторожны с -delete.
  • locate полезен для интерактивного быстрого поиска, но числится как ориентир — обновляйте базу для точности.
  • Учитывайте SELinux/AppArmor и другие механизмы контроля доступа — они могут скрывать файлы от обычных пользователей.

Примеры распространённых ошибок и как их избежать

  • Ошибка: запуск rm через -exec без проверки. Решение: сначала run with -print, затем заменить на -exec.
  • Ошибка: использование find . -name *.log без кавычек — shell разворачивает шаблон. Решение: оборачивайте в кавычки или экранируйте.
  • Ошибка: ожидание актуальности locate сразу после создания файла. Решение: выполните sudo updatedb или используйте find.

Небольшой справочник по синтаксису (1‑строчные определения)

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

Примеры сценариев и тестовые случаи

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

  • Тест 1: Найти файл с именем с пробелами “my file.txt” — проверить правильное экранирование. Ожидаемый результат: файл найден при использовании кавычек.
  • Тест 2: locate не показывает недавно созданный файл — ожидается, что updatedb добавит его.
  • Тест 3: which python показывает /usr/bin/python, но pyenv переопределяет версию в PATH — which -a покажет и другие варианты.

Примечания и важные моменты

Важно: команда find — это ваш инструмент выбора для точных, актуальных и фильтруемых поисков. locate и mlocate — для быстрого обходного поиска по индексу, когда вы не можете или не хотите сканировать диск целиком. which и whereis — утилиты для поиска исполняемых файлов и связанных с ними ресурсов.

Если вы хотите автоматизировать рабочий процесс поиска и последующей обработки файлов, комбинируйте find с xargs, -exec и скриптами — но всегда проверяйте сначала результаты вывода.

Итоги

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

Обновление базы locate с помощью updatedb

Таблица‑шпаргалка (команды и цель):

  • find — точный живой поиск, фильтры, действия (-exec, -delete)
  • locate / mlocate — быстрый индексированный поиск
  • updatedb — обновление индекса locate
  • which — путь к исполняемому в PATH
  • whereis — бинарник, исходники, man

Ссылки для дальнейшего чтения: используйте man find, man locate, man mlocate, man which, man whereis в вашей системе.

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

Краткое резюме (повтор для запоминания): find — гибкий и актуальный; locate — быстрый по индексу; which/whereis — для поиска исполняемых и вспомогательных файлов.

Пример использования locate с опцией -b для точного совпадения

RELATED: Best Linux Laptops for Developers and Enthusiasts

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

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

Как отключить напоминания в Google Calendar
Инструкции

Как отключить напоминания в Google Calendar

Создать шаблон в LibreOffice Writer
Productivity

Создать шаблон в LibreOffice Writer

Как выбрать NPU для ноутбука и смартфона
Аппаратное обеспечение

Как выбрать NPU для ноутбука и смартфона

Как отслеживают открытия email и как их блокировать
Конфиденциальность

Как отслеживают открытия email и как их блокировать

Как правильно произносить GIF
Лингвистика

Как правильно произносить GIF

Установить 1Password на Linux — инструкция
Безопасность

Установить 1Password на Linux — инструкция