UNIX/Linuxの部屋 コマンド:man

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド man オンラインマニュアルを表示する このエントリーをはてなブックマークに追加

最終更新


UNIX/Linux では、基本的に全てのコマンドにオンラインマニュアルが用意されている。man コマンドはそのマニュアルを閲覧するためのコマンドである。また、コマンド以外にも、システムコールや設定ファイルなどのマニュアルも揃っている。


man コマンドの基本的な使い方
例えば ls コマンドのマニュアルを読みたければ下記のようにすればよい。
% 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 では下記のようにする。
% man セクション名 マニュアル名

例えば ls はコマンドなので、セクションは "1" である。
% man 1 ls
fopen はライブラリ関数なので、セクションは "3" である。
% man 3 fopen

なお、Solaris などの SystemV 系 UNIX では、マニュアルのセクションを指定する場合、-s オプションを付ける必要がある。
% man -s 3 fopen

ただし、セクション名を省略すると、セクションを1から順に探していって、最初に見付かったマニュアルを表示する。そのため、
% man 1 ls
% man 3 fopen
は、どちらもセクション番号を省略して
% man ls
% man fopen
としてもよい。

しかし、異なるセクションに同じ名前のマニュアルが用意されている場合がある。例えば printf は、コマンドの printf (セクション1)、Cのライブラリの printf (セクション3) の
2種類があるので、セクションを指定せず
% man printf
とすると、セクション1の printf コマンドのマニュアルが表示される。C の printf 関数のマニュアルを見るには、
% man 3 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) をお勧めする。

同名・重複 man がどれだけあるかをチェックする方法 【2019/01/09追加】
UNIX/Linux には、同名のマニュアルが山ほどある。下記コマンドにて man の名前が同じだが、セクションが違うマニュアルをリストアップしてみた (どこの環境でも正しく動く自信はない)。

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 における時刻管理の説明 (ハードウェアクロックやソフトウェアクロックなど)

しかし、普通に
% man time
とすると、man1 の time しか出てこない (他にもあるよと言ってくれればいいのにね)。

実はこれに加え、シェル (sh・bash・csh・tcsh) の内部コマンド time もあるが、ここには出てこないので、合計6個もある。特にセクション7 には概念などの説明があることが多いので、たまに man -aw で見えていないコマンドがないか調べてみるとよいだろう。

man の結果をテキストファイルにする方法 (太字・下線とコントロールコード ^H の関係)
オンラインマニュアルをファイルに保存する方法を説明する。
% man ls > ls.txt
などと 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

man の結果を PostScript ファイルにする方法
オンラインマニュアルを PostScript ファイルにするには、
% gzcat /usr/share/man/man1/ls.1.gz | groff -man > ls.ps
とすればよい。

bash の内部コマンドのマニュアルを簡単に見る方法
bash の内部コマンドのマニュアルは、help コマンドを使うと簡単に表示できる。
% help if

その他関連コマンド
FreeBSD・NetBSD・Solaris・Linux などは、日本語マニュアルが用意されている。jman の項を参照。

GNU の多くのコマンドは man ではなく info に詳細な情報が記載されている。man の方はメンテナンスされていないケースが多い。
>> Linuxオンラインマニュアル(man) Linux man(1)
>> Linuxオンラインマニュアル(man) Linux man(7)
>> Solaris10オンラインマニュアル(man) Solaris10 man(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD man(1)

読み方 man (UNIXコマンド) [まん] このエントリーをはてなブックマークに追加

UNIX のマニュアル、あるいはマニュアルを閲覧するコマンド名。"MANual" の略。

「man command」と発音するとニヤニヤしだす人がたまにいるが、当ページ管理人はスルーしている。そういう人は「man co」で大喜びする。