Поиск файлов в Linux – команда Locate

Поиск файлов — одна из наиболее распространённых задач при работе в операционных системах (ОС) и их администрировании. В Linux существуют разные инструменты поиска и самым популярным и универсальным является команда find. Однако, данная команда работает не так быстро, как этого хотелось бы в случае с обработкой больших объёмов данных. Гораздо более быстрой альтернативой для поиска файлов в Linux является утилита locate. Об особенностях её работы и использования будет рассказано в данной статье.

Синтаксис и основные опции

Синтаксис команды locate следующий:

locate [OPTION] . . . PATTERN . . .

Утилита производит поиск файлов, имена которых совпадают с указанным в параметре PATTERN шаблоном и выводит найденные соответствия. Опции, заданные параметром OPTION, управляют специфичным поведением утилиты locate.

Опция Значение
-S, —statistics Выводит статистику по используемой утилитой locate БД.
-i, —ignore-case Проводит поиск без учёта регистра символов в шаблоне поиска.
-0, —null Отключает форматирование (перевод строки для каждого совпадения) в выводе.
-r, —regexp Задание шаблона поиска с помощью регулярного выражения.
-c, —count Выводит только количество совпадений без подробной информации.
-e, —existing Выводит результаты только для существующих в ФС файлов и каталогов.

Особенности работы команды locate

Скорость, с которой работает утилита locate сразу же бросается в глаза — поиск действительно, практически моментальный. Это возможно благодаря тому, что locate во время своей работы не производит сканирование файловой системы (ФС) непосредственно. Она анализирует информацию из базы данных (БД), которая формируется другой утилитой — updatedb. Вывод результатов утилиты locate – это результат анализа информации из БД, а не просмотра каталогов и файлов.

Скорость — это главное преимущество утилиты locate. Однако, оно же влечёт за собой и главный её недостаток — достоверность результатов поиска. Дело в том, что после появления в ФС новых элементов (файлов и каталогов), информация в БД должна быть обновлена утилитой updatedb и на это требуется определённое время. Если новые файлы и каталоги по каким-то причинам не были ещё проиндексированы в БД, то утилита locate их не сможет обнаружить. Таким же образом БД должна обновляться и при удалении из ФС каких-либо файлов и каталогов. Это необходимо учитывать.

Команда locate в примерах

Для того, чтобы исключить выдачу утилитой locate недостоверных результатов, необходимо следить за тем, чтобы БД находилась в актуальном состоянии. Это позволяет команда:

$ sudo updatedb

Теперь можно рассмотреть основные приёмы использования утилиты locate для самых распространённых случаев.

Получение информации о состоянии БД

Когда нужно узнать, какая БД используется для индексирования файлов, используемая утилитой locate, а также некоторые её статистические показатели, следует выполнить команду:

$ locate -S
База данных /var/lib/mlocate/mlocate.db
                     96 661 папка
                    1 370 352 файла
                    111 090 987 байт в названии файла
                    база данных заняла 39 159 149 байт

Вывод информации о количестве найденных совпадений

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

$ locate -c “*kde*”
17012

Запись “*kde*” означает, что будут искаться все файлы, в имени которых встречается подстрока «kde».

Вывод только актуальных результатов

Поскольку достоверность результатов поиска утилиты locate зависит от актуальности БД, то необходимо эту БД своевременно обновлять. Однако, есть возможность этого не делать, а воспользоваться опцией «-e», которая позволяет производить поиск, сверяя результаты с реальной структурой ФС. Но в данном случае по понятным причинам скорость поиска будет снижена:

$ locate -e "*notebook.cpp*"
/home/john/Builds/wxWidgets-3.0.4/samples/notebook/notebook.cpp
/home/john/Builds/wxWidgets-3.0.4/samples/widgets/notebook.cpp
/home/john/Builds/wxWidgets-3.0.4/src/generic/notebook.cpp
/home/john/Builds/wxWidgets-3.0.4/src/gtk/notebook.cpp
/home/john/Builds/wxWidgets-3.0.4/src/gtk1/notebook.cpp
/home/john/Builds/wxWidgets-3.0.4/src/msw/notebook.cpp
/home/john/Builds/wxWidgets-3.0.4/src/os2/notebook.cpp
/home/john/Builds/wxWidgets-3.0.4/src/univ/notebook.cpp

Вывод результатов с точными совпадениями

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

$ locate -r \notebook$
/home/john/Builds/codelite-12.0/LiteEditor/res/notebook
/home/john/Builds/codelite-12.0/sdk/wxflatnotebook
/home/john/Builds/wxWidgets-3.0.4/gtk-build/samples/notebook
/home/john/Builds/wxWidgets-3.0.4/gtk3-build/samples/notebook
/home/john/Builds/wxWidgets-3.0.4/samples/notebook
/home/john/Builds/wxWidgets-3.0.4/samples/notebook/notebook
/usr/share/akonadi/firstrun/defaultnotebook
/usr/share/themes/Breeze/gtk-2.0/widgets/notebook
/usr/share/themes/Breeze-Dark/gtk-2.0/widgets/notebook

В данном случае опция -r активирует использование регулярного выражения для задания шаблона поиска. Само выражение заключается между символами ‘\’ и ‘$’.

Другие полезные функции

Среди прочих возможностей утилиты locate наиболее полезной является игнорирование регистра символов в поисковом шаблоне. По-умолчанию утилитой locate поиск производится с учётом регистра символов. Но если в системе имеются два файла с именами locate.txt и LOCATE.TXT, то для того, чтобы исключить зависимость поиска от регистра символов, нужно использовать опцию «-i»:

$ locate -i -r \locate.txt$
/home/john/documents/LOCATE.TXT
/home/john/documents/locate.txt

Другой возможностью утилиты locate является замена символа перевода строки при выводе результатов поиска. По-умолчанию, каждое совпадение отображается в новой строке. Если необходимо, чтобы вывод был неформатированным, то можно использовать опцию «-0». Она позволяет выводить результаты в самом «чистом» виде, без использования переводов строк:

$ locate -i -r \locate.txt$
/home/john/documents/LOCATE.TXT/home/john/documents/locate.txt

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: