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

クラウディア 
1. ファイル名検索
2. データベース作成 FreeBSD
3. データベース作成 linux
4. 注意

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

 「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」権限で行うしかないようですな。  こ、これが、「FreeBSD 14.0 RELEASE」で解決しました。  インストールしたばかりのマシンで、「locate」コマンドを実行したら・・・。

$ ocate winter
locate: the locate database '/var/db/locate.database' is smaller than 256 bytes large.

To create a new database, please run the following command as root:

  /etc/periodic/weekly/310.locate
 をを、「cron」で動かすスクリプトを、「root」権限で実行するのが正解のようです。  「root」ユーザ権限で。

$ /etc/periodic/weekly/310.locate

Rebuilding locate database:
 エラーもワーニングも出力されませんでした。

3. データベース作成 Linux

 「Linux」の場合(2019年12月25日現在、ArcoLinux 19.12.15 でしかやったことがない)、

/var/lib/mlocate/mlocate.db		←	データベース
/usr/bin/updatedb				←	更新スクリプト
 という構成になっています。  こちらの場合は、「root」ユーザで実行しても、なんら警告は表示されませんでした。

4. 注意

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