man コマンド:使い方とオプション、セクション番号と man -k 検索

テスト環境RHEL系AlmaLinux 9.8man-db 2.9rootアカウントDebian 12 · man-db 2.11 一般ユーザー
シェルコマンドman, whatis, apropos場所/usr/bin/man

Linux サーバーでコマンドや設定ファイルの使い方を確認するときは man コマンドでマニュアルページを開き、名前がわからないときは man -k で短い説明を検索します。AlmaLinux 9 と Debian 12 のサーバーで passwd のページを調べたところ、Debian 12 にはセクション 1 のコマンドのページとセクション 5 のファイル形式のページが両方ありましたが、AlmaLinux 9 にはセクション 5 のページがありませんでした。

以下の出力は AlmaLinux 9.8 サーバーの root アカウントと Debian 12 サーバーの一般アカウントで実行した結果です。シミュレーターのホスト名と接続アドレスは例の値です。

1️⃣ man コマンドの基本的な使い方

  • ↪️ ページを開く、画面の移動、ないページ

man の後ろにコマンド名を書くと、そのコマンドのマニュアルページが開きます。man はページをページャー プログラムに渡して 1 画面ずつ出力するため、実行してもすぐにはプロンプトに戻りません。ページャーは環境変数 MANPAGER または PAGER で決まり、どちらも空なら less を使います。

出力をパイプに渡すと、ページャーなしで文字だけが出ます。[man ls] の先頭 12 行を head で受け取ると、1 行目に LS(1) があり、NAME、SYNOPSIS、DESCRIPTION の節が順に続きました。

man ls | head -n 12
LS(1)                            User Commands                           LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information  about  the FILEs (the current directory by default).
       Sort entries alphabetically if none of -cftuvSUX nor --sort  is  speci-
       fied.

1 行目の LS(1) の括弧内の数字 1 は、このページが入っているセクション番号です。

ページの中では [Space] で次の画面に進み、[/語] と Enter で語を検索します。[n] は同じ語が出てくる次の位置に移動し、[q] は man を終了します。

存在しない名前を書くと [No manual entry for] エラーが出て、終了コードは 16 でした。

man no-such-cmd9
No manual entry for no-such-cmd9
echo $?
16

man ページの EXIT STATUS の節は、16 をページ、ファイル、語のうち 1 つ以上が見つからなかったときの値と説明しています。使い方の誤りは 1 なので、スクリプトで 2 つの場合を分けて処理できます。

2️⃣ man のセクション番号

  • ↪️ 1 コマンド、5 設定ファイル、8 管理コマンド

同じ名前のページが複数のセクションにあると、man は決まったセクションの順に探し、最初に見つかったページを 1 つだけ開きます。セクションは 1 から 9 まであり、サーバー作業でよく開くのはセクション 1 のコマンド、セクション 5 のファイル形式、セクション 8 の管理コマンドです。

セクション収めるページAlmaLinux 9.8 サーバーで見た例
1実行プログラムとシェル コマンドls, passwd, crontab, man
2システム コール(カーネルが提供する関数)
3ライブラリ関数
4特殊ファイル(主に /dev の下)
5ファイル形式と規約、例:/etc/passwdcrontab
6ゲーム
7その他(マクロ パッケージと規約)
8システム管理コマンド、主に root 用useradd, mandb
9カーネル ルーチン(非標準)

crontab はコマンドと設定ファイル形式が同じ名前のため、2 つのセクションにページがあります。[man -f crontab] で確認すると、セクション 1 と 5 の行が一緒に出ました。

man -f crontab
crontab (1)          - maintains crontab files for individual users
crontab (5)          - files used to schedule the execution of programs

セクション番号なしで [man crontab] を実行すると、セクション 1 の crontab コマンドのページが開きます。ジョブ予約ファイルの形式を見るには、名前の前に 5 を書きます。

