unix - コマンドリファレンス - ファイル名高速検索 locate
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. 注意 検索する場合、「検索後」を「*検索後*」と、両端をワイルドカードで囲んだような形式で検索するので、短い名前で探すと候補が多くなりすぎて、混乱しちゃうのでご注意ください。
locate [-Scims] [-l limit] [-d database] pattern ...
/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
/var/db/locate.database ← データベース /usr/libexec/locate.updatedb ← 更新スクリプト
> /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.
> /usr/libexec/locate.updatedb /usr/libexec/locate.updatedb: cannot create /var/db/locate.database: Permission denied
/var/lib/mlocate/mlocate.db ← データベース /usr/bin/updatedb ← 更新スクリプト