LoginSignup
76
72

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-03-11

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を使った意味は特にないです
76
72
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
76
72