man 5 crontab | head -n 4
CRONTAB(5)                       File Formats                       CRONTAB(5)

NAME
       crontab - files used to schedule the execution of programs

1 行目が CRONTAB(5) と File Formats に変わり、NAME の行にもコマンドの説明ではなくジョブ予約ファイルの説明が出ました。

指定したセクションにその名前のページがないと、エラーになります。AlmaLinux 9.8 サーバーで /etc/passwd のファイル形式を見ようと [man 5 passwd] を実行すると、セクション 5 にページがないというエラーが出ました。

man 5 passwd
No manual entry for passwd in section 5

Debian 12 サーバーでは [man -f passwd] にセクション 5 の passwd の行も出ました。どのセクションにページがあるかはサーバーにインストールされたマニュアルによって違うので、セクション番号を付ける前に [man -f] で先に確認します。

man -f passwd
passwd (1)           - change user password
passwd (1ssl)        - OpenSSL application commands
passwd (5)           - the password file

セクション 8 には、アカウントを作る useradd のように、主に root アカウントが実行する管理コマンドが入っています。

man -f useradd
useradd (8)          - create a new user or update default new user information

3️⃣ man コマンドのオプションと -k、-f 検索

  • ↪️ whatis、apropos と man -w のファイルの場所

[man -f] は同じ名前のページの 1 行の説明を出力し、whatis と同じ動作です。AlmaLinux 9.8 サーバーで [man -f passwd] と [whatis passwd] を実行すると、同じ 2 行が出ました。

man -f passwd
passwd (1)           - update user's authentication tokens
passwd (1ossl)       - OpenSSL application commands

1ossl の行は、passwd という名前を共有する OpenSSL コマンドのページです。

名前がわからないときは [man -k] でページ名と短い説明を検索します。apropos と同じ動作で、語は正規表現として読まれます。

man -k '^passwd'
passwd (1)           - update user's authentication tokens
passwd (1ossl)       - OpenSSL application commands

^ は行の先頭を意味するため、passwd で始まる行だけが出ました。説明に含まれる語でも探せて、[man -k 'directory contents'] は ls と一緒に dir、vdir のページを見つけました。

man -k 'directory contents'
dir (1)              - list directory contents
ls (1)               - list directory contents
vdir (1)             - list directory contents

[man -k] は NAME の節の短い説明だけを検索するため、オプション名や本文の語ではページを見つけられません。本文まで探す [man -K] は、すべてのページを順に読むので時間がかかります。

探す語がないと [nothing appropriate] が出て、終了コードは 16 でした。

man -k no-such-word9
no-such-word9: nothing appropriate.
echo $?
16

[man -w] はページを開かず、元のファイルの場所だけを出力します。

man -w ls
/usr/share/man/man1/ls.1.gz
man -w 5 crontab
/usr/share/man/man5/crontab.5.gz

2 つのファイルは /usr/share/man の下の man1 と man5 フォルダーにあり、フォルダー名の数字がセクション番号と同じでした。[man -w 1ossl passwd] で見つけた 1ossl のページ ファイルも、セクション 1 と同じ man1 フォルダーにありました。

オプションは下の 2 つのタブにまとめました。

オプションコピー説明
-f, --whatis同じ名前のページの 1 行の説明を出力。whatis と同じ動作
-k, --aproposページ名と短い説明を検索。apropos と同じ動作
-w, --where, --path, --locationページを開かず、元のファイルの場所だけを出力
-a, --all名前が一致するページを順にすべて出力
オプションコピー説明
-K, --global-aproposすべてのページの本文から語を検索。時間がかかる
-S, -s, --sectionsリスト検索するセクションと順序を、カンマまたはコロンで区切ったリストで指定
-P, --pagerページャーページを出力するページャーを指定。既定値は less
-M, --manpathパスページを探すマニュアル パスを指定
-L, --localelocale今回の実行で使う locale を指定
-l, --local-fileシステムのマニュアルを検索せず、指定したファイルをページとして出力
-u, --updateインストール済みページの索引キャッシュを更新
-V, --versionバージョン情報を出力

