■ locate って便利

locate コマンド使っていますか? ファイルを探すときに locate はとても便利です。 「あのファイルはどこだっけ?」というときに

$ locate rplay.conf
/usr/etc/rplay.conf
/usr/man/man5/rplay.conf.5.gz
/var/catman/cat5/rplay.conf.5.gz
とすぐ探せます。 もし、何度も試行錯誤的にファイル名であれこれ探したい場合、find コマンドでは遅くていろいろできませんよね。 特に最近はディスクも大きくなってきています。

この locate は、GNU の findutils に含まれているものです。

$ rpm -q -f /usr/bin/locate
findutils-4.1-11

ここで rpm というパッケージ管理コマンドを使用しています。 Vine Linux や TurboLinux に RedHat、SuSE などで使用されているものです。 なかなか便利なものです。

ちなみに Z shell なら

$ rpm -q -f =locate
findutils-4.1-11
と「=」でコマンドを指定するとフルパスになります。

■ 情報収集

動作の原理としては、ファイル名のデータベースを作成して、そこから情報を引っ張り出しています。 このため、データベースの情報が最新でない場合には、「あるファイル」もみつかりません。 Linux では、設定として深夜 1:00 に cron によってこのデータベースが作成されています。 深夜使っているとディスクが「ガラガラ」いいだすことはありませんか? そのときにデータベースを作成しているんです。

毎晩、深夜 1:00 に作成している場合はいいのですが、もしこの時間帯に動作していないときには root で次のコマンドをどうぞ。

# /etc/cron.daily/updatedb.cron
また、kernel に APM を組み込んで、shutdown すると自動的に電源が切れるシステムでは、次のようにすると便利かも。
# /etc/cron.daily/updatedb.cron; sync; sleep 3; sync; shutdown -h now
これで、一日の作業をちゃんと反映させてから電源を切ることができます。 便利便利。

余談ですが、データベースを作成するときに、Win95 のディスクを mount しておくと Win95 のファイルを探すのに使えます。

■ 便利な使い方

locate は、シェルを使っているのワイルドカードが使えます。

$ locate '*.wav'
これで、拡張子「wav」のファイルを拾いだすことができます。 このとき、シェルが「*」を解釈してしまわないように「'」で囲んでください。

少しややこしい場合には、grep などと組み合わせるのがいいと思います。

■ さらに便利な使い方

locate コマンドが出力するのはファイル名です。 ファイル名ときたら ls -l コマンドでファイルの情報をみたくなります。 そんなときどうしますか?

二つ方法があります。

`コマンド`」は、コマンドの出力を他のコマンドの引数にできてしまう方法です。 ですから、locate で出力されたファイル名を ls コマンドにそのまま渡すことができます。

$ ls -l `locate '*/locatedb'`
-rw-r--r--   1 root     root      1414841 May 14 02:51 /var/lib/locatedb

このほか、出力がすごく多い場合には xargs というコマンドも使えます。 xargs はよく find コマンドと組み合わせて使われます。 これは、ファイル名などがあまりに多い場合に、適当な量に区切ってコマンドを実行してくれるためです。 UNIX では、コマンド系のマニュアルのファイル名の一番最後は「.1」となります(マニュアルだけではないですけど)。 数がかなりのものになるので、「`」では展開できない場合があります。 このようなときに xargs を使うと便利です。

$ locate '*/man1/*.1' | xargs ls -l


渡辺哲也(WATANABE Tetsuya): Tetsuya.WATANABE atmark nifty.com