locate コマンドで高速に検索する

locate コマンドは、コマンドの実行時にファイルを検索するのではなく 事前に作成したデータベースを使って検索するので、find コマンドよりも高速で検索することができます。

$ locate cgi

(省略)
/usr/share/doc/popularity-contest/examples/popcon-submit.cgi
/usr/share/doc/python-pexpect/examples/cgishell.cgi.gz
/var/lib/nginx/fastcgi
/var/lib/nginx/scgi

パターンマッチングも色々できます。

$ locate "*.cgi"

/usr/lib/w3m/cgi-bin/dirlist.cgi
/usr/lib/w3m/cgi-bin/multipart.cgi
/usr/lib/w3m/cgi-bin/w3mhelp.cgi
/usr/lib/w3m/cgi-bin/w3mmail.cgi
/usr/lib/w3m/cgi-bin/w3mman2html.cgi
/usr/share/doc/popularity-contest/examples/popcon-submit.cgi

検索にデータベースを使うので、作ったばかりのファイルを検索することはできません。

$ touch /var/www/test.cgi
$ locate test.cgi

データベースを更新するには updatedb コマンドを使います。

$ sudo updatedb

これで出てきます。

$ locate test.cgi

/var/www/test.cgi

データベースの更新は だいたい cron で毎日動くようになっています。 Ubuntu の場合は /etc/cron.daily にあります。

$ ls -l /etc/cron.daily/mlocate

-rwxr-xr-x 1 root root 606 2010-03-24 19:16 /etc/cron.daily/mlocate

注意しなくてはいけないのは /tmp や /var/spool などは除外の設定がされてたりして 検索しても出てこない場合があります。

Ubuntu の場合 /etc/updatedb.conf に設定されています。

$ cat /etc/updatedb.conf

PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"

Google サイト内検索

Amazonアソシエイト