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

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

昼間の時間がどんどん長くなり、筆者の自宅の周辺でも田植えの準備が始まりました。世間一般には五月晴れの快適な季節ですが、サーバマシンを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といった引数が指定できる」ということはわかるものの、それぞれのオプションがどういう機能を果すのかはこのメッセージだけではわからないでしょう。

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

manページ

manページとは、man と呼ばれるオンラインマニュアル表示システムで表示されるオンラインドキュメントです。manページを表示するには、調べたいコマンドを引数として man コマンドに与えます。

lsコマンドのマニュアルをmanコマンドで表示
 % man ls
 LS(1)                                                       LS(1)
 
 NAME
        ls, dir, vdir - list directory contents
 
 SYNOPSIS
        ls [options] [file...]
        dir [file...]
        vdir [file...]
 
        POSIX options: [-CFRacdilqrtu1] [--]
 
        GNU  options  (shortest  form):  [-1abcdfghiklmnopqrstuvwxABCDFGHLNQRSUX]  [-w  cols]  [-T  cols]  [-I pattern]
        [--full-time]  [--show-control-chars]  [--block-size=size]  [--format={long,verbose,commas,across,vertical,sin
        gle-column}]            [--sort={none,time,size,extension}]            [--time={atime,access,use,ctime,status}]
        [--color[={none,auto,always}]] [--help] [--version] [--]
 
 DESCRIPTION
        The program ls lists first its non-directory file arguments, and then for each directory argument all  listable
        files contained within that directory. If no non-option arguments are present, a default argument `.' (the cur
 ....

manページで表示されるメッセージは /usr/share/man 以下に man1 や mann 等のディレクトリに整理されて配置されています。man1 や mann の1nはmanページの章分けを示し、1が一般ユーザ向けコマンド、2がカーネルのシステムコール、3がライブラリ関数、といった分類になっています。冒頭で挙げたlsの例で、1行目に表示されているLS(1) の(1)がこのmanページのセクションを示します。

man はUNIXの初期のころから存在するオンラインドキュメントシステムで、roffと呼ばれる形式で記述されています。roff形式はTeXなどと同じく整形用のコマンドを文書中に埋めこむマークアップ式のテキスト整形言語で、groff コマンドによってターミナルやPSプリンタなど出力先に応じた形式に整形することができます。man コマンドは表示すべきmanページを探し、groff や less を用いて出力結果を表示する機能を提供します。

ほとんどのmanページはソフトウェアの作者が記述してソースコードと共に配布しており、ソースコードやパッケージからインストールすれば自動的にmanページもインストールされます。ただし、日本語に翻訳されたmanページなどは元のソフトウェアとは独立にメンテナンスされており、別途パッケージをインストールしないと利用できないことがあります。また、翻訳版のmanページは最新のバージョンに追従できていないこともあるので注意が必要です。

infoシステム

manページに代わるオンラインドキュメントシステムとしてGNUプロジェクトが採用しているのがinfoシステムです。infoシステムはmanと同様、コマンド名を引数にして起動します。

 % info info
 File: info.info,  Node: Top,  Next: Getting Started,  Up: (dir)
 
 Info: An Introduction
 *********************
 
 The GNU Project distributes most of its on-line manuals in the "Info
 format", which you read using an "Info reader".  You are probably using
 an Info reader to read this now.
 
 ...
 * Menu:
 
 * Getting Started::             Getting started using an Info reader.
 * Expert Info::                 Info commands for experts.
 * Creating an Info File::       How to make your own Info file.
 * Index::                       An index of topics, commands, and variables.
 
 -----Info: (info.info)Top, 29 行 --All---------------------------------------------
 Info バージョン 4.8 にようこそ。? で使い方、m でメニュー項目を呼び出せます。

この例では info コマンドについてページを見ています。infoシステムは一種のハイパーテキスト形式で作成されており、専用のブラウザ(info コマンド)を用いて相互参照されている項目間を自由に移動しながら読み進めることができます。

GNUプロジェクトが提供しているソフトウェアではtexinfoと呼ばれるTeXのマクロを用いて記述されたドキュメント(拡張子はtexi)が用意されます。texinfo形式で記述されたドキュメントは、1つのファイルをTeXに通すことで印刷に適した形式に、makeinfo コマンドに通すことで info コマンドで閲覧できるオンラインドキュメントの形式に、それぞれ変換することが可能になっています。

infoシステムで表示されるページは /usr/share/info ディレクトリにまとめて保存され、インストールされているinfoファイルの一覧を登録した dir というファイルが同じディレクトリに用意されます。逆に言うと、/usr/share/infoディレクトリに新しくinfoファイルをインストールしても、/usr/share/info/dir というファイルにその情報を登録しないとinfoシステムからは利用できないということです。

通常、rpmなどのバイナリパッケージからソフトウェアをインストールすると、/usr/share/info/dir ファイルも自動的に更新されますが、ソースコードから手動でインストールした場合などは install-info コマンドで dir ファイルを更新しなければならないことがあります。

おすすめ記事

記事・ニュース一覧