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

  Дмитрий Бушуев  | 

  Обновл. 4 Сен 2021  | 

 3488

 ǀ   2 

Каждое окружение рабочего стола в Linux имеет свой встроенный инструмент поиска файлов и папок. Но даже если по умолчанию такой инструмент отсутствует, то вы в любой момент можете его установить самостоятельно. Но как обстоят дела с поиском файлов из командной строки? Если вам часто приходится работать в терминале или администрировать Linux-серверы без графического интерфейса, к чему вы обращаетесь, когда вам нужно найти файл или папку? К счастью, в Linux имеются встроенные прямо в систему утилиты, которые помогут отыскать всё, что вам нужно.

Поиск через графический интерфейс

Главное меню

С помощью главного меню ОС вы можете не только искать и запускать программы, но также и выполнять поиск файлов. Подобный функционал присутствует во многих окружениях рабочего стола (KDE, GNOME, Xfce и пр.). Например, в KDE это представлено следующим образом:

При этом стоит отметить, что такой вариант поиска ориентирован больше на поиск программ, нежели на поиск файлов, поэтому выполняется он только в домашнем каталоге и не уходит вглубь файловой системы.

Файловые менеджеры

Многие файловые менеджеры также предоставляют возможности поиска файлов. Например, в Dolphin для запуска поиска достаточно просто нажать кнопку со значком лупы, а затем ввести имя файла (или папки) в строку поиска. При этом вы можете выбрать папку, в которой будет выполняться поиск, а также указать дополнительные параметры (поиск по содержимому и пр.). Помимо этого в качестве поискового запроса допускается применять символы ? и *:

Поиск по содержимому в Dolphin:


KFind

В KDE, помимо вышеупомянутых инструментов поиска, также есть замечательная утилита под названием KFind. С её помощью вы можете точно настроить параметры поиска (указать имя файла, его тип и путь поиска, обычный текстовый поиск или мета-поиск, дату изменения, размер, пользователя, группу и пр.). Она также позволяет сохранять результаты поиска в виде простого текстового списка URL-адресов найденных файлов:


SearchMonkey

SearchMonkey позволяет выполнять поиск файла, как по имени, так и по его содержимому, по диапазону дат и пр. Но главное преимущество SearchMonkey — это возможность везде применять регулярные выражения.

Поиск с применением регулярного выражения в SearchMonkey:


Recoll

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

Установить программу можно из официальных репозиториев через командную строку:

sudo apt-get install recoll

Или через графический интерфейс:

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

Это может быть очень удобно при работе с большим объемом текстовых данных. Программа поддерживает такие форматы файлов, как: .pdf, .djvu, .doc, .docx, .odf. А также умеет находить перечисленные файлы в архивах.

Поиск файлов через терминал. Команда find


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

Вы можете применять команду find для поиска файлов и каталогов на основе их разрешений, типа, даты, владельца, размера и многого другого. Она также может быть объединена с другими инструментами, такими как grep или sed.

Общий синтаксис команды find выглядит следующим образом:

find [опции] [путь...] [выражение]

Разберем детально:

   опции — аргументы, управляющие обработкой символьных ссылок, параметрами отладки и методом оптимизации;

   путь — начальный каталог (или каталоги), в которых команда find будет искать файлы;

   выражение — состоит из параметров, шаблонов поиска и действий, разделенных операторами.

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

Давайте рассмотрим следующий пример:

find -L /var/www -name "*.js"

Разберем детально:

   опция -L — указывает команде find следовать по символическим ссылкам;

   путь /var/www — задает каталог, в котором будет выполняться поиск;

   выражение -name "*.js" — сообщает команде find искать файлы, заканчивающиеся на .js (расширение JavaScript-файлов).


Поиск файлов по имени

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

Например, для поиска файла document.pdf в каталоге /home/linuxize можно применить следующую команду:

find /home/linuxize -type f -name document.pdf

Чтобы выполнить поиск без учета регистра, замените -name на -iname:

find /home/linuxize -type f -iname document.pdf

Критериям поиска вышеприведенной команды будут соответствовать как Document.pdf, так и DOCUMENT.pdf и т.д.


Поиск файлов по расширению

Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти внутри каталога /var/log/nginx все файлы, заканчивающиеся на .log.gz, необходимо выполнить:

find /var/log/nginx -type f -name '*.log.gz'

Важно отметить, что шаблон поиска необходимо взять в одинарные кавычки, либо экранировать символ звездочки * обратной косой чертой \, чтобы при использовании подстановочного знака он не интерпретировался командной оболочкой.

Чтобы найти все файлы, которые не соответствуют регулярному выражению *.log.gz вы можете использовать опцию -not. Например, чтобы найти все файлы, которые не заканчиваются на *.log.gz вы можете использовать:

find /var/log/nginx -type f -not -name '*.log.gz'


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

Иногда вам может потребоваться выполнить поиск файлов определенного типа: обычные файлы, каталоги или символические ссылки. В Linux, как вы помните, всё является файлом.

