ソースコード・リテラシーのススメ

第2回 Linuxのドキュメントいろいろ

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

昼間の時間がどんどん長くなり,筆者の自宅の周辺でも田植えの準備が始まりました。世間一般には五月晴れの快適な季節ですが,サーバマシンを24時間稼働させている自室では室温が30℃を超えることがあたりまえになり,これからの日々に戦々兢々としています。前回のソフトウェアに付属の文書類についての紹介に続き,今回はLinuxシステムに備わっている各種オンラインドキュメントシステムについて説明します。

前回紹介したソースコードに付属のドキュメントファイルはソフトウェアの詳細を知るには有効な資料ですが,コマンドを操作しながら「あのオプションはどういう風に指定したっけ…」といった疑問を解決するために調べるには大きすぎます。そのため,たいていのLinuxのコマンドにはそのコマンドの使い方を簡潔にまとめたオンラインドキュメントが付いています。

コマンドのヘルプメッセージ

最近のGNOMEやKDEといったデスクトップ環境においては,WindowsやMacOSと同じように,ほぼすべての処理をGUI環境から利用できるようになってきましたが,伝統的なUNIX/Linuxの世界では,コマンドはktermなどのターミナルから直接コマンド名を打ちこむことで実行するCUI(Character User Interface)形式になっています。

CUIの例(lsコマンドの実行)

 % ls
 ann-45.txt  ann-52.txt  ann-55.txt  ann-57.txt     answers-0829.txt
 ann-46.txt  ann-53.txt  ann-56.txt  answer-54.txt  answers-0926.txt

これらCUI形式のコマンドの多くは,引数を指定することでさまざまなオプション機能が利用できるようになります。

lsコマンドにオプションをつけてみる

 % ls -ms
 合計 44
 4 ann-45.txt, 4 ann-46.txt, 4 ann-52.txt, 4 ann-53.txt, 4 ann-55.txt, 4 ann-56.txt, 4 ann-57.txt, 
 4 answer-54.txt, 4 answers-0829.txt, 8 answers-0926.txt

上記の例では -ms がオプション機能を指定するための引数で,本来は1文字で指定する -m オプションと -s オプションをまとめて指定しています。各オプションの意味は -m 「項目をカンマで区切って1行に詰め込む」,-s 「ブロック単位で各ファイルサイズを表示する」という意味になります。

このようにUNIX/Linuxの伝統的なコマンドは,引数によって動作をさまざまに切り替えることが可能ですが,どのような機能が使えるのか,またその機能を利用するための引数が何かは,コマンドごとに異なっています。そのような多様な機能や引数を憶えておくことはとてもできませんから,たいていのコマンドにはヘルプ機能が付いていて,-h --help を指定することで,機能や引数の指定方法に関する簡単な解説が表示されるようになっています。

lsに--help オプションをつけて実行した例

 % ls --help
 使用法: /bin/ls [オプション]... [ファイル]...
 指定されたファイルの情報をリスト出力する(指定なければ現在のディレクトリ).
 -cftuSUX や --sort の指定がなくても,アルファベット順で整列する.
 
 長いオプションに必須の引数は短いオプションにも必須です.
   -a, --all                  do not hide entries starting with .
   -A, --almost-all           do not list implied . and ..
       --author               print the author of each file
   -b, --escape               print octal escapes for nongraphic characters
 ....
 使うと --color=always を使うのと同等です。 --color=auto を使えば,接続された
 端末(tty)の標準出力にのみカラーコードを出力します。
 
 バグを発見したら <bug-coreutils@gnu.org> 宛に報告して下さい.
 %

従来,UNIXのコマンドラインオプションは「すべて(all)」の場合は -a 「詳しく(verbose)」の場合は -v など,その機能を意味する単語の先頭1文字で指定するのが流儀でしたが,コマンドの機能が豊富になってくるにつれ1文字で区別するのが困難になり,最近ではハイフンを2つつけて --all --verbose のように機能を単語で指定する流儀が一般的になってきました。上記lsの例でも, -a --all -b --escape は同じ動作を意味しています。

ヘルプメッセージでは「コマンド名は知っているものの,その使い方がわからない」というときに参照することを想定して,コマンドが提供する各機能と,それを指定する引数についての情報を中心に解説することが一般的です。ヘルプメッセージはコマンドそのものに埋めこまれるため,どれだけの情報を盛り込むかはそのコマンドの作者に任せられており,先に示した ls のように詳しいヘルプメッセージが出力されるコマンドもあれば /sbin/mkswap のようにどういう引数が指定可能かを示すだけのコマンドもあります。

mkswap(swapファイルを作るコマンド)の場合

 $ /sbin/mkswap -h
 Usage: mkswap [-c] [-v0|-v1] [-pPAGESZ] [-L label] /dev/name [blocks]

この例では「mkswapというコマンドには/dev/nameという引数が必須で,それ以外にも-c-v0といった引数が指定できる」ということはわかるものの,それぞれのオプションがどういう機能を果すのかはこのメッセージだけではわからないでしょう。

ヘルプメッセージは正規表現を流用して表現され,[-c][-pPAGESZ]のように [ ](角カッコ)で囲まれたオプションは必須ではないオプションを意味し,省略すれば適当なデフォルト値が利用されます。[-v0|-v1]-v0あるいは (|) -v1 を指定可能,指定しないことも可能」という意味になります。[ ]で括られていない /dev/name は必須のオプションを意味し,mkswapコマンドは最低1つの引数(swapを作るデバイス名)を取ることを意味しています。

なお,これらのヘルプメッセージはコンパイルされたコマンドに組み込まれているため,ヘルプメッセージを別途インストールするような作業はしなくても利用できます。

厳密に言うと,最近のヘルプメッセージはCライブラリのNLS(Native Language Support)機能を用いて,各言語ごとのカタログファイルとしてコマンドとは別に用意されています。ディストリビューションによっては,インス トールするカタログファイルをよく使う言語のみに限定していることもあります。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたのが,いつの間にかミイラ取りがミイラになってOSSを仕事にするようになってしまいました。最近はスペシャリスト養成を目的とした専門職大学院で教壇に立ったりもしています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入