Help us understand the problem. What is going on with this article?

ファイルを探す[findとlocate]

More than 5 years have passed since last update.

Linux(我が家の環境ではUbuntu12.04)でファイルをサクっと検索したい場合に何を使うか
長らく自分はfindを使っていたが、どうもlocateの方が高速だし手軽らしいという話を聞きつけた。

なんとなく調べてみた感じ

find

  • 検索オプションが豊富
  • だから色々柔軟に検索できる(しやすい)
  • 遅い

locate

  • findに比べて検索オプションが貧弱(調べ不足?)
  • 速い

遅いとか速いとかどうしてなの

  • findではその場でストレージにアクセスし検索する
  • 対してlocateでは事前に作成したデータベースを元に検索する

つまり

  • findは新しいファイルに即座に対応できる
  • locateは新しいファイルに対応できない代わりに検索が高速

動作

find / -name '*hoge*'
locate hoge
  • これで同じ動作。locate使ったほうが入力も楽だしよくね、っていう
  • findでは検索する場所を指定している(第1引数/)のに対してlocateでは指定していない
  • locateではデフォルトで/から検索する
  • locateを用いて/以外から検索したい場合については後述

検索するデータベースってどのタイミングで作られるの

  • /etc/cron.daily/mlocateで作られている
  • cron.dailyなので実行タイミングに起動してないと作成されない
  • /etc/crontabを確認し実行タイミングを見ておく
  • 手動でやりたければ# updatedbする

/以外から検索したいとき

データベースを作る

  • 検索したい場所のデータベースを別個で作る
# updatedb -U /hoge/ -o /path/to/database.db

これで/hoge/のデータベースが/path/to/databse.dbとして作成される。
ちなみに標準のデータベースは/var/lib/mlocate/mlocate.dbにある
* updatedbはスーパーユーザ権限で実行する必要がある。#でなく$で実行するとこんな感じ

$ updatedb -U ~/ -o ~/hoge.db
updatedb: can not change group of file `/home/tea/hoge.db.9XvzA2' to `mlocate': Operation not permitted
  • 使用するデータベースを変更してlocateする
$ locate -d /path/to/database.db hoge

-dオプションでデータベースを指定するだけ

めんどくさいんだけど…

  • locateの結果をgrepでもすればいいじゃない
$ locate hoge | grep '/home/hogehoge/'

まとめ

  • 頻繁にファイルが増えたり消えたりする場合にはfindを使ったほうが良い
  • あんま変動しないとこならlocate
  • ただしデフォルトでは常に/から検索されるので注意(無駄も含まれる)
  • データベースを別個に作成してもいいけどパイプでgrepとかに渡してやれば簡単

追記

  • findだと権限持ってないところを検索できない
$ find /etc/webmin -name '*webmin*'
/etc/webmin
find: `/etc/webmin/dovecot': 許可がありません
find: `/etc/webmin/fsdump': 許可がありません
find: `/etc/webmin/openslp': 許可がありません
以下略
  • locateだと権限持ってないユーザで実行しても検索できる
$ locate webmin | grep /etc/webmin
/etc/webmin
/etc/webmin/acl
/etc/webmin/adsl-client
以下略
  • Webminを使った意味は特にないです
ottyajp
最近C++/Qtしてます サンプルコードの切り貼りしか出来ないゾ!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした