unix - コマンドリファレンス - ファイル名高速検索 locate
- 1. ファイル名検索
- 2. データベース作成
- 3. 注意
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
怒られちゃいます。
2. データベース作成
「FreeBSD」の場合、
/var/db/locate.database ← データベース
/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」権限で行うしかないようですな。
「Linux」の場合(2019年12月25日現在、ArcoLinux 19.12.15 でしかやったことがない)、
/var/lib/mlocate/mlocate.db ← データベース
/usr/bin/updatedb ← 更新スクリプト
という構成になっています。
こちらの場合は、「root」ユーザで実行しても、なんら警告は表示されませんでした。
3. 注意
検索する場合、「検索後」を「*検索後*」と、両端をワイルドカードで囲んだような形式で検索するので、短い名前で探すと候補が多くなりすぎて、混乱しちゃうのでご注意ください。
|
  |