Библиотека сайта 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, поэтому вы можете использовать ваш менеджер пакетов для ее установки, и еще я уверен, что вы полюбите ее.
