覚えておくと便利なコマンド[locate]
Ubuntuでファイルの検索をしたいときはfind、locateの2つがあります。
findは実際にファイルを探し、locateはファイルのインデックスをあらかじめ作成しておいて、それを元に検索します。
なので速度の面から言えばlocate、新しいファイルへの対応はfindです。
まぁインデックスは1日に1回は自動更新されますし、普通はlocateでしょう。
$ locate yyyy
は
$ find / -name "yyyy" -print
と同じです。以降はlocateについてのみ書きます。
使い方は
$ locate [オプション] ファイル名
【オプション】
-d ディレクトリ名 : ファイル名データベースの代わりにディレクトリを指定
-c : ファイルリストを標準出力に出力する代わりにマッチするエントリ数を標準出力に出力
-i : 大文字/小文字に関係なくマッチしたファイルリストを標準出力に出力
です。
インデックス(Database)の手動更新は
$ sudo updatedb
です。これの自動更新のやり方としては
①cronで自動的に更新されるようにする(/etc/cron.daily/mlocate)
②/etc/rc.d/init.dにスクリプトを記載
の2通りあります。普通ならcronに最初から設定されていると思います。
ただcronの実行時間によっては全然更新されないということもありますので、一度実行時間を確認しておきます。
$ sudo emacs -nw /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
locateの自動更新はcron.dailyの中で定義されているので、cron.dailyに注目。
例として、昼12時2分に起動するように変更します。
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
2 12 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
コメントからも分かりますが、左から分、時間(24時間制)、日にち(day of the month)、月、曜日(day of the week)を表していて、それぞれのフィールドで*は、毎時間実行することを意味しています。
以上です。
◆locateコマンドのソフトウェア「mlocate」「findutils」
locateを使用できるソフトはいくつかありますが有名なのは「mlocate」「findutils」です。
自分が使っているものを確認するには
$ locate --version
mlocate 0.22.2
Copyright (C) 2007 Red Hat, Inc. All rights reserved.
このソフトウェアは GPL v.2 に基づいて提供されています。
などと表示されます。
通常はmlocateで十分です。mlocateはシステム全体をインデックスしても、ユーザーがアクセス可能なファイルだけが検索結果に出ます。つまり余分なものがなくて見やすいです。
ただまれにmlocateが出来ない環境(cygwin・仮想ホスト・ルート権限持ってない)が存在するので、その場合はfindutilsを利用するといいです。参考ページ→ファイル簡単検索にlocate コマンド。自分だけの検索インデックスを使う。
両方使いたい方は→mlocateとfind-utilsのlocateを使い分ける
まとめだけコピペすると
find-utils の locate をデフォルトで利用するには、以下のいずれかの作業を行う。
* もしもまだ locate を導入していないなら、apt-get install locate で OK
* すでに mlocate を導入しているなら、apt-get remove mlocate して apt-get install locate する
* または、remove しないで apt-get install locate して、update-alternatives --config locate でデフォルトの locate を設定する
◆デュアルブート等でWindows領域も検索したい場合
Ubuntuの場合、NTFSにてフォーマットしたパーティションは(Windowsとの)共有ディスクとして認識されます。
マウント先は/mediaの下です。
実はこのマウント先updatedbの対象外なので、Databaseの作成対象になりません。
Databaseの作成対象にするには以下のように設定ファイルを修正してください。
$ sudo emacs -nw /etc/updatedb.conf
[updatedb.conf]
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media" ← ここの/mediaを削除する
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs
:w
で、できるようになります。
ソース:
ファイル名検索コマンドlocateのデータベースの更新
cronの実行時間の変更