LoginSignup
85
73

manの読み方(初心者向け)

Last updated at Posted at 2015-12-28

基本的にLinuxを前提にしています。

セクション

manページは1~8のセクションに分かれている。

  1. コマンド
  2. システムコール
  3. ライブラリ関数(C言語)
  4. スペシャルファイル(/dev/)
  5. 設定ファイル
  6. ゲーム
  7. 雑多な事(慣習、プロトコル、文字コードなど)
  8. システム管理

例えばman printfとするとセクション1のprintfコマンドのmanが表示される。
C言語のprintf関数のmanを見たいときはman 3 printfのようにセクション番号を指定する。
man -a printfのように-aをつけると、全てのセクションで見つかったものを順番に表示する。

C言語の関数名やシステムコール名をfork(2)printf(3)のように数字つきで書くことがあるが、これは引数ではなく、manのセクション番号を表している。つまりforkはシステムコールで、printfはライブラリ関数である。

SYNOPSISの表記法

以下のman manを例にとって説明する。
http://man7.org/linux/man-pages/man1/man.1.html

SYNOPSIS
    man [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L
    locale] [-m system[,...]] [-M path] [-S list] [-e extension] [-i|-I]
    [--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P
    pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation]
    [--no-justification] [-p string] [-t] [-T[device]] [-H[browser]]
    [-X[dpi]] [-Z] [[section] page ...] ...
    man -k [apropos options] regexp ...
    man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ...
    man -f [whatis options] page ...
    man -l [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L
    locale] [-P pager] [-r prompt] [-7] [-E encoding] [-p string] [-t]
    [-T[device]] [-H[browser]] [-X[dpi]] [-Z] file ...
    man -w|-W [-C file] [-d] [-D] page ...
    man -c [-C file] [-d] [-D] page ...
    man [-?V]

表記法の意味:
   太字                そのままタイプするテキスト
   斜体 or 下線         適切な引数で置き換えるべきテキスト
   [-abc]             [ ] の中は省略可能。-a -b -cの任意の組み合わせ
   -a|-b              どちらか一方
   argument ...       ... は繰り返しを意味する
   [expression] ...   [ ] の中全体の繰り返し

ごく稀にこのルールに従っていないmanもあるが、このルールは覚えておくとよいと思う。

伝統的な記法では「適切な値で置き換えるべきテキスト」を斜体or下線で表すが、最近では <> で囲んで表すコマンドも多い(例 git clone <repository>

このman manの場合は8種類の構文が表示されているが、それぞれ別の構文と考えるべき。例えば

       man -w|-W [-C file] [-d] [-D] page ...
       man -c [-C file] [-d] [-D] page ...

と書いてあるので-w-cいうオプションがあることが分かるが、これらは同時には使えない。

$ man -w -c ls
man: -c -w : 相互に利用できないオプションです
Try 'man --help' or 'man --usage' for more information.

man pageの表記法や慣習について詳しくはman 7 man-pagesに書いてある。
http://man7.org/linux/man-pages/man7/man-pages.7.html
(ちなみにこのman7.orgの運営者はマイケル・ケリスク。かのバイブル「Linuxプログラミングインタフェース」の著者)

セクション7にはけっこう面白いものがあるので暇な時に眺めてみることをおすすめ。

自分でmanページや--helpを書く場合は

docoptを参考にすると良いかもしれない。これがデファクトスタンダードと言えるかは議論の余地があるが、--helpを書く時の、一つの標準を示してくれている。Pythonのライブラリなので、Pythonで書いている場合は色々な恩恵を受けられる。
http://docopt.org/

気をつけること

コマンドのmanを見るときは、設定ファイルのmanがセクション5にないかも確認するとよい。たいていは末尾のSEE ALSOに書いてある。例えばman crontabとするとcrontabコマンドが表示されるが、SEE ALSOにcrontab(5)と書いてあるので、man 5 crontabで設定の書き方が読めることが分かる。

Linuxは雑多なパッケージの寄せ集めなので、SEE ALSOに書いてあるman pageがない場合もある。

日本語に翻訳されているmanは古いものが多い。LANG=C manで英語版を確認したい(オプションが増えていることがよくある)。

末尾に「GNU coreutils 8.22」のようにコマンドの所属パッケージが書いてある事が多い。パッケージを意識しておくと次のようなメリットがある。

  • 「これはcoreutilsに含まれているからちゃんとメンテナンスされているだろう」とか「他のディストロでも使えるだろう」と当たりがつけられる。
  • パッケージの公式サイトに行くともっと詳細なドキュメントがある場合がある。特にGNUのパッケージはinfoの方が詳しい

Tips

ASCII文字コード表

man asciiでASCII文字コード表を表示できる。

C言語の演算子の優先順位

man operator

manファイルの置き場所

通常は/usr/share/man/に置いてある。
man -w lsのようにしてmanファイルの場所を調べられる。
環境変数$MANPATHを指定すると、それ以外の検索パスを追加できる。このときMANPATH=:/path-to-manのように先頭にコロンをつけないと、それ以外のパスが検索されなくなってしまうので注意。

ファイルを指定

man ./latin1.7.gzのようにmanファイルへのパスを指定すると、そのファイルを表示できる。

manのカラー化

以下を~/.bashrc(または~/.zshrc)に書いておくと、manの太字と下線の部分が色付けされるようになる。

~/.bashrc
man() {
    env GROFF_NO_SGR=1 LESS_TERMCAP_mb=$'\E[01;31m' \
    LESS_TERMCAP_md=$'\E[01;38;5;74m' \
    LESS_TERMCAP_me=$'\E[0m' \
    LESS_TERMCAP_se=$'\E[0m' \
    LESS_TERMCAP_so=$'\E[38;5;246m' \
    LESS_TERMCAP_ue=$'\E[0m' \
    LESS_TERMCAP_us=$'\E[04;38;5;146m' \
    man "$@"
}

色は31, 74, 246, 146の部分を置き換えれば変えられる。
色番号の一覧:http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html

mb=ブリンクモード開始, md=ダブルブライトモード開始, mb=装飾モード終了
se=強調終了、so=強調開始、ue=下線終了、us=下線開始
http://www.gnu.org/software/termutils/manual/termcap-1.3/html_mono/termcap.html#SEC44

参考:ArchWiki: man ページ カラー化の記述は削除されたようだ

[2023-10-15追記]
最近、Archで上記のカラーが効かなくなった。 GROFF_NO_SGR=1 を追加したら直った。
参考: colors - Colored man pages not working on gentoo - Unix & Linux Stack Exchange

トリビア:長大なmanページトップ20

image.png
https://www.reddit.com/r/linux/comments/13b45g3/top_20_largest_man_pages/ より

85
73
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
85
73