コマンド
man
オンラインマニュアルを表示する
最終更新 2019-01-09
UNIX/Linux では、基本的に全てのコマンドにオンラインマニュアルが用意されている。man コマンドはそのマニュアルを閲覧するためのコマンドである。また、コマンド以外にも、システムコールや設定ファイルなどのマニュアルも揃っている。
● man コマンドの基本的な使い方
例えば ls コマンドのマニュアルを読みたければ下記のようにすればよい。
また、コマンド名以外にも、システムコールやライブラリ、設定ファイルなどのマニュアルもある。
% man fopen
→ ライブラリルーチン fopen(3) のマニュアル
% man fstab
→ /etc/fstab のフォーマット説明
● man のセクションについて
コマンド・システムコール・ライブラリ・設定ファイルなどのマニュアルはセクションごとに分けられている。
1
コマンド (ls、cat、kterm など)
2
システムコール (C言語の関数。open、fork など)
3
ライブラリ関数 (C言語の関数。printf、fopen、Tck/Tk、Xlib などの関数群)
4
デバイス・デバイスドライバ
5
ファイルフォーマット (uuencodeなどのファイル形式、hostsなどの書式)
6
ゲーム
7
その他 (概要・慣習・環境変数の説明・groff の書式など)
8
システム管理 (各種デーモン、sendmail、mount*など)
9
新しく追加されたマニュアル(Tkなど?)
セクション番号を指定するには、FreeBSD や Linux では下記のようにする。
例えば ls はコマンドなので、セクションは "1" である。
fopen はライブラリ関数なので、セクションは "3" である。
なお、Solaris などの SystemV 系 UNIX では、マニュアルのセクションを指定する場合、-s オプションを付ける必要がある。
ただし、セクション名を省略すると、セクションを1から順に探していって、最初に見付かったマニュアルを表示する。そのため、
は、どちらもセクション番号を省略して
としてもよい。
しかし、異なるセクションに同じ名前のマニュアルが用意されている場合がある。例えば printf は、コマンドの printf (セクション1)、Cのライブラリの printf (セクション3) の
2種類があるので、セクションを指定せず
とすると、セクション1の printf コマンドのマニュアルが表示される。C の printf 関数のマニュアルを見るには、
とセクション名を明示しなければならない。他のセクションに同名のマニュアルがあるかどうかは、man -aw で調べるとよい。例えば、
% man -aw crontab
/usr/share/man/man1/crontab.1.gz
/usr/share/man/man5/crontab.5.gz
とすると、crontab にはセクション1 (crontab コマンドの説明) とセクション5 (cron の設定ファイルの書式) があることがわかる。
● man コマンドのオプション
-a 名前にマッチしたマニュアルを全て表示する
-d デバッグモード。マニュアルを探す過程を表示
-f whatis と同じ機能
-k apropos と同じ機能
-w 表示するマニュアルのフルパスを表示
-M マニュアルを検索するパスを指定
man から呼ばれるページャ (more や less) を変更したい場合、環境変数 PAGER で設定できる。当ページ管理人としては、やはり less (FreeBSD なら jless) をお勧めする。
Linux では下記となった (重複数が多い順)。
% find `manpath | sed 's/:/ /g'` -regex '.*man/man[0-9a-zA-Z].*' -type f | rev | awk -F/ '{print $1}' | rev | sed 's/\.[^\.]*\.gz$//' | sort | uniq -c | sort -nr | head -20
8 intro
5 time
5 locale
5 exit
4 write
4 wait
4 unlink
4 uname
4 umask
4 ulimit
例えば time がどのセクションにマニュアルがあるかは下記のように調べることができる。
% man -aw time
/usr/share/man/man1/time.1.gz
/usr/share/man/man1p/time.1p.gz
/usr/share/man/man2/time.2.gz
/usr/share/man/man3p/time.3p.gz
/usr/share/man/man7/time.7.gz
それぞれ以下が書いてある。
man1 の time は time コマンドのマニュアル
man1p の time は POSIX プログラマーズマニュアルの time コマンドのマニュアル
man2 の time はシステムコール time のマニュアル
man3p の time は POSIX プログラマーズマニュアルのライブラリルーチンのマニュアル
man7 の time は Linux における時刻管理の説明 (ハードウェアクロックやソフトウェアクロックなど)
しかし、普通に
とすると、man1 の time しか出てこない (他にもあるよと言ってくれればいいのにね)。
実はこれに加え、シェル (sh・bash・csh・tcsh) の内部コマンド time もあるが、ここには出てこないので、合計6個もある。特にセクション7 には概念などの説明があることが多いので、たまに man -aw で見えていないコマンドがないか調べてみるとよいだろう。
● man の結果をテキストファイルにする方法 (太字・下線とコントロールコード ^H の関係)
オンラインマニュアルをファイルに保存する方法を説明する。
などと man コマンドの出力リダイレクトしたとする。このファイルを cat や less コマンドなどで表示するとうまく表示されているように見えるが、vi や emacs などのエディタで見た場合、
コントロールコードが含まれているので下記のように表示されてしまうだろう。
N^HNA^HAM^HME^HE
l^Hls^Hs - list directory contents
これは、太字 (bold) や下線 (アンダーバー) を、
文字 a の後に ^H (Backspace) して、もう一度 a を出力すれば太字として表示
文字 a の後に ^H (Backspace) して、アンダーバー "_" 出力すれば a の下に下線を表示
というふうになっているからである。
これを普通のテキストに変換するには col コマンドを使う。
% man ls | col -b > ls.txt
● その他関連コマンド
FreeBSD・NetBSD・Solaris・Linux などは、日本語マニュアルが用意されている。jman の項を参照。
GNU の多くのコマンドは man ではなく info に詳細な情報が記載されている。man の方はメンテナンスされていないケースが多い。
読み方
man
(UNIXコマンド) [まん]
UNIX のマニュアル、あるいはマニュアルを閲覧するコマンド名。"MANual" の略。
「man command」と発音するとニヤニヤしだす人がたまにいるが、当ページ管理人はスルーしている。そういう人は「man co」で大喜びする。