以下の内容はhttps://tech.guitarrapc.com/entry/2013/04/20/230441より取得しました。


AWS Linux で locateコマンドを使う

AWSでファイルを探す時は、もっぱらfindを使ってました。しかしlocateの方がdb参照するので早いようですね!

sudo find / -name hoge

ちょっと使ってみましょう。

AWS の初期 EC2環境に locateは入っていない

EC2の初期環境でlocateを使ってもコマンドがないと言われます。

まずはyumでインストールしましょう。slocatelocateがありません。

sudo find -name "*locate*"

locate のインストール

AWS上はmlocateをインストールします。

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の対象

ここでデフォルトしています。

$ cat /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



以上の内容はhttps://tech.guitarrapc.com/entry/2013/04/20/230441より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14