- Поиск файлов в Linux
- Поиск через графический интерфейс
- Главное меню
- Файловые менеджеры
- KFind
- SearchMonkey
- Recoll
- Поиск файлов через терминал. Команда find
- Поиск файлов по имени
- Поиск файлов по расширению
- Поиск файлов по типу
- Поиск файлов по размеру
- Поиск файлов по дате изменения
- Поиск файлов по правам доступа
- Поиск файлов по владельцу
- Поиск и удаление файлов
- Запись результатов поиска в файл
- Поиск файлов через терминал. Команда locate
- Поиск файлов через терминал. Команда grep
- Поиск файлов через терминал. Команда whereis
- Заключение
- Комментариев: 2
Поиск файлов в Linux
Обновл. 4 Сен 2021 |
Каждое окружение рабочего стола в 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 — обычный файл;
l — символьная ссылка;
c — символьные устройства;
b — блочные устройства;
p — именованный канал (FIFO);
Например, чтобы найти все папки в текущем рабочем каталоге, используйте:
Поиск файлов по размеру
Для поиска файлов по заданному размеру необходимо добавить параметр -size . Указание размера происходит с помощью следующих суффиксов:
b — 512-байтовые блоки (по умолчанию);
w — двухбайтовые слова;
Следующая команда найдет все файлы размером 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
Рассмотрим следующий пример команды:
Данная команда найдет все файлы с разрешениями на чтение для пользователя, группы или других пользователей.
Если же в качестве префикса используется символ минуса — , то у найденных файлов должны совпадать все указанные биты. Следующая команда будет искать файлы, имеющие разрешение на чтение и запись для владельца и группы и доступные для чтения другими пользователями:
Поиск файлов по владельцу
Чтобы найти файлы, принадлежащие определенному пользователю или группе, применяются параметры -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 . Для этого необходимо ввести команду updatedb (её запуск производится от имени суперпользователя):
Поиск файлов через терминал. Команда grep
Команда grep может использоваться не только в роли фильтра для других команд, но и производить поиск файлов. Для этого необходимо задать параметр -r и указать папку, в которой следует искать текст. Предположим, что мы хотим найти в каталоге /var/log все файлы, которые содержат строку error:
sudo grep -r «error» /var/log
С помощью команды grep довольно легко проводить поиск нужной конфигурации или же проверять, не содержат ли файлы с кодом чего-нибудь подозрительного.
Поиск файлов через терминал. Команда whereis
Команда whereis выполняет только одну задачу — отображает местоположение исполняемого файла, переданного ей в качестве параметра. Например, для того, чтобы узнать, где находится исполняемый файл команды uname , достаточно выполнить:
Заключение
На этом уроке мы разобрали, как выполнить поиск файла в Linux различными способами: с помощью графического интерфейса или через терминал. Данный материал призван дать вам базовое понимание того, как выполнять поиск файлов в Linux-системах и показать, что существует множество различных вариантов, которые позволят вам решить любые задачи по поиску файлов и не только.
Поделиться в социальных сетях:
26 команд в Linux, которые должен знать каждый сисадмин
Комментариев: 2
Стоит добавить, что для обновления базы файлов, по которой осуществляется поиск с командой “locate”, есть команда “updatedb”.
А пакет, например, для Ubuntu или CentOS, в котором есть locate и updatedb — mlocate
Источник