Linux / コマンド / man - コマンドマニュアルの確認

manは、Linuxシステムにインストールされたコマンド、設定ファイル、システムコール、ライブラリ関数などのマニュアルをターミナルで読むためのコマンドです。基本的にman コマンドを実行すると、使用方法、オプション、終了ステータス、関連文書を確認できます。

インターネットで見つけた例は、現在のシステムのバージョンと異なる場合があるため、実作業の前に、該当システムにインストールされたマニュアルページ(manページ)を確認する習慣を持つことが望ましいです。この記事では、マニュアルを開く方法から、セクションの選択、キーワード検索、シェル組み込みコマンドの確認や問題解決まで説明します。

manコマンドとは?

manは、システムリファレンスマニュアルを表示するインターフェースです。引数としてページ名を与えると、設定されたパスからマニュアルを検索し、形式を整えた上で画面単位で表示します。通常、lessが画面表示プログラムであるpagerとして使用されますが、システム設定やMANPAGERまたはPAGER環境変数によって変更される場合があります。

マニュアルページは、manプログラム一つだけで提供されるものではありません。各コマンドやライブラリのパッケージが自身の文書を一緒にインストールする方式のため、同じディストリビューションでも、インストールされたパッケージやバージョンによって閲覧できるページが異なります。

基本的な構文と最初の例

最もよく使う文法は次の通りです。角括弧は省略可能な項目であることを意味するので、実際のコマンドには入力しません。

man [オプション] [[セクション] ページ...]

ls コマンドのマニュアルを開くには次のように実行します。

man ls

特定のセクションのページを開きたい場合は、ページ名の前にセクション番号を指定します。

man 5 passwd

上記のコマンドは passwd コマンドではなく、/etc/passwd ファイル形式を説明するセクション5のページを開きます。man passwd のようにセクションを省略すると、あらかじめ決められた順序で検索して最初に見つけたページだけを表示します。

マニュアル画面での移動と検索方法

以下のキーは、ペイジャーが less の場合に一般的に使用できます。別のペイジャーが設定されている場合、キーの動作は異なることがあります。

キー 動作
Space, Page Down 次の画面に移動します。
b, Page Up 前の画面に移動します。
↑, ↓ 一行ずつ上または下に移動します。
g 文書の先頭に移動します。
G 文書の末尾に移動します。
/文字列 現在の位置から下方向に文字列を検索します。
?文字列 現在の位置から上方向に文字列を検索します。
n, N 次の検索結果または前の検索結果に移動します。
h ページャーのヘルプを開きます。
q マニュアルを終了します。

例えば man ls を開き、次に /-a を入力して Enter を押すと、-a が現れる場所を見つけることができます。短いオプションは本文の他の単語と一致することもあるため、必要に応じて --all のように長いオプション名や説明の重要な単語を検索する方が早いです。

マニュアルページの構成を読む

ページごとにすべての項目があるわけではありませんが、一般的なコマンドマニュアルは次のような区分で構成されています。

区分 内容
NAME ページ名と機能を一行でまとめます。
SYNOPSIS コマンドや関数の使用形式を示します。
DESCRIPTION 動作方式と使用目的を詳しく説明します。
OPTIONS 利用可能なオプションと各オプションの効果を説明します。
EXIT STATUS 正常終了とエラーを区別する終了状態を説明します。
ENVIRONMENT 動作に影響を与える環境変数を説明します。
FILES 関連する設定ファイル、データファイルおよびパスを示します。
EXAMPLES 実際の使用例を提供します。ページによってはない場合があります。
SEE ALSO 併せて読むとよい他のマニュアルページを案内します。

SYNOPSISでは表記方法も重要です。太字で表示された文字列はそのまま入力する項目、斜体はユーザーが置き換える値であることが一般的です。[ ]は省略可能な項目、...は繰り返し可能な項目を意味します。ただしページの作成方法や出力環境により表現に差異がある場合がありますので、該当ページの説明も併せて読む必要があります。

マニュアルセクション番号の意味

Linuxのマニュアルは文書の性格に応じてセクションに分けられます。同じ名前のページが複数のセクションに存在することがあるため、エラーなく目的の文書を探すにはセクション番号を把握しておくと良いです。

セクション 分類 例
1 実行プログラムとシェルコマンド ls(1), grep(1)
2 システムコール open(2), read(2)
3 ライブラリコール printf(3), malloc(3)
4 特殊ファイルとデバイス null(4), デバイスインターフェース
5 ファイル形式と規約 passwd(5), fstab(5)
6 ゲーム インストールされたゲームのマニュアル
7 その他のテーマと規約 signal(7), man-pages(7)
8 システム管理コマンド mount(8), useradd(8)
9 カーネルルーチン 非標準セクションであり、すべてのシステムにあるわけではありません

