Поиск файлов в ОС Linux с помощью команд locate и find

Самым простым инструментом поиска файлов в Linux является команда locate. Ниже приводится информация о том, как работать с ней наиболее удобным образом. При первом выполнении locate есть вероятность получить сообщение об ошибке. Чтобы всё заработало, обратитесь к примечанию в конце раздела.

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

Поиск файлов в при помощи команды locate

Рассмотрим несколько способов использования команды locate.

 

$ locate index.html

 

В результате выполнения этой команды вы получите список путей к файлам по имени “index.html”, например:

 

/home/pamela/index.html

/usr/local/games/pam/index.html

 

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

 

$ locate «*.dat» -q

 

Использование параметра -n позволяет ограничить число возвращаемых результатов по вашему усмотрению:

 

$ locate «*.c» -n 10

 

Например, данная команда возвращает первые десять файлов с расширением .c.

Если вы хотите производить поиск без учета регистра, воспользуйтесь параметром -i.

 

$ locate INDEX.HTML -i

 

Поиск можно ускорить. Для этого воспользуйтесь следующей командой:

 

$ locate index.html -l 0

 

Если заменить -l 0 на -l 1, поиск будет проходить медленнее, но более безопасно. Именно это произойдёт по умолчанию, то есть при отсутствии параметра -l.

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

 

Примечание: Если при первом использовании locate вы получаете сообщение “db is not available” (база данных недоступна), то это означает, что Linux запрашивает базу данных всех файлов, которые locate использует для поиска. В этом сообщении вы также найдете команду, которую нужно выполнить, предварительно осуществив вход с правами суперпользователя. После этого locate будет работать без сучка и задоринки. Для того, чтобы перейти в режим суперпользователя, введите “su” в командной строке. Затем введите команду, которая была отображена в сообщении (как правило это команда updated). Далее нажмите Ctrl+D чтобы выйти из режима суперпользователя. Теперь вы можете работать с командой locate в обычном режиме.

 

Поиск файлов в ОС Linux при помощи команды find

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

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

Теперь рассмотрим несколько способов использования команды find:

 

$ find / -name ‘program.c’ 2>/dev/null

$ find / -name ‘program.c’ 2>errors.txt

 

/ — задает начальную папку для поиска (в данном случае, корневой каталог)

-name — интерпретирует поисковый запрос как имя файла, а не его атрибут

‘program.c’ — введенный текст для поиска. Имя файла следует заключать в одинарные кавычки.

 

Примечание: 2>/dev/null по сути не связан с командой find непосредственно. Двойка используется Linux для обозначения потока ошибок, а /dev/null – это устройство, при работе с которым данные попросту “исчезают”. Таким образом, 2>/dev/null при работе с данной командой означает, что в случае возникновения ошибки, любые сообщения перенаправляются в /dev/null, то есть, по сути, не отображаются.

 

В качестве альтернативы можно использовать 2>error.txt, при этом по завершению поиска в текущем каталоге будет создан файл “error.txt”,содержащий все сообщения об ошибке.

 

$ find /home/david -name ‘index*’

$ find /home/david -iname ‘index*’

 

Первая команда находит файлы, имена которых начинаются с последовательности символов “index”. Поиск осуществляется только в каталоге /home/david и его подкаталогах.

Вторая команда работает аналогичным образом, однако поиск производится без учета регистра. Таким образом, любая комбинация строчных и прописных букв (например, INDEX, indEX или index) удовлетворяет критериям поиска.

 

$ find -name met*

 

Данная команда осуществляет в текущем каталоге и его подкаталогах поиск файлов, имена которых начинаются с “met”. Linux начинает поиск с текущего каталога, поскольку не был передан второй параметр.

$ find /mp3collection -name ‘*.mp3’ -size -5000k

$ find / -size +10000k

 

Первая команда осуществляет в каталоге /mp3collection поиск файлов, размер которых меньше 5000 килобайт (< 5 Мб)

Вторая команда осуществляет поиск файлов, которые находятся в корневом каталоге и имеют размер больше 10000 килобайт (> 10 Мб)

 

$ find /home/david -amin -10 -name ‘*.c’

$ find /home/david -atime -2 -name ‘*.c’

$ find /home/david -mmin -10 -name ‘*.c’

$ find /home/david -mtime -2 -name ‘*.c’

 

Первая команда осуществляет в каталоге /home/david и его подкаталогах поиск файлов с расширением “.с”, которые были открыты в течение последних 10 минут.

Вторая команда выполняет аналогичные действия, но при этом выводятся файлы, которые были открыты за последние 10 часов.

Третья и четвёртая команды похожи на первые две, однако они осуществляют поиск файлов, которые были изменены, а не просто открыты.

 

$ find / -mount -name ‘win*’

 

Данная команда осуществляет поиск файлов, имена которых начинаются с “win”. Единственным отличием от предыдущих команд является тот факт, что в этом случае смонтированные файловые системы не затрагиваются при поиске. Такой подход имеет смысл, когда ваш windows-раздел смонтирован по умолчанию. В этом случае поисковый запрос “win” может вернуть много файлов из разделов, поиск в которых не имеет смысла.

 

$ find /mp3-collection -name ‘Metallica*’ -and -size +10000k

$ find /mp3-collection -size +10000k ! -name «Metallica*»

$ find /mp3-collection -name ‘Metallica*’ -or -size +10000k

 

Использование булевых операторов AND, OR и NOT (И, ИЛИ и НЕ) делают команду find весьма мощным инструментом.

Первая команда осуществляет в каталоге /mp3-collection поиск файлов, имя которых начинается с “Metallica”, а размер превышает 10000 килобайт (> 10 Мб).

Вторая команда выполняет поиск файлов в том же каталоге и с тем же размером, однако в этом случае имя должно начинаться с последовательности символов, отличной от “Metallica”.

Третья команда проводит в том же каталоге поиск файлов, имеющих либо имя, которое начинается с “Metallica”, либо размер более 10 Мб.

Пожалуй, самый важный параметр команды find – это параметр -exec. Он позволяет выполнить произвольную команду в зависимости от результата поиска. Далее мы рассмотрим простой пример. Однако максимально эффективный способ использования параметра -exec зависит только от вашего воображения. Предположим, вас интересуют свойства файлов (доступность для чтения/записи/выполнения, размер, владелец и прочее), полученных в результате поиска. В таком случае можно воспользоваться подобной командой:

 

$ find / — name ‘Metallica*’ -exec ls -l {\}\ \;

 

Данная команда осуществляет поиск всех файлов, имена которых начинаются с “Metallica”, а затем применяет к ним команду “ls -l”. В результате вам, по сути, будет представлена информация о файлах, найденных по вашему запросу.

После параметра -exec можно указать команду, которую вы хотите выполнить (в данном случае, “ls -l”).

Последовательность символов “{\}\” играет роль местозаполнителя для имён файлов, которые возвращает поисковый запрос, в то время как “\;” является замыкающей строкой и служит для завершения команды.

Команда find имеет и другие функции, которым будет посвящена отдельная статья.

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

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