Действия

FreeBSD - locate - быстрый поиск файлов

Материал из Wiki - Iphoster - 'the best ever support'

Самые выгодные сервера? в рунете


locate - быстрый поиск файлов

Команда locate позволяет искать файлы в индексированной базе данных. Отличие от find - поиск происходит мгновенно


При первом запуске locate мы получим сообщение об ошибке:

# locate traceroute
locate: database too small: /var/db/locate.database

Это значит, что БД по которой должен производиться поиск - не сформирована, либо давно не обновлялась:

# ls -l /var/db/locate.database
-rw-r--r--  1 nobody  wheel  0  6 янв  2010 /var/db/locate.database


Обновление базы данных производится программой locate.updatedb - /usr/libexec/locate.updatedb. Однако запускать ее от рута - не стоит. В таком случае в БД попадёт вся информация о файловой системе. Запуск нужно производить через скрипт - /etc/periodic/weekly/310.locate, который выполняет запуск от пользователя nobody:

# /etc/periodic/weekly/310.locate


Обновление базы locate также осуществляется через демон cron и присутствует в списке задач periodic weekly(выполняется в суботу в 04:15)

# grep "periodic weekly" /etc/crontab 
15	4	*	*	6	root	periodic weekly


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

#  locate crontab
/etc/crontab
/usr/bin/crontab
/usr/obj/usr/src/usr.sbin/cron/crontab
/usr/obj/usr/src/usr.sbin/cron/crontab/.depend
/usr/obj/usr/src/usr.sbin/cron/crontab/crontab
/usr/obj/usr/src/usr.sbin/cron/crontab/crontab.1.gz
/usr/obj/usr/src/usr.sbin/cron/crontab/crontab.5.gz
/usr/obj/usr/src/usr.sbin/cron/crontab/crontab.o
/usr/ports/mail/courier/files/crontab.in
/usr/ports/net-mgmt/ifgraph/files/crontab.in
/usr/ports/net-mgmt/netdisco/files/patch-netdisco.crontab
/usr/ports/sysutils/anacron/files/anacrontab.default
/usr/ports/sysutils/fcron/files/fcrontab-operator
/usr/ports/sysutils/fcron/files/fcrontab-root
/usr/ports/www/campsite/files/crontab.in.in
/usr/share/examples/etc/crontab
/usr/share/man/cat1/crontab.1.gz
/usr/share/man/cat5/crontab.5.gz
/usr/share/man/man1/crontab.1.gz
/usr/share/man/man5/crontab.5.gz
/usr/src/etc/crontab
/usr/src/usr.sbin/cron/crontab
/usr/src/usr.sbin/cron/crontab/Makefile
/usr/src/usr.sbin/cron/crontab/crontab.1
/usr/src/usr.sbin/cron/crontab/crontab.5
/usr/src/usr.sbin/cron/crontab/crontab.c 

Подсчитать количество файлов в системе:

# locate / | wc -l
  442394

Подсчитать количество файлов в системе c расширением .conf:

# locate "*.conf" | wc -l
    774


Поиск, игнорируя регистр:

# locate -i /x11/xtrans


Особенности поиска locate:

Ищутся все файлы и каталоги в именах которых встречается подстрока заданная в качестве аргумента. 
Файлы выводятся включая полный путь к ним. 
Заданная подстрока вообще может не входить в имя самого файла, а встречаться в его пути