文書内で passwd(1) または passwd(5) のように名前の後に数字が付いているのを見ることができます。この数字はバージョンではなく、マニュアルのセクションを示しています。それぞれ次のように開くことができます。

man 1 passwd
man 5 passwd

同じ名前のページを探す方法

一致するすべてのセクションを確認する

-aは検索順序で見つかったすべてのページを順に表示します。ページを終了した後に次のページへ進むか、スキップするか、表示を終了するかを選べる実装もあります。表示される案内に従って操作してください。

man -a passwd

-fはページ名と短い説明を出力します。通常、whatisのような用途で使用します。

man -f passwd
whatis passwd

特定のセクションだけを開く

希望するセクションがわかっている場合は、番号を指定するのが最も正確です。空白で区切る形式のほか、一部のmanの実装ではpasswd.5や引用された'passwd(5)'形式をサポートしています。

man 5 passwd
man passwd.5
man 'passwd(5)'

移植性を重視するなら、理解しやすく広く使われているman 5 passwd形式を使用するのが無難です。

名前がわからない場合はキーワードで探す方法

名前と短い説明を検索する

man -kはマニュアルページの名前と短い説明からキーワードを検索します。aproposも同じ目的で使用されます。

man -k "copy files"
apropos "copy files"

検索語は正規表現として処理できるため、特殊文字が含まれる場合はシェルと検索ルールの両方を考慮する必要があります。単純なフレーズは上記の例のように引用符で囲むのが安全です。

マニュアル本文全体を検索する

-Kは名前や要約ではなく、マニュアルのソース全体から文字列を探します。画面に整形された本文だけの検索ではないため、コメントに一致したり、ソース中のエスケープ表記のために見つからなかったりする場合があります。インストールされている文書が多い場合、時間がかかることがあるため、まず-kで検索し、必要なときだけ使用するのが良いです。

man -K "environment variable"

特定のセクションに範囲を絞ると検索時間を短縮できます。

man -K 5 "password database"

よく使うmanオプション

以下のオプションはLinuxで広く使われているman-dbの実装を基に整理しました。他のOSや実装ではサポートの有無や意味が異なる場合があるため、現在のシステムの説明はman manで確認するのが最も正確です。

オプション 説明
-a, --all 名前が一致するすべてのマニュアルページを表示します。
-f, --whatis ページ名と短い説明を出力します。
-k, --apropos 名前と短い説明でキーワードを検索します。
-K, --global-apropos すべてのマニュアルページの本文で文字列を検索します。
-w, --where ページを開かずに元のマニュアルファイルの場所を出力します。
-l, --local-file 検索パスの代わりに指定したローカルマニュアルファイルを表示します。
-L ロケール, --locale=ロケール その実行で使用するロケールを指定します。
-M パス, --manpath=パス マニュアルページを探すパスを直接指定します。

例えば、実際に読んでいる ls マニュアルファイルの場所は次のように確認します。

man -w ls

シェル組み込みコマンドは help と一緒に使うこと

cd、alias、read のように、シェル自体が実行する組み込みコマンドは別の実行ファイルでない場合があります。Bash ではまず type でコマンドの種類を確認し、組み込みコマンドであれば help を使う方が正確で速いです。

type cd
help cd
help -m cd

help -m はヘルプをマニュアルページと似た形式で表示します。Bash 全体の詳しい説明は次のように確認できます。

man bash

同じ名前がエイリアス(alias)、関数、シェル組み込みコマンド、外部プログラムとして同時に存在することがあるため、実際に何が実行されるか確実でない場合は type -a 名前 ですべて確認します。

type -a printf

日本語マニュアルとロケールを確認する

man は現在のロケールに合った翻訳ページがインストールされていれば、その文書を優先的に表示できます。現在のロケールは次のコマンドで確認します。

locale
echo "$LANG"

英語原文を一時的に見たい場合は -L オプションを使用できます。

man -L C ls

日本語ロケールが設定されていても、翻訳されたページがインストールされていない場合や、該当文書の翻訳版が存在しない場合は、英語のページが表示されることがあります。翻訳は原文より更新が遅れることがあるため、オプションや動作に疑問がある場合は、英語の原文とプログラムバージョンも併せて確認することをお勧めします。

マニュアルページがない場合の解決方法

コマンドと関連パッケージがインストールされているか確認する

