Поиск файла в Linux

    Команда Simple-Server
    03.06.2026
    7 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Первая команда поиска файлов в Linux, которую разберём, называется locate. Она осуществляет быстрый поиск по имени в специальной базе данных и выводит все имена, совпадающие с заданной подстрокой. Например, мы хотим найти все программы, начинающиеся с «zip». Так как будем искать именно программы, логично предположить, что имя директории заканчивается на «bin». Учитывая все это, попробуем найти нужные файлы:

    locate bin/zip /usr/bin/zip /usr/bin/zipcloak /usr/bin/zipdetails /usr/bin/zipgrep

    locate осуществил поиск в базе данных путевых имен и вывел все имена, содержащие подстроку «bin/zip».

    При более сложных критериях поиска можно комбинировать locate с другими программами, например grep:

    locate bin | grep zip /usr/bin/bunzip2 /usr/bin/bzip2 /usr/bin/bzip2recover /usr/bin/gunzip /usr/bin/gzip /usr/bin/p7zip /usr/bin/pbzip2 /usr/bin/unzip /usr/bin/unzipsfx /usr/bin/zip /usr/bin/zipcloak /usr/bin/zipdetails /usr/bin/zipgrep

    Иногда возникают ситуации, когда в**** Linux поиск по названию файла с помощью locate работает некорректно (вывод имен удаленных файлов, отсутствие имен недавно созданных файлов). В таком случае нужно обновить базу данных индексов:

    locate поддерживает работу с wildcards и регулярными выражениями. Если в строке содержатся метасимволы, то в качестве аргумента передается не подстрока, а шаблон, который сопоставляется с полным путевым именем. Допустим необходимо найти все имена с суффиксом «.png» в каталоге «Screenshots»:

    locate '*Screenshots/*.png' /home/user/Pictures/Screenshots/Screenshot from 2022-09-29 12-32-52.png /home/user/Pictures/Screenshots/Screenshot from 2022-09-29 17-05-12.png /home/user/Pictures/Screenshots/Screenshot from 2022-09-29 18-27-35.png /home/user/Pictures/Screenshots/Screenshot from 2022-09-29 18-30-06.png

    Для поиска по регулярному выражению используется ключ -r (стандарт POSIX BRE):

    locate -r 'bin/\(bz\|gz\|zip\)'

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

    В простом случае в качестве аргумента передается имя директории. find осуществляет поиск файла в каталоге Linux, который мы указали, а также во всех подкаталогах. Без указания опций, команда выводит список всех файлов. Например, для получения всех имен в домашней директории можно использовать такую команду:

    Вывод будет очень большим, так как find напечатает все имена в указанном каталоге и подкаталогов. Чтобы сделать поиск более конкретным, используются специальный опции, позволяющие задать критерии.

    Допустим, нам нужно вывести файлы, являющиеся только каталогами. Опция -type позволяет задать тип:

    find ~/playground/ -type d /home/gendo/playground/ /home/gendo/playground/bash /home/gendo/playground/alis /home/gendo/playground/test /home/gendo/playground/ubuntussh /home/gendo/playground/src /home/gendo/playground/src/diction-1.11 /home/gendo/playground/src/diction-1.11/test

    Данная команда вывела все подкаталоги в директории ~/playground. Поддерживается поиск по следующим типам:

    • b — блочное устройство.
    • с — символьное устройство.
    • d — директория.
    • f — регулярный файл.
    • l — символическая ссылка.

    Мы также можем искать по размеру и имени, добавив дополнительные критерии. Попробуем найти регулярные файлы, совпадающие с шаблоном «.png» и имеющие размер более одного килобайта:

    find ~ -type f -name "*.png" -size +1k /Pictures/Screenshots/Screenshot from 2022-09-28 22-50-20.png /home/user/Pictures/Screenshots/Screenshot from 2022-09-28 11-45-59.png /Pictures/Screenshots/Screenshot from 2022-09-23 12-02-23.png /Pictures/Screenshots/Screenshot from 2022-09-21 21-06-19.png

    Опция -name позволяет указать имя. В приведенном примере используется wildcard-шаблон, поэтому он заключен в кавычки. Параметр -size ограничивает поиск по размеру. Знак + перед числом означает, что мы ищем файлы больше указанного размера, минус — меньше указанного размера. В случае отсутствия знака find выведет все файлы, точно совпадающие с заданным размером.

    Символы, позволяющие указать размер:

    • b — 512-байтовые блоки. Используется по умолчанию, когда после числа отсутствует символ.
    • с — байты.
    • w — 2-байтовые слова.
    • k — килобайты.
    • M — мегабайты.
    • G — гигабайты.

    find поддерживает огромное число проверок, позволяющие выполнить поиск файла в директории Linux по разным критериям. Все их можно посмотреть в документации.

    Из-за весомого количества критериев поиска, у нас возникает необходимость более точно описывать логические отношения между проверками. Например, нужно определить наличие ненадежных прав. Иными словам, надо вывести все файлы с правами не 0600 и все директории с правами не 0700. find предоставляет специальные логические операторы для комбинирования проверок такого рода:

    find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)

    Поддерживаются следующие логические операторы:

    • -and / -a —логическое И. Если не указаны операторы между несколькими проверками, подразумевается по умолчанию.
    • -or / -o — логическое ИЛИ.
    • -not / ! — логическое НЕ.
    • ( ) — позволяет объединять проверки и операторы для создания сложных выражений. Необходимо экранировать.

    Предопределенные действия

    В Linux поиск файла с помощью find можно объединить с некоторыми действиями над полученными файлами. Существует предопределенные и пользовательские действия. Для первого вида find предоставляет следующие опции:

    • -delete — удаление найденных файлов.
    • -ls — эквивалентно ls -dils.
    • -print — вывод полного имя файла. Действие по умолчанию.
    • -quit — завершение работы после первого совпадения по критериям.

    Предположим, нам необходимо удалить все имена с суффиксом «.bak». Конечно, можно сразу использовать find с опцией -delete, но для безопасности лучше просто вывести список удаляемых файлов, а уже потом их удалить:

    find ~ -type f -name '*.bak' -print /backup/5.bak /backup/10.bak /backup/9.bak /backup/6.bak /backup/8.bak /backup/2.bak /backup/3.bak /backup/4.bak /backup/1.bak /backup/7.bak find ~ -type f -name '.bak' -delete

    Пользовательские действия

    Поиск файлов в консоли с помощью find можно комбинировать со всевозможными утилитами с помощью пользовательских действий:

    Здесь, command — название команды, {} — символьное представление текущего путевого имени, ; — разделитель команд. Например, мы можем применить команду ls -l для каждого найденного файла:

    find ~ -type f -name 'foo*' -exec ls -l '{}' ';' -rw-rw-r-- 1 gendo gendo 0 Sep 30 09:59 /fooD -rw-rw-r-- 1 gendo gendo 0 Sep 30 09:59 /fooB -rw-rw-r-- 1 gendo gendo 0 Sep 30 09:59 /fooA -rw-rw-r-- 1 gendo gendo 0 Sep 30 09:59 /fooC

    Иногда команды могут принимать сразу несколько аргументов, например, rm. Чтобы не применять команду к каждому найденному имени, в конце -exec ставится символ + вместо разделителя:

    find ~ -type f -name 'foo*' -exec ls -l '{}' + -rw-rw-r-- 1 gendo gendo 0 Sep 30 09:59 /fooD -rw-rw-r-- 1 gendo gendo 0 Sep 30 09:59 /fooB -rw-rw-r-- 1 gendo gendo 0 Sep 30 09:59 /fooA -rw-rw-r-- 1 gendo gendo 0 Sep 30 09:59 /fooC

    Аналогичное действие можно сделать при помощи утилиты xargs. Она принимает на вход список аргументов и на основе их формирует команды. В качестве примера приведем известную команду для вывода файлов, содержащих в имени «неудобные» символы (пробелы, переводы строк и т.п.):

    find ~ -iname '*.jpg' -print0 | xargs --null ls -l

    Аргумент -print0 заставляет разделять найденные имена нулевым символом (единственный символ, запрещенный в именах файлов). Опция -null в xargs указывает, что на вход подается список аргументов, разделенных нулевым символов.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны