Locate

Материал из Wiki Open book
Перейти к: навигация, поиск

Оглавление

Программа ищет файлы в специальной базе данных. Базу данных она может создавать сама или при помощи программы updatedb.

В разных дистрибутивах Linux используются различные реализации программы. В Slackware Linux:

$ locate -V
Secure Locate 2.7 - Released January 24, 2003
$

В SuSE Linux:

$ locate --version
GNU locate версии 4.2.19
$
Внимание! В SuSE Linux программа locale по умолчанию не устанавливается. Если вы захотите ее использовать, установите пакет findutils-locate.

Придется рассмотреть обе реализации программы. Начнем с GNU версии, которая используется в SuSE Linux.

locate

В состав пакета findutils-locate входят две программы: updatedb и locale. Программа updatedb создает базу данных, в которой locate ищет файлы.

updatedb [параметры]

По умолчанию программа ищет и помещает в базу все файлы, начиная с корневой директории. Но при помощи параметра --localpaths='директория директория ...' можно определить директории в которых программа будет искать файлы.

В базе данных не имеет смысла хранить временные файлы, файлы виртуальных файловых систем, а так же файлы, находящиеся в директориях, куда подключены файловые системы съемных накопителей. Поэтому при создании базы данных есть возможность при помощи параметра --prunepaths='директория директория ...' определять директории, которые не войдут в базу данных. По умолчанию в базу не попадают директории: /tmp /usr/tmp /var/tmp /afs. При помощи параметра --prunefs='файловая система ...', определяются типы файловых систем, файлы которых не будут попадать в базу данных. По умолчанию в базу не попадают файловые системы: nfs, NFS и proc.

В SuSE Linux программа updatedb запускается автоматически по расписанию раз в день. Для конфигурации программы рекомендуется использовать файл /etc/sysconfig/locate. В нем при помощи переменных UPDATEDB_PRUNEPATHS и UPDATEDB_PRUNEFS можно определить список директорий и файловых систем, которые не будут учитываться при создании базы данных. Ниже показано содержимое этого файла по умолчанию. В листинге не показаны комментарии и пустые строки.

RUN_UPDATEDB=yes
RUN_UPDATEDB_AS=nobody
UPDATEDB_NETPATHS=""
UPDATEDB_PRUNEPATHS="/mnt /cdrom /tmp /usr/tmp /var/tmp /var/spool /proc /media"
UPDATEDB_NETUSER=""
UPDATEDB_PRUNEFS=""
Внимание! Файл /etc/sysconfig/locale используется только при автоматическом запуске программы updatedb. Если вы собираетесь запускать ее вручную, все необходимые параметры придется передавать явно. Как вариант, программу можно запускать при помощи скрипта /etc/cron.daily/updatedb, он применяется для запуска программы по расписанию, и использует конфигурационный файл /etc/sysconfig/locale.

Программа locate производит поиск в базе данных, созданной при помощи updatedb.

locate [-i] [-c] [-] [N] [-r] [--version] [--help] шаблон ...

При вызове программы необходимо указывать шаблон поиска. В шаблоне могут применяться все символы, которые можно использовать при указании имен файлов в файловой системе: *, ? и [ ]. Не рекомендуется применять символы: / и точка. В качестве результата, программа выводит все строки, в которых содержится указанный шаблон.

$ locate ls
...
/usr/share/wesnoth/data/tools/exploder/models/castle.cfg
/usr/share/wesnoth/data/tools/exploder/wall-concave.cfg
/usr/share/wesnoth/data/tools/exploder/wall-convex.cfg
...
/var/lib/YaST2/you/mnt/i386/update/9.3/patches/gnutls-52346
/var/lib/YaST2/you/mnt/i386/update/9.3/patches/pilot-mailsync-gnome-pilot-52222
/var/lib/YaST2/you/mnt/i386/update/9.3/patches/wireless-tools-52212
$

Я очень сильно сократил реальный вывод программы. Придется использовать дополнительные инструменты для получения вразумительной информации. Например, воспользоваться фильтром grep.

$ locate ls | grep /ls$
/bin/ls
/opt/kde3/share/locale/l10n/ls
/usr/share/doc/packages/busybox/testsuite/ls
$

Или использовать в шаблонах регулярные выражения, но при этом требуется обязательно указывать параметр –r.

$ locate -r /ls$
/bin/ls
/opt/kde3/share/locale/l10n/ls
/usr/share/doc/packages/busybox/testsuite/ls
$

Параметр –i позволяет игнорировать регистр букв. А при помощи параметра –l определить максимальное количество выводимых строк. Общее количество найденных файлов можно получить используя параметр –c.

$ locate -c ls
14630
$

У программы есть другие параметры, но сейчас мы их рассматривать не будем.

slocate

В Slackware Linux используется другая разновидность программы locate -- slocate. Locate и updatedb -- это символьные ссылки на slocate.

slocate [-u] [-U директория] [-e директория,...] [-f тип_fs,...] [-c] [-i]
[-q] [-n N] [-r] [-v|-V] [шаблон]

Для создания базы данных можно использовать как updatedb, так и slocate. Параметр –u заставляет программу помещать в базу все файлы начиная с корневой директории. Программа позволяет указать директории (параметр –e) и типы файловых систем (параметр –f) которые не должны попадать в базу.

# updatedb -u -f proc,sysfs,vfat,ntfs -e /tmp,/var/tmp,/dev
#

Для того, что бы каждый раз не указывать перечисленные выше параметры, можно воспользоваться конфигурационным файлом /etc/updatedb.conf.

PRUNEFS="devpts NFS nfs afs proc smbfs autofs iso9660 udf"
PRUNEPATHS="/dev /proc /sys /tmp /usr/tmp /var/tmp /afs /net"
export PRUNEFS
export PRUNEPATHS

Но для того, что бы программа обращалась к этому конфигурационному файлу, следует применять параметр –c. Параметр –r позволяет использовать регулярные выражения. А параметр –i заставляет программу игнорировать регистр букв в шаблоне поиска.

$ locate -r /ls$
/bin/ls
/usr/bin/ls
/opt/kde/share/locale/l10n/ls
$

Обновление базы происходит по расписанию, раз в день по расписанию.

У программы locate есть очевидное преимущество -- очень быстрый поиск. Но так же есть и серьезный недостаток -- программа может врать. База обновляется раз в день и при добавлении или удалении файла информация в базу попадает с опозданием. Поэтому этой программой следует пользоваться аккуратно.

Источник — «http://wiki.kryukov.biz/wiki/Locate»
Инструменты
    
Личные инструменты