Настройка и работа в Linux

         

Использование locate


Данная утилита просто незаменима в случае если вам хотя бы приблизительно известно имя файла, который нужно найти. Отличительная особенность данной команды, скажем от того же find, в том что при работе она не сканирует по настоящему файловую систему, поиск идет в предварительно построенной базе, в которой хранится как-бы слепок с файловой системы. Такой слепок выполняется с помощью команды locate -u или updatedb, которая по настоящему перелопачивает ваши жесткие или сетевые диски, а имена всех найденных файлов записывает в базу. Естественно что данная процедура довольно ресурсоемкая, и может занимать довольно длительное время. Ее запуск обычно поручают crontab, который запускает updatedb с требуемой частотой. Частота обновления базы зависит от того насколько часто обновляется содержимое файловой системы, а также насколько важна актуальность данных. Так обычно обновление базы выполняется автоматически раз в неделю, или вручную, после того как вы или системный администратор установили новую партию свежего ПО. Отмечу, для того чтобы обновить базу, нужно иметь права суперпользователя.

Приведу простейший пример использования:

$ locate traceroute /usr/man/man8/traceroute.8.gz /usr/sbin/traceroute6 /usr/sbin/traceroute

$ locate mpg123 /usr/doc/mpg123-0.59r /usr/doc/mpg123-0.59r/BUGS /usr/doc/mpg123-0.59r/CHANGES /usr/doc/mpg123-0.59r/COPYING /usr/doc/mpg123-0.59r/INSTALL /usr/doc/mpg123-0.59r/JUKEBOX /usr/doc/mpg123-0.59r/README /usr/doc/mpg123-0.59r/TODO /usr/doc/mpg123-0.59r/mp3license /usr/man/man1/mpg123.1.gz /usr/bin/mpg123 $

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


Иногда требуется более точный поиск, когда нужно ограничить то место куда может входить заданная подстрока. Скажем если нам нужно найти только файлы и каталоги в название которых входит mpg123. В данном случае можно использовать шаблоны ?аля bash? (помните *, ?, [...]) или более продвинутый вариант использующий регулярные выражения. Я предпочитаю последний, как более мощный и продвинутый.

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

$ locate -r "mpg123[^/]*$" /usr/doc/mpg123-0.59r /usr/man/man1/mpg123.1.gz /usr/bin/mpg123 $

Строка mpg123[^/]*$ - просит locate найти те файлы в которых после подстроки mpg123 могут быть ноль или более символов, кроме символа /, после чего идет конец строки. Таким образом из результата поиска исключаются строки вида /usr/doc/mpg123-0.59r/BUGS.

Еще одна полезная возможность - это форма вызова locate -i. Параметр -i говорит о том что нужно произвести нечувствительный к регистру поиск:

$ locate "/etc/dir" /usr/local/share/emacs/21.1/etc/dired-ref.ps /usr/local/share/emacs/21.1/etc/dired-ref.tex $ locate -i "/etc/dir" /usr/local/share/emacs/21.1/etc/dired-ref.ps /usr/local/share/emacs/21.1/etc/dired-ref.tex /etc/DIR_COLORS $


Содержание раздела