RedHat-Linuxメモ
グループについて
syslogデーモンについて
rpmコマンドをアップデートする
E-IDEのHDDを増設する
opensshをインストールする
opensshをインストールする その2
Real Server Basicをインストールする
リモートマシンのバックアップをとる
locate
RedHat-Linuxには、locateコマンドがある。通常、コマンドのある場所を調べるときには、whereisコマンドを使って、
$ whereis perl
perl: /usr/bin/perl5.003 /usr/bin/perl /usr/local/bin/perl /usr/man/man1/perl.1
|
などとするが、whereisコマンドの場合、ある特定のディレクトリだけが対象となり、ドキュメントなどコマンド以外のものは探し出せない。しかし、locateコマンドはコマンド以外のファイルはもちろん、ディレクトリの名前なども対象とすることができるので、便利だ。locateコマンドを使って、「perl」を探してみると。
$ locate perl
/home/oohashi/public_html/link/perlcgi.shtml
/usr/bin/find2perl
/usr/bin/perl
/usr/bin/perl5.003
/usr/bin/perldoc
/usr/bin/sperl5.003
/usr/bin/suidperl
/usr/doc/samba-1.9.16p11-3rh/examples/misc/wall.perl
/usr/lib/perl5
/usr/lib/perl5/abbrev.pl
/usr/lib/perl5/AnyDBM_File.pm
(略)
/var/lib/ezinst/installed/jperlbin
/var/lib/ezinst/installed/jperllib
/var/lib/ezinst/installed/jperlman
/var/lib/ezinst/scripts/jperlbin.p
|
といったように、ディレクトリ名も含めて、「perl」という文字列を含んだものをすべてリストアップする。とくにディレクトリ名に該当する文字列があった場合は、そのディレクトリにあるすべてのファイルをリストアップするので、むしろ膨大な数になってしまう。
これだけのものをサーチするのだから、時間がかかるように思われるかもしれないが、実際はかなり高速だ。その秘密は、locateは専用のデータベースを持って、そのデータベース内をサーチしているからだ。
locateのデータベースは、1日に一回更新されるようになっている。「/etc/cron.daily」にある「updatedb.cron」というシェルスクリプトが、cronコマンドを使って自動的に実行されるようになっている。
#!/bin/bash
umask=022
die ()
{
echo "$*" 1>&2
exit 1
}
su nobody -c "/usr/bin/updatedb --output=/tmp/locatedb.$$ --localpaths='/' --pru
nepaths='/tmp /var/tmp /usr/tmp /afs' --netpaths='' 2>/dev/null"
if [ -f /tmp/locatedb.$$.n ] ; then
SFILE=/tmp/locatedb.$$.n
else
SFILE=/tmp/locatedb.$$
fi
mv $SFILE /var/lib/locatedb || \
die "$0: could not create /var/lib/locatedb"
chown root.root /var/lib/locatedb || \
die "$0: could not change ownership of /var/lib/locatedb"
exit 0
|
したがって、一日に一回実行されるこの更新以後に行なわれたファイル(およびディレクトリ)の作成や変更、削除は、データベースに反映されていない。そうしたファイルをも対象にしたいときは、データベースを意図的に更新しておく必要がある。
locateのデータベースを更新するには、cronで実行される「/etc/cron.daily/updatedb.cron」を実行すればいい。ただし、実行はrootで行なう必要がある。
|
# /etc/cron.daily/updatedb.cron
|
あるいは、
# cd /etc/cron.daily
# ./updatedb.cron
|
実行するとしばらくなにも反応がなくなる。データベースを更新しているからだ。プロンプトが返ってきたら、更新終了だ。
whereisコマンドが対象とするディレクトリ
/bin
/usr/bin
/etc
/usr/sbin
/usr/games
/usr/games/bin
/usr/emacs/etc
/usr/lib/emacs/19.22/etc
/usr/lib/emacs/19.23/etc
/usr/lib/emacs/19.24/etc
/usr/lib/emacs/19.25/etc
/usr/lib/emacs/19.26/etc
/usr/lib/emacs/19.27/etc
/usr/lib/emacs/19.28/etc
/usr/lib/emacs/19.29/etc
/usr/lib/emacs/19.30/etc
/usr/TeX/bin
/usr/tex/bin
/usr/interviews/bin/LINUX
/usr/bin/X11
/usr/X11/bin
/usr/X11R5/bin
/usr/X11R6/bin
/usr/X386/bin
/usr/local/bin
/usr/local/sbin
/usr/local/games
/usr/local/games/bin
/usr/local/emacs/etc
/usr/local/TeX/bin
/usr/local/tex/bin
/usr/local/bin/X11
|
|