AWSでファイルを探す時は、もっぱら find を使ってました。
sudo find / -name hoge
しかしlocateの方がdb参照するので早いようですね!
ちょっと使ってみましょう。
AWS の初期 EC2環境に locateは入っていない
EC2の初期環境でlocateを使ってもコマンドがないと言われます。
まずは、yumでインストールしましょう。
slocateもlocateもありませんね。
sudo find -name "*locate*"
locate のインストール
AWS 上は、 mlocate でyum installします。
sudo yum install mlocate
locate の検索ロジック
ようは、バークレイDBを参照しているので早いわけです。
findだとファイルを検索なので……インデックスと言い換えると分かり易いですか?
updatedbは、ここにあります。
/usr/bin/updatedb
更新はsu権限でこのコマンドを。
sudo updatedb
locateを使う
単純です。
locate hoge
さすがインデックス、findより高速です。
findのこれと等価です。
find / "*hoge*"
locateは、sudo がないとユーザーがアクセス可能なファイルだけが検索結果に出るのでいいですね。
findはエラーが出過ぎでつらかったので。
updatedbの更新
crontabで実行されています。
cat /etc/cron.daily/mlocate.cron
ほむ
#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
updatedbの対象
ここで既定しています。
/etc/updatedb.conf
内容を見ます。
vim /etc/updatedb.conf
さて
PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fusectl gfs gfs2 hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs"
PRUNENAMES = ".git .hg .svn"
PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spool/cups /var/spool/squid /var/tmp"
- PRUNEFS は、 updatedb に含めないファイル名です。
- PRUNENAMES は、 updatedb に含めない拡張子です。
- PRUNEPATHS は、 updatedb に含めないパスです。
まとめ
locateいいね!
あとパスが通っているファイル = コマンドを探すならwhichが好きかも。
which locate
とかね!