🔲 man コマンド シミュレーター

下のシミュレーターでは、[man ls] でページを開き、[Space]、[/list]、[n]、[q] のチップで画面を送ってみることができます。同じ仮想サーバーで、[man 5 crontab] のようにセクション番号を付けたり、[man -f]、[man -k]、[man -w] を入力したりできます。

man コマンド シミュレーターman-db 2.9 · rootアカウント
[root@server work]#
ブラウザーの中だけで動作します。ページの画面では Space、/語、n、q のチップを押し、キーボードの ↑↓ で前に入力したコマンドを呼び出します。

4️⃣ man ページの構成

  • ↪️ NAME、SYNOPSIS、DESCRIPTION、OPTIONS の読み方

man ページは、大文字の見出しが付いた節に分かれています。見出しだけを grep で取り出して比べると、ls のページはオプションの説明が DESCRIPTION の中にあり、crontab のページには OPTIONS の節が別にありました。

man ls | grep -E '^[A-Z]+( [A-Z]+)*$'
NAME
SYNOPSIS
DESCRIPTION
AUTHOR
REPORTING BUGS
COPYRIGHT
SEE ALSO
man crontab | grep -E '^[A-Z]+( [A-Z]+)*$'
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
CAVEATS
SEE ALSO
FILES
STANDARDS
DIAGNOSTICS
AUTHOR

節の名前はページごとに少しずつ違い、よく出てくる節は次のとおりです。

節書かれている内容
NAME名前と 1 行の説明(man -f と man -k が出力する行)
SYNOPSISコマンドの書き方
DESCRIPTION動作の説明(ls のページはオプションの説明もこの節に)
OPTIONSオプションごとに 1 段落
EXIT STATUS終了コードの意味
FILESコマンドが読み書きするファイル
SEE ALSOあわせて見るページ

SYNOPSIS の記号は、man ページが定めた規則に従います。角括弧の中は省略できます。縦線(|)で区切られたオプションは一緒に使えず、点 3 つ(...)が付いた引数は何度も書けます。

ls の SYNOPSIS は ls [OPTION]... [FILE]... なので、 コマンド オプションとファイル名などのコマンドライン引数は、すべて省略することも複数書くこともできます。

[--help] はプログラムが自分で出力する使い方の要約なので、ページャーなしでターミナルにそのまま出ます。[ls --help] の 1 行目の Usage は SYNOPSIS と同じ形で、全体の長さは 121 行と、[man ls] の 245 行より短くなりました。

ls --help | head -n 3
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

man ページには、[--help] にはない AUTHOR、SEE ALSO などの節がさらにあります。オプションを 1 つだけ手早く見るときは [--help] を、設定ファイルの形式や終了コードのように節に分かれた説明が必要なときは man を開きます。

🔢 FAQ & おすすめコンテンツ

cd は bash に含まれる組み込みコマンドなので、[man cd] は組み込みコマンド全体をまとめたページにつながります。AlmaLinux 9.8 サーバーで [type cd] は [cd is a shell builtin] を出力し、[man -w cd] は builtins.1.gz ファイルの場所を出力しました。組み込みコマンド 1 つの使い方は [help cd] ですぐに確認できます。

[man -a 名前] を実行すると、名前が一致するページを順に開きます。ファイルの場所だけを見るときは [-w] を一緒に書きます。AlmaLinux 9.8 サーバーで [man -w -a crontab] を実行すると、man1 と man5 フォルダーの crontab ファイルの 2 行が出ました。

[man -k] と [man -f] が検索する索引は、mandb が作成して更新します。そのため、まだ索引に入っていないページは検索結果に出ず、索引は root アカウントで [mandb] を実行して作り直します。

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 10   +   8   =