xserver
Home クッキー及びWeb ビーコンについて



ファイル/ディレクトリの検索

ファイル/ディレクトリの検索

 ここでは、ファイルやディレクトリの検索について説明していきます。人間という生き物は、忘れる動物です。おっと…こんな堅苦しい説明はぬきにしましょう(^▽^;) どのOS を使用するにしろ、ファイルを検索する機能は欠かせないものです。ここでは、主に、locate コマンドと、find コマンドについて解説していきます。




■データベース内から検索 [ locate ]

 まず、簡単な検索コマンドである、locate コマンドについて解説します。locate コマンドは、あらかじめ作成されているデータベースを参照して、ファイル及びディレクトリを検索するコマンドです。既にデータベースが作成されている中から検索をかけるため、後述する find コマンドよりも高速に特定のファイルを見つけ出す事ができます。ただし、欠点もあります。それは、データベースが最新版でなければ、検索にひっかからないということです。なので、新規にファイルやディレクトリを作成したり、ソフトウェアをインストールした際には、いちいち updatedb コマンドを使用して、データベースを最新の状態にしておく必要があります。また、その逆も考えられます。データベースが最新でないと、既に削除したファイルなのに、検索するとマッチしてしまいます。そこで、実際に見てみるとそのファイルは存在しなかったというパターンもよくある話です。もし、現在の状態からファイルを検索したいのなら、find コマンドを使用する事になります。



 なお、現在では、locate コマンドは、slocate コマンドへシンボリックリンクが貼られているため、実際には、slocate コマンドを実行していることになります。slocate コマンドは、データベース内に所有者情報やパーミッションの情報も含まれるため、読み取り権限のないユーザーなどが locate コマンドを実行しても検索にはひっかからないようになっています。これによって、よりセキュリティが向上してします。因みに、slocate データベースは、/var/lib/slocate/slocate.db に格納されています。

# ls -la /usr/bin/locate
lrwxrwxrwx 1 root slocate 7 2月 3 04:33 /usr/bin/locate -> slocate

 それでは、実際に解説に移ります。まず、updatedb コマンドを使用してデータベースを最新状態に更新します。なお、updatedb コマンドを使用できるのはスーパーユーザーのみです。

# updatedb

 updatedb をバックグラウンドで実行するには、& を付け加えます。

# updatedb &

 なお、updatedb コマンドは、cron によって1日に1回、シェルスクリプトによって定期的に実行されるようになっています。

# cat /etc/cron.daily/slocate.cron

#!/bin/sh
renice +19 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "nfs,smbfs,ncpfs,proc,devpts" -e "/tmp,/var/tmp,/usr/tmp,/afs,/net"

 updatedb コマンドの処理が終えたら、ようやく、locate コマンドを使って検索できるようになります。なお、2度目にupdatedb コマンドを使用する場合には、一度目より早く終了します。以下例は、httpd.conf にマッチするファイルが検索されます。

# locate httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf.bak

 locate コマンドは、ワイルドカード「*」を使用する事もできます。

# locate *td.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf.bak
/etc/xinetd.conf

■/etc/updatedb.conf

 updatedb の設定ファイルは、/etc/updatedb.conf で設定します。updatedb コマンドは、この設定ファイルがないと、CD-ROM内のファイルや、/tmp フォルダなどの一時的に作成されるファイルまでデータベースに含めてしまいます。しかし、CD-ROMなどのファイルまでデータベースに含めてしまうと、CD-ROMを取り除いたときには、存在しないファイルとして検索される事になってしまいます。この問題をさけるために、このupdatedb.conf ファイルで updatedb の対象から除外するファイルシステム、もしくは、ディレクトリへのパスを記述しておきます。記述の仕方は単純で、変数を定義し、それを適用するために、export コマンドを記述しておくだけです。もし、ここで指定されていないもので、updatadb コマンドの対象からはずしたいものがあれば、追記しておくとよいでしょう。

PRUNEFS="devpts NFS nfs afs sfs proc smbfs autofs auto iso9660"
PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /net /sfs"
export PRUNEFS
export PRUNEPATHS



■ファイル/ディレクトリの詳細検索 [ find ]

 find コマンドは、指定したディレクトリ以下のファイルやディレクトリを検索します。locate コマンドのようにデーターベースファイルは存在せず、コマンド実行時より検索しにいくため、ディスクアクセスが激しくなります。その代わり、locate よりも詳細に目的のものを検索できるという利点があります。

 以下例は、/etc ディレクトリ以下の conf というファイル名のファイルを検索しています。locate コマンドと異なる点は、locate では、conf という文字列を含むファイルを全て列挙しましたが、find コマンドの場合は、conf というファイル名をもつ完全一致のファイルが検索されます。もし、locate コマンド風に検索するならば、find /etc -name *conf* となります。

$ find /etc -name conf
/etc/log.d/conf

 次に、-atimeオプションをつけて最終アクセス日を基にして検索してみます。以下は、カレントディレクトリ内で最終アクセス日7日以内のファイルを検索します。+7 にすると、7日以上経過したファイルを検索するようになります。

$ find ~ -atime -7

 以下の例は、アクセス権が755のファイルのみ検索します。

$ find /home -perm 755

 -name <文字列> 文字列を含むファイルを検索
 -atime <日数> 最終アクセス日で検索
 -mtime <日数> 最終更新日で検索
 -perm <アクセス権> 8進数のアクセス権表記で検索
 -size <サイズ> ブロック単位のファイルサイズで検索
 -type ファイルタイプで検索
 -user <ユーザ名> ファイルの所有者で検索
 -empty <ファイル名> 空の(容量が0バイト)のファイルやディレクトリを検索する

 なお、アクションとして、-exec <コマンド> {} \; を指定する事で、検索結果のファイルにコマンドを実行する事ができるようになります。以下例は、容量が0バイトのファイルやディレクトリを検索し、削除するという意味になります。

$ find . -empty -exec rm {} \;







TOPに戻る

Sponcerd Link


Search
 
Web サイト内
Rental Server

【レンタルサーバのXbit】 低価格・高品質のビジネスクオリティー。300メガ1,050円~30分で サービススタート可能!


容量300MB、月額125円、高性能なサーバが日本最大級のバックボーンに直結。
さくらのレンタルサーバ



当サイトはLinux自宅サーバーの構築を目的としたサイトです。
当サイトに関するご意見、ご要望等は、こちらのメールアドレスよりお願いします。
Beginning | Introduction | Installation | Server |
Security | Tips | Related-Sites
Copyright©2003-2006 KORO All Rights Reserved.
総計:
今日:
昨日: