Ubuntu Weekly Recipe

第24回 デスクトップサーチ:ファイルの検索・Hyper Estraier・Google Desktop

この記事を読むのに必要な時間:およそ 3 分

同じマシンを使って日常的な作業を続けていくと,ホームディレクトリの中に多くのファイルが蓄積されていきます。また,「設定ファイル名は覚えているが,それがどのディレクトリに格納されているか分からない」といった問題に遭遇することもあるでしょう。このような場合,利用しているマシン内を適切に検索するのが一番です。今回はこうした,デスクトップ環境向けの検索アプリケーションに関するレシピをお届けします。

GNOMEの「ファイルの検索」機能

Ubuntuでは,GNOME標準の検索機能を利用することで,ファイル名での検索を行うことができます。[場所][ファイルの検索]からアクセスするか,「ファイルの検索」というアプレットを追加し,パネルから起動するのが便利でしょう図1)。アプレットの追加方法は,第9回を参照してください。

図1 ファイルの検索アプレット

図1 ファイルの検索アプレット

アプレットの使い方は非常に単純で,[対象となる名前]欄に検索したいファイル名を入力し,[対象となるフォルダ]を選択して[検索]ボタンを押すだけです。図2では,ファイルシステム全体に対して,「resolv.conf」というファイル名を検索しています。

図2 「resolv.conf」というファイルの検索

図2 「resolv.conf」というファイルの検

検索を行う場合,ファイル名だけでなく,ファイルの中身を考慮して検索したい場合があります。そのような場合は,「追加オプション」の指定を行うことで実現できます。図3では,「resolv.conf」というファイル名で,なおかつ,「nameserver」という文字列を含むファイルを検索しています。(図2)の結果と異なり,/usr/share/man/man5/resolv.conf.5.gzが検索結果に含まれていないことが分かるでしょう。

図3 「nameserver」という文字列を含むファイルの検索

図3 「nameserver」という文字列を含むファイルの検

さらに,「適用する検索条件」を指定することで,より細かな検索を行うことができます。デスクトップ用途向けOSが標準で備える検索機能としてはごく標準的なものですが,Nautilus(ファイルマネージャ)組み込みの検索に比べると,かなり複雑な検索も行うことができます。

図4 その他の検索条件

図4 その他の検索条件

GNOMEの検索機能はfindコマンドのフロントエンドですので,これらの検索は内部ではfindコマンドを呼び出すことで実現されています。同じように手で入力することで,端末からも同じ結果を得ることができます。

たとえばファイル名だけの検索であれば,[端末]上で次のように操作することと同義です。

$ find / -iname *resolv.conf* -xdev -print
/etc/resolv.conf
/etc/ppp/resolv.conf
/usr/share/man/man5/resolv.conf.5.gz
/usr/share/ubuntu-docs/ubuntu/sample/resolv.conf

また,「nameserver」という文字列を含む検索は次のようになります。

$ find / ( -iname *resolv.conf* -o -iname .*resolv.conf* ) ! -type p -exec grep -i -c nameserver {} ; -xdev -print
/etc/resolv.conf
/etc/ppp/resolv.conf
/usr/share/ubuntu-docs/ubuntu/sample/resolv.conf

もっとも,単に「resolv.conf」という名前のファイルを探したいのであれば,次のようにlocateコマンドを使った方が便利で高速です。

$ locate resolv.conf
/etc/resolv.conf
/etc/ppp/resolv.conf
/usr/share/man/man5/resolv.conf.5.gz
/usr/share/ubuntu-docs/ubuntu/sample/resolv.conf

また,「nameserver」の文字列を含むファイルを得たいのであれば,egrep -lとlocateコマンドを組み合わせれば,findを使うよりも小さなコストで同じようなことができるでしょう注1)。

$ egrep -l nameserver `locate resolv.conf`
/etc/resolv.conf
/etc/ppp/resolv.conf
/usr/share/ubuntu-docs/ubuntu/sample/resolv.conf
注1)

locateは最近更新されたファイルを見つけることはできませんし,/tmp等にあるファイルはヒットしません。完全に同じわけではないことに注意してください。ファイルの性質によって使い分ける必要があります。

なお,findコマンドを用いる場合,ディレクトリ全域を都度走査する必要があるため,システムによってはかなり「重く」なるでしょう(一度走査した後はディレクトリエントリキャッシュに入りますので,二度目以降の検索はそれほど時間がかからなくなります)。対して,locateコマンドは事前にインデックスを作成して検索するため,非常に高速に検索が終了します。

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

コメントの記入