Библиотека сайта rus-linux.net
Поиск файлов в Linux при помощи команды locate
Оригинал: 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
Ниже приведено содержимое файла конфигурации в моей системе:
PRUNEFS
, PRUNENAMES
или PRUNEPATHS
, updatedb
не производит исследование содержимого этой директории. Тем не менее, сама директория добавляется в базу данных. Ниже приведено подробное описание параметров, которые можно использовать в этом файле:
PRUNEFS
: Разделенный пробелами список типов файловых систем (используются те же типы, что и в файле/etc/mtab
), которые не должны исследоваться при помощиupdatedb
. Названия типов файловых систем не зависят от регистра. По умолчанию никакие из типов файловых не пропускаются. В том случае, если файловая система не исследуется, все файловые системы, смонтированные в рамках этой файловой системы, также не исследуются даже в том случае, когда их тип не задан в параметреPRUNEFS
.PRUNENAMES
: Разделенный пробелами список имен директорий (без путей), которые не должны быть исследованы при помощиupdatedb
. По умолчанию никакие из имен директорий не пропускаются. Следует отметить, что может задаваться полное имя директории без применения какого-либо механизма шаблонов (например, механизма glob).PRUNEPATHS
: Разделенный пробелами список путей, которые не должны исследоваться при помощиupdatedb
. Каждый путь должен быть задан в точно таком же формате, как и выводlocate
. По умолчанию никакие из путей не пропускаются.PRUNE_BIND_MOUNTS
: В качестве параметров могут быть использованы значения: 0, no, 1 или yes. Если значениями переменнойPRUNE_BIND_MOUNTS
являются параметры 1 или yes, файловые системы, смонтированные в режимеbind
не исследуются при помощиupdatedb
. Все файловые системы, смонтированные в рамках пропускаемой файловой системы, также пропускаются даже тогда, когда они смонтированы не в режимеbind
. По умолчанию файловые системы, смонтированные в режимеbind
, не пропускаются.
Использование locate
Теперь, когда мы настроили и обновили базу данных, мы можем начать использовать команду locate
(в рамках обычной пользовательской учетной записи или учетной записи пользователя root - на ваше усмотрение); ниже приведено несколько примеров использования:
$ locate 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
, поэтому вы можете использовать ваш менеджер пакетов для ее установки, и еще я уверен, что вы полюбите ее.