No manual entry for ...が出た場合は、ページ名が間違っているか、コマンドまたは文書パッケージがインストールされていない可能性があります。まずコマンドの存在有無や種類を確認します。

type -a コマンド
command -v コマンド

最小インストールイメージやコンテナには、manプログラムと基本マニュアルが含まれていないこともあります。Debian・Ubuntu系およびRocky Linux・RHEL系では、通常次のパッケージをインストールします。

sudo apt update
sudo apt install man-db manpages
sudo dnf install man-db man-pages

パッケージ名やリポジトリ構成は、ディストリビューションやバージョンによって異なる場合があります。特定のプログラムのドキュメントは、該当プログラムパッケージまたは別のドキュメント・開発パッケージに含まれることがあるため、ディストリビューションのパッケージ検索機能も併せて使用します。

検索データベースとパスを確認する

man コマンドは開くことができますが、man -kまたはwhatisの検索結果がない場合、インデックスデータベースがまだ作成されていない可能性があります。man-db環境では、管理権限でデータベースを更新することができます。

sudo mandb

マニュアルの検索パスはmanpathで確認します。ユーザーがMANPATHを直接設定すると、基本検索パスが変わる可能性があるため、特別な理由がない限り固定するのは避けた方がよいでしょう。

manpath
printf '%s\n' "$MANPATH"

実際に役立つ使用例

オプションを素早く見つける

マニュアルを開いた後、検索キーを使うことで、長い文書でも必要なオプションを素早く見つけることができます。

man tar

画面で/--excludeを入力してEnterを押した後、nとNの間で検索結果を移動します。

設定ファイルの形式を確認する

設定ファイルを修正する前に、セクション5に関連ページがあるか確認してください。フィールドの意味、許容値、コメントルールや例が説明されている場合があります。

man 5 fstab
man 5 ssh_config
man 5 sshd_config

関連する文書をたどりながら調査する

1ページで答えが見つからなかった場合は、文書の最後のSEE ALSOを確認します。関連するコマンド、設定ファイル、システムコール、および概念文書が名前(セクション)形式で連結されているため、検索範囲を体系的に広げることができます。

man 2 open
man 7 path_resolution

man、--help、infoはどのように区別しますか?

方法 適した状況 特徴
コマンド --help 文法とオプションを素早くざっと確認する場合 短くてすぐに確認できるが、サポートされていないコマンドもある
man コマンド オプションの意味、ファイル、環境変数に関連する文書を詳しく確認する場合 現在のシステムにインストールされている参照文書を提供する
info コマンド GNUプログラムの章ごとの説明や例を深く読む場合 ハイパーテキスト構造であり、別の Info ドキュメントが必要です
help コマンド Bash 組み込みコマンドを確認する時 現在 Bash が提供する組み込みコマンドのヘルプを表示します

一つにこだわるよりも、まず --help で文法を確認し、詳細な動作は man で読み、シェル組み込みコマンドは help を併用する方法が効率的です。

よくある質問

man の後の数字はバージョンですか?

いいえ。printf(1) と printf(3) の数字はマニュアルセクションを意味します。セクション 1 はユーザーコマンド、セクション 3 はライブラリ関数を扱うため、名前が同じでも異なるドキュメントです。

マニュアルを終了するにはどうすればよいですか?

デフォルトのページャが less であれば q を押します。終了しない場合は、現在使用中のページャのヘルプや設定を確認します。

manページの内容がインターネットの文書と異なる理由は何ですか?

ローカルマニュアルは、現在のシステムにインストールされているパッケージによって提供されるため、ディストリビューション、パッケージのバージョンやインストール状況によって異なります。一方、オンラインドキュメントは、より新しいバージョンや他の実装について説明している場合があります。実際のサーバーで使用するオプションは、ローカルマニュアルとコマンド --versionを基準に確認するのが安全です。

コマンドの名前が全くわからない場合、どうやって探しますか?

man -k キーワード または apropos キーワード で名前と短い説明を検索します。検索結果が多すぎる場合は、具体的な単語を追加するか、-s オプションをサポートする環境でセクションの範囲を制限します。

まとめ

manは、現在Linuxシステムにインストールされている参照文書を確認する最も基本的なツールです。単にman コマンドを覚えるだけでなく、セクション番号、-k検索、-f要約、-wパスの確認とページャー検索を一緒に習得すれば、必要な情報をはるかに早く見つけることができます。

まず、man manを実行して、現在のシステムのman実装で提供されているオプションを確認します。helpにはシェルコマンド、--helpには短いオプション確認、infoには長いGNUプログラム説明を使うことで、必要な説明を見つけやすくなります。

公式文書を参照