同じマシンを使って日常的な作業を続けていくと、ホームディレクトリの中に多くのファイルが蓄積されていきます。また、「 設定ファイル名は覚えているが、それがどのディレクトリに格納されているか分からない」といった問題に遭遇することもあるでしょう。このような場合、利用しているマシン内を適切に検索するのが一番です。今回はこうした、デスクトップ環境向けの検索アプリケーションに関するレシピをお届けします。
GNOMEの「ファイルの検索」機能
Ubuntuでは、GNOME標準の検索機能を利用することで、ファイル名での検索を行うことができます。[ 場所] →[ ファイルの検索]からアクセスするか、「 ファイルの検索」というアプレットを追加し、パネルから起動するのが便利でしょう(図1 ) 。アプレットの追加方法は、第9回 を参照してください。
図1 ファイルの検索アプレット
アプレットの使い方は非常に単純で、[ 対象となる名前]欄に検索したいファイル名を入力し、[ 対象となるフォルダ]を選択して[検索]ボタンを押すだけです。( 図2 )では、ファイルシステム全体に対して、「 resolv.conf」というファイル名を検索しています。
図2 「 resolv.conf」というファイルの検索
検索を行う場合、ファイル名だけでなく、ファイルの中身を考慮して検索したい場合があります。そのような場合は、「 追加オプション」の指定を行うことで実現できます。( 図3 )では、「 resolv.conf」というファイル名で、なおかつ、「 nameserver」という文字列を含むファイルを検索しています。( 図2)の結果と異なり、/usr/share/man/man5/resolv.conf.5.gzが検索結果に含まれていないことが分かるでしょう。
図3 「 nameserver」という文字列を含むファイルの検索
さらに、「 適用する検索条件」を指定することで、より細かな検索を行うことができます。デスクトップ用途向けOSが標準で備える検索機能としてはごく標準的なものですが、Nautilus(ファイルマネージャ)組み込みの検索に比べると、かなり複雑な検索も行うことができます。
図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コマンドは事前にインデックスを作成して検索するため、非常に高速に検索が終了します。
Hyper Estraierを使う
UbuntuにはデフォルトでTrackerというデスクトップ検索エンジンが導入されていますが、日本語を認識して検索することができないため、日本語ドキュメントを主に扱う場合にはあまり使い勝手が良いものではありません。
コマンドラインから利用でき、日本語周りの問題が少ない(かつ、検索精度が高い)選択として、Hyper Estraier を利用する方法があります。
パッケージ名は「hyperestraier」ですので、aptやSynapticなどを用いてインストールしてください。aptを用いたインストールは次のように行います。
$ sudo apt-get install hyperestraier
インデックスの作成
Hyper Estraierの利用には、最初にインデックスを作成する必要があります。次のように、/home以下に専用のディレクトリを作ってしまうのが便利でしょう。最初にインデックス格納領域を作成して、必要なドキュメントの情報をインデックスに格納します[2] 。インデックス作成コマンドを覚えるのは面倒ですので、シェルスクリプトを作成し、それを呼び出すようにすると便利でしょう。
まず、シェルスクリプトを格納するディレクトリを作成します。
$ mkdir ~/bin
$ gedit ~/bin/estgather.sh
次のコードをegdit上にコピー&ペーストし、保存します。
#!/bin/bash
for i in `/bin/ls -d ~/* /usr/share/doc*/ /usr/local/doc*/ /opt/*/doc/`
do
/usr/bin/nice -n 19 estcmd gather -cl -il ja -sd -cm ~/.est/casket "${i}"
done;
exit 0
インデックス(casket)の保存ディレクトリを作成し、先ほど準備したシェルスクリプトに実行権限を与え、インデックス作成を行います。ディレクトリ以外が対象の直下に存在した場合などにエラーが返りますが、無視してください(あるいは検索指定をより細かく行ってください) 。
$ mkdir .est/
$ chmod +x ~/bin/estgather.sh
$ ~/bin/estgather.sh
インデックスを作成したら、以下のコマンドで検索が可能になります。以下は「pygtk」を検索した例です。
$ estcmd search -nl -vh -max 2 ~/.est/casket pygtk
--------[0ED68D6F50F57080]--------
VERSION 1.0
NODE local
HIT 1
HINT#1 pygtk 1
TIME 0.000383
DOCNUM 2419
WORDNUM 75566
VIEW HUMAN
--------[0ED68D6F50F57080]--------
URI: file:///usr/share/doc/python/faq/gui.html
Title: Graphic User Interface FAQ
Graphic User Interface FAQ Date: 2003-09-04 Version: 6607 Web site: http://www.python.org/ Conte ... uting and a Qt license from Trolltech . 1.1.4 GTk+ PyGTk bindings for the GTk+ toolkit have been implemente ...
--------[0ED68D6F50F57080]--------:END
このままでは検索コマンドを覚えるのが大変ですので、次のようなエイリアスを.bashrcなどに記述するのが良いでしょう[3] 。
alias est_search="estcmd search -nl -vh -max 2 ~/.est/casket"
エイリアスを登録したら、次のように利用することができます。
$ est_search 日本語 Ubuntu
また、登録したインデックスは古くなりますので、定期的にインデックスを更新する必要があります。「 VISUAL=gedit crontab -e 」で、次のような更新指定を登録しておくのが便利です。もちろんviやnanoに慣れている方はcrontab -eで問題ありません。
# m h dom mon dow command
00 */12 * * * ~/bin/estgather.sh > /dev/null 2>&1
[2] Wineの設定ディレクトリ(~/.wine)をインデックス対象に含めると、インデックス作成が無限ループしてしまいます。筆者は~/直下に日常的なファイルを置くことを嫌うため、ここでは~/以下のディレクトリのみを検索対象として登録しているので問題ありませんが、もしも検索対象を自分で指定する場合には注意してください。
Google Desktopの利用
代表的なデスクトップサーチアプリケーションの一つであるGoogle DesktopをUbuntuで利用することもできます。http://desktop.google.com/ja/linux/にアクセスし、Debian/Ubuntu用のパッケージをダウンロードしてください(図5 ) 。
図5 Google Desktopのダウンロード
ダウンロードしたファイルをダブルクリックすればダイアログが開きますので、[ パッケージのインストール]ボタンを押下することでインストールできます(図6 ) 。インストール後は[アプリケーション] →[ Google デスクトップ] →[ Google デスクトップの設定]で初期設定を行ってください。
図6 GDebiによるインストール
[アプリケーション] →[ Google デスクトップ]とたどり、通知領域にあるアイコンから操作を行います。Googleの通常の検索と同じ形で検索を行うことが可能です。一般的なデスクトップ用途であれば便利に利用できるでしょう。