Ubuntu Weekly Recipe

第145回manのさまざまな使い方

ここ数年でUbuntuの知名度もあがり、Web上にはさまざまなUbuntuの情報やノウハウが蓄積されてきました。検索エンジンを使えば、Web上の膨大な情報から手軽に情報を集めることができるため、わからないことがあるとついググってしまいがちです。しかし、Web上にある記事が、自分のシステムについて正しく解説をしているという保証はどこにもありません。それよりも自分のシステムに用意されたマニュアルの方が信用できるというものです。伝統的なUnixシステムにはmanpageと呼ばれるオンラインマニュアルが用意されています。システムにインストールされているコマンドの使い方や設定ファイルの記述方法は、このマニュアルページを参照することでだいたい解決ができるようになっています。

そこで今週のレシピは、伝統的なUNIXマニュアルのさまざまな読み方を紹介します。ググる前に一度manに目を通してみると、幸せになれるかもしれません。

端末でマニュアルを読む

もっとも基本的なmanの読み方は、端末でmanコマンドを使うことです。manコマンドの引数に読みたいマニュアルのページ名(コマンド名や関数名など)を渡すことで、そのマニュアルが端末内のページャで表示されます(ページャにはlessコマンドが使用されます⁠⁠。lessの使い方がわからない場合は、'h'キーを押してヘルプを確認しておきましょう。基本的な操作は、j/kで一行ずつ上下スクロール、d/uで半画面ずつ前後に移動、f/bで一画面ずつ前後に移動、/(スラッシュ)で検索、nで次を検索、Shift+nで前を検索、qで終了です。

マニュアルには章立てがあり、一般的には表にある8つの章にわけられています。manコマンドに章番号を渡せば、マニュアルを検索する章を限定することが可能になります。もしも同名のマニュアルが複数の章にあった場合でも、検索する章を限定することで意図しないマニュアルが表示されてしまうことを回避できるのです。

図1 端末でmanコマンドを実行すれば、ページャでマニュアルを読むことができます。が、使い勝手がいいとは言えません。
図1 端末でmanコマンドを実行すれば、ページャでマニュアルを読むことができます。が、使い勝手がいいとは言えません。
章を指定してマニュアルを読む例
$ man open      ← openvtコマンドのマニュアルが表示される(man 1 openと同等)
$ man 2 open    ← openシステムコールのマニュアルが表示される
$ man 3 open    ← C言語のopen関数のマニュアルが表示される
表1 マニュアルの章立て
1実行プログラムやコマンド
2システムコール
3ライブラリ関数
4スペシャルファイル
5ファイルのフォーマット(例えば /etc/passwd など)
6ゲーム
7マクロのパッケージ(例えば man(7), groff(7⁠⁠ など)
8システム管理用のコマンド

Emacsとwoman

端末でmanを読むことはできますが、これではあまりに不便です。そこで、みんな大好きEmacsの出番ですね。Emacsにはwoman[1]というmanを読むためのインターフェイスが用意されています。M-x womanを実行すると、ミニバッファに"Manual Entry:"というプロンプトが表示されますので、表示させたいマニュアル名を入力しましょう。もちろんTabやC-iでマニュアル名を補完することができます。

バッファに表示されたマニュアルは、当然C-nやC-vといったキーで読み進めることができますが、セクション単位で移動することもできます。一般的にマニュアルはSYNOPSIS、COPYRIGHT、DESCRIPTION、OPTIONSといったセクションにわけて記述がされており、バッファ上でn/pキーを押すことで、それぞれ前後のセクションの先頭へ直接ジャンプすることができます。gキーを押すとミニバッファにセクション名の入力が促され、任意のセクションへのジャンプができます。もちろんここでもセクション名をTabで補完できます。sキーはマニュアルの最後にある"See Also"セクションへジャンプします。See Alsoセクションにあげられているマニュアルにカーソルを合わせた状態でrキーを押せば、該当するマニュアルを別バッファに開くこともできます。関連する別のマニュアルをその場で参照したい時に役立つでしょう。

図2 なんでもできるEmacsは、当然マニュアルも読める。Emacsでコーディングをしているのなら、いちいち端末やブラウザを使わなくていいのは大きなメリット
図2 なんでもできるEmacsは、当然マニュアルも読める。Emacsでコーディングをしているのなら、いちいち端末やブラウザを使わなくていいのは大きなメリット

ブラウザでマニュアルを読む

man2htmlパッケージを利用することで、マニュアルをブラウザから見ることができます。man2htmlパッケージのインストールと同時にApache2 Webサーバがインストールされ、ローカルでWebサーバが起動します。インストールが完了したらFirefoxなどのWebブラウザを起動し、http://localhost/cgi-bin/man/man2htmlへアクセスしてみてください。

man2htmlパッケージのインストール
$ sudo apt-get install man2html

man2htmlでは、テキストボックスにマニュアル名を入力してマニュアルを検索できる他、セクションごとの全マニュアル一覧から、見たいマニュアルを探せます。常時起動しているであろうWebブラウザでマニュアルを閲覧できるのは、非常に便利と言えるでしょう。

図3 man2htmlのメイン画面。検索ボックスにマニュアル名を入力する際には、manコマンド同様に章を指定しての検索も可能
図3 man2htmlのメイン画面。検索ボックスにマニュアル名を入力する際には、manコマンド同様に章を指定しての検索も可能
図4 このように、ブラウザでマニュアルを表示できる。HTMLなので、当然ハイパーリンクも動作する
図4 このように、ブラウザでマニュアルを表示できる。HTMLなので、当然ハイパーリンクも動作する

マニュアルの全文検索

swish++というドキュメント検索システムを利用することで、man2htmlのページからマニュアルの全文検索を行うことが可能です。デフォルトの検索ボックスではマニュアル名でしか検索を行うことができませんが、swish++を使えば「特定のキーワードを含むマニュアル」をすべてピックアップできるようになります。そのためにはまずswish++パッケージをインストールしてください。

$ sudo apt-get install swish++

swish++をインストールしただけでは、正しくマニュアルを検索することはできません。この手のソフトウェアのお約束として、まず事前に検索用のインデックスを作成しておく必要があります。インデックスの更新を行う処理がman2htmlパッケージ側に用意されていますので、これを使用することにしましょう。

また、マニュアルの検索用インデックスを作成するスクリプトは /etc/cron.weekly/man2html で、CRONによって週次処理されるようになっています。インストールした直後はこのスクリプトを手動でキックすることでも、インデックスを構築することが可能です。

図5 swish++を使えばこのように、任意のキーワードで全マニュアルから検索を行えます。
図5 swish++を使えばこのように、任意のキーワードで全マニュアルから検索を行えます。

マニュアルをPDF化する

あまり知られていないかもしれませんが、manコマンドには'-t'というオプションがあります。これはマニュアルをtroffやgroffのデフォルト出力フォーマット(デフォルトではps)に整形して出力するオプションです。psで出力できるということは、ps2hogeコマンドにつなぐことで、任意のドキュメントとして出力させることができます。たとえばps2pdfコマンドを使用すれば、マニュアルをPDFにすることができます。

manの出力をPDFにする
$ man -t bash | ps2pdf - bash.pdf

画面上で端末とマニュアルのウィンドウを切り替えながら作業するのは効率が悪いので、マニュアルを印刷して手元に置いてしまうという人も多いでしょう。PDFにしておけば、きれいに印刷することも簡単ですね。しかし印刷した文字は電源がいらないというメリットはあるものの、検索することができないという問題もあります。

そこで、PDFのマニュアルをあえて手元のタブレット端末で読んでみるというのもアリかもしれません。PDFはiPadや電子書籍リーダに転送して読むことも可能ですし、特にiPadならば拡大縮小、ページ送りも快適です。

図6 manをPDF化してAdobe Readerで開いてみた。このまま印刷しても十分見やすい
図6 manをPDF化してAdobe Readerで開いてみた。このまま印刷しても十分見やすい
図7 PDFをiPadで表示してみた。スムーズに表示できるため、意外と読みやすい
図7 PDFをiPadで表示してみました。スムーズに表示できるため、意外と読みやすい

Kindleでマニュアルを読む

さて、Amazonが展開している電子書籍リーダにKindleがあります。KindleもPDFファイルを直接読むことが可能ですが、iPadのようにスムーズな拡大縮小はできず、またPDFは拡大した際に文字をリフローしてくれるわけではないため、左右スクロールが発生して非常に読みづらいのが正直な感想です。そこで、Kindleで使える電子書籍フォーマットの使用を検討してみましょう。

manコマンドには'-t'とよく似たオプションに'-T'があります。-Tオプションではデフォルトでpsが指定されているgroffの出力を、任意のデバイスに変更することができます。これを用いることで、マニュアルをHTMLに変換することが可能です[2]⁠。

AmazonはKindle向けに、opfやepub、htmlからmobi(mobipocket)形式に変換するプログラムであるkindlegenを公開しています。つまりmanコマンドでいったんHTMLファイルに書き出し、これをkindlegenに食わせることで、Kindleで読むのに適したマニュアルを作ることができるというわけです。

kindlegenはバイナリで配布されていますので、ダウンロードしたtarを展開してkindlegenをパス指定して起動しましょう。変換元のHTMLファイルを引数として渡せば、自動的に同名の.mobiファイルを書き出してくれます。

manをHTMLに書き出し、Kindle向けに変換する
$ man -Thtml bash > bash.html
$ ~/bin/kindlegen bash.html
図8 Kindle3でマニュアルを表示させてみた。さすが電子書籍端末だけあって、かなりの見やすさだ。もっとも、変換と転送の手間をを考えると微妙かもしれない
図8 Kindle3でマニュアルを表示させてみた。さすが電子書籍端末だけあって、かなりの見やすさだ。もっとも、変換と転送の手間をを考えると微妙かもしれない

おすすめ記事

記事・ニュース一覧