locate


Предыдущая | Следующая

http://rus-linux.net/MyLDP/consol/find-files-with-the-command-locate.html

Оригинал: Find files on Linux with the command locate
Автор: Riccardo Capecchi
Дата публикации: 12 июля 2012 г.
Перевод: А.Панин
Дата публикаци перевода: 18 октября 2012 г.

 

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

Эта программа принимает в качестве параметра имя файла (или часть имени) и моментально выводит список путей до этого файла в файловой системе; альтернативой этой программе является find, но разница между ними заключается в том, что find производит поиск по файловой системе и требуется значительный период времени для получения результата, а отличие в работе этих программ состоит в том, что locate использует собственную базу данных для хранения имен файлов в то время, как find исследует директории в поисках заданного параметром командной строки имени файла.

База данных locate mlocate.db

Для получения результатов, соответствующих действительности, вам необходимо поддерживать в обновленном состоянии базу данных со списком имен файлов. Операционная система может быть настроена таким образом, что обновление будет выполняться автоматически как задача cron. Например, в моей операционной системе Ubuntu 12.04 эта задача описана в файле /etc/cron.daily/mlocate и выполняется ежедневно.

Если в вашем дистрибутиве обновление по умолчанию отключено, можно обновить базу данных вручную при помощи команды sudo updatedb (требуются права пользователя root); это очень удобно в том случае, когда вы только что установили пакеты с программным обеспечением и хотите найти какой-либо файл, так как время, уходящее на обновление базы данных при помощи updatedb, всегда меньше времени на поиск файлов по всей файловой системе при помощи find.

Обычно база данных расположена в
/var/lib/mlocate/mlocate.db
и вы можете контролировать то, какие файлы и файловые системы будут исследованы при обновлении базы данных с помощью файла конфигурации, расположенного в
/etc/updatedb.conf

Ниже приведено содержимое файла конфигурации в моей системе:

В том случае, если директории подпадают под критерии, приведенные в качестве параметров переменных PRUNEFSPRUNENAMES или PRUNEPATHSupdatedb не производит исследование содержимого этой директории. Тем не менее, сама директория добавляется в базу данных. Ниже приведено подробное описание параметров, которые можно использовать в этом файле:

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

Теперь, когда мы настроили и обновили базу данных, мы можем начать использовать команду locate (в рамках обычной пользовательской учетной записи или учетной записи пользователя root - на ваше усмотрение); ниже приведено несколько примеров использования:

Типичный пример использования - поиск файла
$ locate php.ini
Эта команда должна вывести список путей, по которым вы можете обнаружить файлы с названием php.ini. Вывод должен быть аналогичен представленному ниже:
/etc/php5/cgi/php.ini
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini
/usr/share/doc/php5-common/examples/php.ini-development
/usr/share/php5/php.ini-production
/usr/share/php5/php.ini-production.cli

Это очень полезная команда в том случае, когда вам нужно внести изменения в файл конфигурации php, но вы не можете вспомнить, где расположен файл php.ini.

Скрытие сообщений об ошибках

Вы можете использовать параметр -q для скрытия сообщений об ошибках. Сообщения об ошибках обычно информируют пользователя о том, что нет доступа к файлу ввиду того, что пользователь работает в рамках обычной учетной записи (не записи суперпользователя). Параметр -q позволяет скрыть также и любые другие сообщения об ошибках:
$ locate .php -q

Ограничение вывода

Вы можете использовать параметр -n для ограничения количества возвращаемых результатов поиска заданным количеством строк. Таким образом, вы можете запросить только 10 результатов поиска при помощи следующей команды:
$ locate .php -n 10

В результате будут выведены первые 10 файлов с расширением .php.

Подсчет количества результатов поиска

Вы можете использовать параметр -c для того, чтобы просто узнать количество файлов, соответствующих заданному прототипу поиска, а в данном случае я провожу подсчет файлов с расширением .php:
$ locate .php -c
3414

Независимый от регистра поиск

Вы можете использовать параметр -i в том случае, когда вам необходимо провести писк файлов без учета регистра. Команда для поиска файлов без учета регистра:
$ locate INDEX.php -i
В этом случае будут подходить следующие имена файлов:
index.php INDEX.PHP Index.Php

Информация о базе данных

В качестве последнего рассматриваемого параметра стоит упомянуть параметр --statistics, предназначенный для получения информации о базе данных; вместо поиска будет выведена статистика, относящаяся к базе данных mlocate.db.
$ locate --statistics
Database /var/lib/mlocate/mlocate.db:
        6146 directories
        57770 files
        3564748 bytes in file names
        1612746 bytes used to store database

Заключение

Эта команда помогала мне множество раз в различных ситуациях, поэтому она установлена на каждом сервере или настольном компьютере, который я использую. Я не стал включать раздел об установке программы в эту короткую статью по той причине, что locate доступна в любом дистрибутиве Linux, обычно в пакете с названием mlocate, поэтому вы можете использовать ваш менеджер пакетов для ее установки, и еще я уверен, что вы полюбите ее.