22
ноября
0

Locate — поиск файлов в индексной базе



В UNIX-системах обычно по умолчанию есть утилита locate, которая позволяет искать файлы по его имени или части имени. Ищем все файлы и директории в именах которых встречается подстрока заданная в качестве аргумента и в выводе получаем полный путь к ним. В Linux можно использовать регулярные выражения, указывая ключ «-r». Хотя можно обойтись и без них, строя комбинации из конвееров (pipe-ов) в командной строке.

locate "locate" | grep -Ev "(src|ports)"
/etc/locate.rc
/etc/periodic/weekly/310.locate
/usr/bin/locate
/usr/libexec/locate.bigram
/usr/libexec/locate.code
/usr/libexec/locate.concatdb
/usr/libexec/locate.mklocatedb
/usr/libexec/locate.updatedb
/usr/local/man/man3/XdbeAllocateBackBufferName.3.gz
/usr/local/man/man3/XdbeDeallocateBackBufferName.3.gz
/usr/local/man/man3/XtAllocateGC.3.gz
/usr/local/man/man7/deallocate.7.gz
/usr/local/share/ri/1.8/system/Class/allocate-i.yaml
/usr/local/share/zsh/4.3.10/functions/Completion/Debian/_dlocate
/usr/local/share/zsh/4.3.10/functions/Completion/Unix/_locate
/usr/share/examples/etc/locate.rc
/var/db/locate.database 

По расписанию (crontab) запускается updatedb, которая индексирует файлы в ОС и создает БД. Для FreeBSD обновление базы запускается раз в неделю, в отличии от Linux, где это обычно происходит каждый день. Это можно проверить в настройках демона CRON, а вернее в директориях, где находятся скрипты, запускаемые каждый час/день/месяц.

В FreeBSD задание /etc/periodic/weekly/310.locate выполняется, если специально не добавить в /etc/periodic.conf строчку:

weekly_locate_enable="NO" 

Этот же скрипт можно использовать для получения актуальных данных и создания БД с нужными правами. В этом же скрипте можно найти место расположения базы (locdb=/var/db/locate.database) и какая команда для обновления/построения запускается (/usr/libexec/locate.updatedb). Если посмотреть

man locate.updatedb 

то узнаем, где находится конфигурационный файл этой утилиты, задающий контролируемый контент при построении базы.

Настройки хранятся в /etc/locate.rc, где можно задать/изменить такой важный параметр как PRUNEPATHS, позволяющий указывать директории, которые должны пропускаться. Это бывает достаточно полезным, когда в директории содержится очень много файлов.

Понравилась статья?
Подписаться на RSS feed
Оставить комментарий