Для поиска файлов по их типу используется параметр -type и один из следующих идентификаторов для указания типа файла в Linux:

   f — обычный файл;

   d — каталог;

   l — символьная ссылка;

   c — символьные устройства;

   b — блочные устройства;

   p — именованный канал (FIFO);

   s — сокет.

Например, чтобы найти все папки в текущем рабочем каталоге, используйте:

find . -type d


Поиск файлов по размеру

Для поиска файлов по заданному размеру необходимо добавить параметр -size. Указание размера происходит с помощью следующих суффиксов:

   b — 512-байтовые блоки (по умолчанию);

   c — байты;

   w — двухбайтовые слова;

   k — килобайты;

   М — мегабайты;

   G — гигабайты.

Следующая команда найдет все файлы размером 1024 байта в каталоге /tmp:

find /tmp -type f -size 1024c

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

В следующем примере мы ищем в текущем рабочем каталоге все файлы размером менее 1 МБ. Обратите внимание на символ минуса - перед значением размера:

find . -type f -size -1M

Если вы хотите выполнить поиск файлов размером более 1 МБ, то вам нужно использовать символ плюса +:

find . -type f -size +1M

Вы даже можете искать файлы в пределах диапазона размеров. Следующая команда найдет все файлы размером от 1 до 2 МБ:

find . -type f -size +1M -size 2M


Поиск файлов по дате изменения

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

Так же, как и при поиске по размеру, используйте символы + или - для критериев «больше» или «меньше».

Допустим, несколько дней назад вы изменили один из конфигурационных файлов dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в каталоге /etc/dovecot/conf.d, которые заканчивается на .conf и были изменены за последние пять дней:

find /etc/dovecot/conf.d -name "*.conf" -mtime 5

Вот еще один пример фильтрации файлов на основе даты изменения с помощью параметра -daystart. Следующая команда выведет список всех файлов в каталоге /home, которые были изменены 30 или более дней назад:

find /home -mtime +30 -daystart


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

Параметр -perm позволяет выполнять поиск файлов на основе прав доступа к ним.

Например, чтобы найти внутри каталога /var/www/ravesli все файлы с разрешением 644, вы должны использовать:

find /var/www/ravesli -perm 644

Рассмотрим следующий пример команды:

find . -perm /444

Данная команда найдет все файлы с разрешениями на чтение для пользователя, группы или других пользователей.

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

find . -perm -664


Поиск файлов по владельцу

Чтобы найти файлы, принадлежащие определенному пользователю или группе, применяются параметры -user и -group.

Например, для поиска всех файлов и каталогов, принадлежащих пользователю ravesli, вы должны выполнить команду:

find / -user ravesli

Вот еще один пример. Допустим, вы хотите найти все файлы, принадлежащие пользователю www-data, и изменить владельца соответствующих файлов с www-data на nginx. Вам нужно выполнить следующий набор команд:

find / -user www-data -type f  -exec chown nginx {} \;


Поиск и удаление файлов

Чтобы удалить все совпадающие с поисковым запросом файлы, необходимо в конец поискового запроса добавить опцию -delete.

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

Например, чтобы удалить из каталога /var/log/ все файлы, заканчивающиеся на .temp, применяется следующий набор команд:

find /var/log/ -name *.temp -delete

Предупреждение: Используйте опцию -delete с особой осторожностью. Команда find вычисляется как выражение, и если вы добавите опцию -delete в начало данного выражения, то команда удалит всё в указанных вами папках.

Когда дело доходит до каталогов, команда find, как и команда rmdir, может удалять только пустые каталоги.


Запись результатов поиска в файл

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

find /etc -type f -name "*.conf" > conf_search

Она производит поиск в каталоге /etc всех файлов, имеющих расширение .conf, и записывает результат в файл conf_search.


Поиск файлов через терминал. Команда locate

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

locate users

Стоит заметить, что если файл появился в системе уже после создания базы, то он не будет найден.

Иногда вам может потребоваться обновить базу данных, к которой обращается locate. Для этого необходимо ввести команду updatedb (её запуск производится от имени суперпользователя):

sudo updatedb


Поиск файлов через терминал. Команда grep


Команда grep может использоваться не только в роли фильтра для других команд, но и производить поиск файлов. Для этого необходимо задать параметр -r и указать папку, в которой следует искать текст. Предположим, что мы хотим найти в каталоге /var/log все файлы, которые содержат строку error:

sudo grep -r "error" /var/log

С помощью команды grep довольно легко проводить поиск нужной конфигурации или же проверять, не содержат ли файлы с кодом чего-нибудь подозрительного.


Поиск файлов через терминал. Команда whereis

Команда whereis выполняет только одну задачу — отображает местоположение исполняемого файла, переданного ей в качестве параметра. Например, для того, чтобы узнать, где находится исполняемый файл команды uname, достаточно выполнить:

whereis uname


Заключение


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

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (8 оценок, среднее: 5,00 из 5)
Загрузка...

Комментариев: 2

  1. Александр:

    Стоит добавить, что для обновления базы файлов, по которой осуществляется поиск с командой “locate”, есть команда “updatedb”.
    А пакет, например, для Ubuntu или CentOS, в котором есть locate и updatedb — mlocate

    1. Юрий:

      Спасибо, добавил)

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *