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 コマンドでファイルの情報をみたくなります。
そんなときどうしますか?
二つ方法があります。
`コマンド`」を使う方法
xargs コマンド」を使う方法
「`コマンド`」は、コマンドの出力を他のコマンドの引数にできてしまう方法です。
ですから、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