locateコマンドのインストール,初期設定について. 簡単な内容ですが,忘れがちなので備忘録.


locate

locateコマンドは,ファイルを検索するためのコマンドです. 同じ目的で使うコマンドとして,findがありますが,僕はlocateの方が好きです.

locateとfindの違いは,以下が詳しかったです. [知らない人は損してる?Mac/Linuxの「locate」コマンドで高速ファイル検索|「find」コマンドとの違いから「mdfind」の紹介まで] http://qiita.com/KENJU/items/862d59d29bb033eb0a8c (mdfindコマンド,知りませんでした)

このコマンド,OSをインストールした直後の初期段階では使えないです. CentOS5.11, CentOS6.6では入っていない.OS Xはどうだったかな…

ということでインストールします.


 

locateのインストールとセットアップ

普通にyumでlocateをインストールしようとすると…

[~]$ yum -y install locate
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
パッケージ locate は利用できません。
エラー: 何もしません
[~]$

locateをインストールしたいのにインストールできない. yum searchします.

[~]$ yum search locate
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
================================== N/S Matched: locate ==================================
mlocate.x86_64 : An utility for finding files by name
perl-File-ShareDir.noarch : Locate per-dist and per-module shared files
which.x86_64 : Displays where a particular program in your path is located
Name and summary matches only, use “search all” for everything.
[~]$

どうやら,mlocateというパッケージをインストールせよ,ということです

[~]$ sudo yum -y install mlocate

これを実行すると,mlocateのver.0.22.2-4.el6がインストールされました.

しかし,ここでlocateを実行すると,

[~]$ locate
locate: 探すパターンが指定されていません
[~]$

というエラーメッセージが出ます. ファイルを検索するにあたって,findコマンドは,実行の度にディレクトリツリーを走査します.なので遅い. 一方locateコマンドは,あらかじめ作成したファイルの検索のためのデータベース(slocate.db)を用いてコマンド実行時に検索するため,findコマンドに比べて速いという特徴があります.

つまり,locateインストール直後はこのデータベースが作成されていないため,コマンドの実行ができません. 次に,データベースの作成を行います. そのコマンドは,updatedb.

[~]$ updatedb
[~]$

システム上のファイルサイズに依存するかと思いますが,1分程度で終了します. これだけ.

ちなみに,updatedbの実行時,こんなエラーが出ることがあります.

[~]$ updatedb
updatedb: `/var/lib/mlocate/mlocate.db’ 用の一時ファイルを開けません
[~]$

エラー文がわかりにくいの気付きが遅れますが,updatedbは管理者権限下で実行する必要があります.

上述したように,locateコマンドはあらかじめ作成したデータベース上からファイルの検索を行うため,例えば直前に作成したファイルといったようにデータベース上に未だ反映されていないファイルは検索結果に上りません. そのようなときは,再度updatedbを実行することでデータベースが更新されます. (通常,updatedbはクーロンによって定期的に実行される設定になっている)

以上.