locateコマンド

改めて書くほどのトピックではないんだけど、とりあえず思いついたのでメモ
サーバーでlocateコマンドを叩いたらこんなエラーが

# locate httpd.conf
warning: locate: could not open database: /var/lib/slocate/slocate.db: No such file or directory
warning: You need to run the 'updatedb' command (as root) to create the database.
Please have a look at /etc/updatedb.conf to enable the daily cron job.

locateコマンドが参照するdbがないので、updatedbを叩くか、/etc/updatedb.confでデイリーのcronをenableにしなさいよ。ってこと。

# less /etc/updatedb.conf
# To enable the updatedb in cron, set DAILY_UPDATE to yes
DAILY_UPDATE=no

PRUNEFS="sysfs selinuxfs usbdevfs devpts NFS nfs nfs4 afs sfs proc smbfs cifs autofs auto iso9660 udf"
PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /net /sfs /selinux
/udev /mnt/floppy /media"
export PRUNEFS
export PRUNEPATHS

DAILY_UPDATE=yesとするとcron.dailyにあるlocateが走って毎日updatedbが実施されます。ちなみに

になります。引用した中では一時ディレクトリが除外されています。大量のファイルがあればあるほどupdateには時間と負荷がかかります。検索の必要のないディレクトリがあればここに記載すればいいでしょう。

もうひとつちなみに。現在ほとんどのディストリビューションではlocateコマンドはslocateコマンドへのシンボリックリンクになっています。
slocateはlocateコマンドのセキュリティ機能を強化したもので、ファイルのパーミッション情報を付加することで、セキュリティを高めています。

# ls -la /usr/bin/locate
lrwxr-xr-x 1 root root 7 Oct 9 23:18 /usr/bin/locate -> slocate