Поиск файлов при помощи locateПодписка на Комментарии к "Поиск файлов при помощи locate"

Аватар zenon

Поиск файлов при помощи locate.

Многие пользователи Linux используют программу find, чтобы отыскать нужные файлы в системе. Например, так:

find / -name 'pattern'

Конечно же, возможности find гораздо более обширны, нежели просто поиск файлов по шаблону. Например, если вам нужно отыскать файлы, в которых бит разрешения записи установлен для владельца, а также для группы-владельца файлов, можно использовать команду:

find / -perm -444 -perm /222 ! -perm /111

или, возможно, файлы в каталоге Downloads, которые были изменены за последние 24 часа:

find /home/user/Downloads/ -mtime 0

Как видите, find весьма продвинутый инструмент и может быть использована для поиска файлов на основе большого набора критериев. Однако, бывают моменты, когда не хочется ждать, пока find просканирует всё дерево каталогов, а вместо этого побыстрее получить результаты поиска. Для этих целей существует программа locate, позволяющая просто и быстро получить информацию о местонахождении нужных файлов.

Чтобы получить возможность пользоваться командой locate, у вас в системе должен быть установлен пакет mlocate. Практически все популярные дистрибутивы имеют его в своих репозиториях или даже установленным по умолчанию. Если это не относится к вашей системе, вы можете скачать его с сайта разработчика и установить вручную. После того, как вы установите mlocate в систему, необходимо дождаться, пока сработает задание cron, запускающее программу updatedb, которая проиндексирует содержимое вашей файловой системы. Если ждать вы не хотите, всегда можно запустить updatedb вручную из терминала от имени root.

После того, как updatedb завершит свою работу и файловая система будет проиндексирована, вы можете пользоваться командой locate:

locate firefox | less

Приведённая выше команда выведет в поток стандартного вывода абсолютные пути всех файлов в системе, в имени которых встречается firefox, Конвейер с less предусмотрен потому, что скорее всего, найденных файлов будет слишком много, чтобы уместиться в окне терминала без прокрутки.

На сегодня mlocate не такая гибкая, как find, однако является очень полезной, когда вам нужно быстро определить точное местонахождение файла, имя или часть имени которого вы знаете. Преимуществом mlocate перед find является то, что при описке файлов она работает с базой данных, а не с файловой системой, поэтому результаты поиска вы получаете практически моментально.

mlocate обладает некоторыми дополнительными возможностями, например, умением следовать по символическим ссылкам или использовать регулярные выражения. Все возможности mlocate описаны на её man-странице, так что, кому нужно чуть больше, чем «стандартный» поиск — милости просим. Обязательно потратьте немного времени и поиграйтесь с mlocate. Уверен, вы оцените её по достоинству!

Небольшое дополнение - если смонтировано много каталогов в системе, обновление базы может быть долгим, по умолчанию mlocate добавляет запись в crontab, но ее необходимо настроить.
А вот если необходимо исключить какие-либо каталоги из поиска, то это можно настроить в /etc/updatedb.conf:

# /etc/updatedb.conf: config file for slocate
# $Id: updatedb.conf,v 1.5 2011/01/24 12:39:33 scarabeus Exp $

# This file sets variables that are used by updatedb.
# For more info, see the updatedb.conf(5) manpage.

# Filesystems that are pruned from updatedb database
PRUNEFS="afs anon_inodefs auto autofs bdev binfmt binfmt_misc cgroup cifs coda configfs cramfs cpuset debugfs devpts devtmps devfs devpts ecryptfs eventpollfs exofs futexfs ftpfs fuse fusectl gfs gfs2 hostfs hugetlbfs inotifyfs iso9660 jffs2 lustre misc mqueue ncpfs nfs NFS nfs4 nfsd nnpfs ocfs ocfs2 pipefs proc ramfs rpc_pipefs securityfs selinuxfs sfs shfs smbfs sockfs spufs sshfs subfs supermount sysfs tmpfs ubifs udf usbfs vboxsf vperfctrfs"

# Paths which are pruned from updatedb database
PRUNEPATHS="/tmp /var/tmp /var/cache /var/lock /var/run /var/spool /mnt"

# Folder names that are pruned from updatedb database
PRUNENAMES=".git .hg .svn CVS"

# Skip bind mounts.
PRUNE_BIND_MOUNTS="yes"

Помимо установок по-умолчанию я исключил каталог /mnt
PRUNEPATHS="/tmp /var/tmp /var/cache /var/lock /var/run /var/spool /mnt"

Добавить комментарий