unix - コマンドリファレンス - ファイル名高速検索 locate

 
1. ファイル名検索
2. 注意

1. ファイル名検索


locate [-Scims] [-l limit] [-d database] pattern ...
 の形式で、ファイル名を検索します。  「高速検索」と銘打っているだけに、ものすごく速い。  「find」で、ディレクトリを指定するより速い。  実行ファイルを探す「whereis」よりも速い。  なんで早いかっちゅうと、ファイル名のデータベースを持っているからです。  どうも定期的(週一回か毎日らしい)に、データベースの更新を行っているのですな。  意識したことがないので、「cron」で実行しているのでしょう。  「FreeBSD」の場合

/var/db/etcupdate/current/etc/periodic/weekly/310.locate
 に、その記述があったので、毎週やっているようです。  なので、たまにしか起動しないマシンで実行すると

> locate wmhelper.h
locate: database too small: /var/db/locate.database
Run /usr/libexec/locate.updatedb
 怒られちゃいます。  「FreeBSD」の場合、データベースは、「/var/db/locate.database」なわけで、更新スクリプトは、「/usr/libexec/locate.updatedb」なわけです。  こういった場合、「/usr/libexec/locate.updatedb」を実行するのですが。  root ユーザで実行しようとすると

> /usr/libexec/locate.updatedb
>>> WARNING
>>> Executing updatedb as root.  This WILL reveal all filenames
>>> on your machine to all login users, which is a security risk.
 てな感じで怒られちゃいます。  権限が「nobody:wheel」という特殊なものなので、root ユーザで実行しちゃ警告が表示されるのですが、かと言ってログインユーザで行うと、

> /usr/libexec/locate.updatedb
/usr/libexec/locate.updatedb: cannot create /var/db/locate.database: Permission denied
 とエラーになるので、root 権限で行うしかないようですな。

2. 注意

 検索する場合、「検索後」を「*検索後*」と、両端をワイルドカードで囲んだような形式で検索するので、短い名前で探すと候補が多くなりすぎて、混乱しちゃうのでご注意ください。
 
 
カウンタバックグラウンド