Поиск файлов и папок в Linux через терминал
Быстрые ссылки
- Команда find
- Команда locate и mlocate
- Команда which
- Команда whereis
- В чём разница между whereis и which

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

Команда 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:
- Определите стартовую директорию (чем уже, тем быстрее).
- Отфильтруйте типы (-type).
- Добавьте имя/время/размер по необходимости.
- Сначала выполните пробный прогон с -print.
- Когда уверены, замените -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-страницы.

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

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

RELATED: Best Linux Laptops for Developers and Enthusiasts
Похожие материалы
Как отключить напоминания в Google Calendar
Создать шаблон в LibreOffice Writer
Как выбрать NPU для ноутбука и смартфона
Как отслеживают открытия email и как их блокировать
Как правильно произносить GIF