Linux / コマンド / apropos - 説明キーワードでコマンド検索

aproposは、コマンドの名前が正確にわからないときに、マニュアルページの名前と一行説明からキーワードを検索するコマンドです。たとえば「ファイル圧縮」、「ユーザー作成」、「ネットワークアドレス」のようにやりたい作業はわかっているが、関連するコマンドがわからない場合に候補を探すのに便利です。

man -kも同じ検索機能を提供します。基本の検索語は正規表現として処理される可能性があるため、複数の単語の関係、正確に一致する検索、ワイルドカードやシェルの引用符ルールを理解すると、より正確な結果を得ることができます。

aproposコマンドとは?

各マニュアルページには名前と機能をまとめた短い説明があります。aproposはman-dbのインデックスデータベースからページ名と説明を検索し、一致する項目を出力します。

マニュアル本文全体を検索するコマンドではありません。そのため、結果は速く、テーマ別の候補を見つけやすいですが、説明に検索語が含まれていないページは本文に関連内容があっても表示されない場合があります。

基本文法と結果の読み方

apropos [オプション] キーワード...

ファイルコピーに関連するマニュアルを探す例です。

apropos copy

一般的な結果は次の構造を持ちます。

cp (1)               - copy files and directories
scp (1)              - OpenSSH secure file copy

最初のフィールドはマニュアルページの名前、括弧内の数字はセクション、ハイフンの後は一行の説明です。希望の項目を見つけたら、セクションまで指定して正確なページを開きます。

man 1 cp
man 1 scp

複数キーワード検索方式

デフォルトは1つでも一致すれば出力

キーワードを複数指定した場合、man-db では、どれか1つでも一致する項目を出力します。検索範囲が広がりすぎて結果が多くなりすぎることがあります。

apropos network address

すべてのキーワードが必要な場合は -a を使用

-a または --and は指定したすべてのキーワードと一致する項目のみを表示します。関連のない結果を減らすときに便利です。

apropos -a network address
apropos --and user password

複数の単語を1つの検索表現としてまとめたい場合は、引用符を使用できますが、基本検索が正規表現であることも考慮する必要があります。

正規表現、正確な検索とワイルドカード

既定の正規表現検索

man-dbのaproposは既定でキーワードを拡張正規表現として処理します。ドット、大括弧、アスタリスクなどの文字は特別な意味を持つ場合があるため、文字通りに検索したい場合はエスケープするか、別の検索モードを使用する必要があります。

apropos '^ssh'
apropos 'file.*system'

最初の例では名前または説明の先頭がsshで始まる項目を、2番目の例ではfileの後に0文字以上の任意の文字列が続き、その後にsystemが出てくる項目を検索します。

正確に一致させる -e

-eまたは--exactはキーワードをページ名や説明と正確に一致させます。正確なページ名をすでに知っている場合は、whatisの方がより簡単かもしれません。

apropos -e printf

シェル方式ワイルドカード -w

-wまたは--wildcardはキーワードをシェルスタイルワイルドカードパターンとして処理します。現在のシェルがアスタリスクをファイル名に先に展開しないように、パターンを引用符で囲みます。

apropos -w 'ssh*'
apropos --wildcard '*password*'

検索範囲をセクションに限定する

-s または --sections でマニュアルセクションを制限すると、同じ名前の他の文書や無関係な結果を減らすことができます。

apropos -s 1 archive
apropos -s 2,3 socket
apropos --sections=5 password
セクション 主な内容
1 一般ユーザーが実行するコマンドとプログラム
2 Linux カーネルが提供するシステムコール
3 プログラムライブラリ関数
5 設定ファイルとファイル形式
8 主に管理者が使用するシステム管理コマンド

セクションのリストは、カンマまたはコロンで区切ることができます。実装やインストールされた文書に応じて、3p や 3perl のようなサブセクションが存在する場合があります。

よく使う apropos オプション

オプション 説明
-a, --and すべてのキーワードと一致する項目のみを表示します。
-e, --exact キーワードをページ名や説明と正確に一致させます。
-r, --regex キーワードを正規表現として扱います。man-db ではデフォルトの検索方法です。
-w, --wildcard シェルスタイルのワイルドカードパターンで検索します。
-s リスト, --sections=リスト 指定したマニュアルセクションのみ検索します。
-l, --long 端末幅に合わせた出力の切り詰めを無効にし、長い説明も表示します。
-M パス, --manpath=パス 検索するマニュアル階層のパスを直接指定します。
-L ロケール, --locale=ロケール 検索に使用するロケールを一時的に指定します。

aproposとman -kはどのような関係ですか?

man-db環境ではman -kはapropos検索オプションを使用するインターフェースです。次の2つのコマンドは同じ目的で使用できます。

apropos filesystem
man -k filesystem

検索したページを開く手順は、man コマンドのセクション指定と検索方法で説明しています。普段の使い方に応じて選べます。マニュアルを探す過程であることを強調したい場合はman -k、独立した検索コマンドとして覚えたい場合はaproposが直感的です。

検索結果がないときに確認すべき点

より一般的なキーワードに変更する

説明に実際に含まれる可能性の高い英単語を使用してください。翻訳されたマニュアルがインストールされていなければ、日本語の検索語では結果が出ない場合があります。

apropos compress
apropos archive
apropos -a user account

索引データベースを更新する

新しいマニュアルをインストールした直後であるか、インデックスが破損している場合、apropos の結果が空であることがあります。man-db 環境では、管理権限でインデックスを更新できます。

sudo mandb

mandb はマニュアルページのインデックスキャッシュを作成または更新します。システムがパッケージインストールプロセスや定期作業で自動的に更新することもあるため、不要に繰り返し実行する必要はありません。

マニュアルパスとロケールを確認する

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

MANPATH を直接設定した場合や、特別なパスにドキュメントをインストールした場合、基本マニュアル階層が検索から漏れることがあります。-M オプションは、問題を診断する際に一時的に別のパスを指定するために使用できます。

シェルスクリプトで使用する場合

man-db の apropos は、正常に実行された場合は 0、使用法や設定エラーの場合は 1、操作エラーの場合は 2、一致する結果がない場合は 16 を返します。単に出力が空かどうかを確認するだけでなく、終了状態を区別することで、エラーと検索結果なしの違いを確認できます。

if apropos -e "$1" >/dev/null; then
  printf '%s\n' '一致するマニュアル項目があります.'
else
  status=$?
  printf '検索失敗または結果なし: status=%d\n' "$status" >&2
fi

このコードは、スクリプトの最初の引数 $1 を検索する判定部分の例です。check-manual.sh として保存し、bash check-manual.sh printf のように検索語を必ず渡してください。失敗時の状態は表示していますが、この例自体はその値を終了コードとして返しません。呼び出し側に伝える必要がある場合は、失敗を処理した後にその状態で終了するようスクリプトを構成します。終了状態値は他の実装で異なる場合があります。自動化に使用する前に、現在のシステムでの man apropos を確認してください。

apropos と類似のコマンドとの比較

コマンド 用途
apropos キーワード ページ名と一行の説明からテーマやキーワードを検索します。
whatis 名前 正確なマニュアルページ名の一行説明を確認します。
man 名前 選択したマニュアルページの全文を読みます。
man -K 文字列 インストールされたマニュアルのソース全体から文字列を検索します。時間がかかることがあります。

よくある質問

日本語で検索してもよいですか?

日本語マニュアルの説明がインストールされ、現在のロケールで選択されている場合は可能です。多くのシステムでは英語の説明しかないため、結果が出ない場合は英語のキーワードで再検索してください。

検索語に空白がある場合はどうしますか?

一つの表現として渡したい場合は、引用符で囲みます。複数の独立したキーワードとして渡し、-aを使うと、すべての単語がそれぞれ一致する項目のみを見つけることができます。

whichの代わりにaproposを使いますか?

用途が異なります。aproposは関連マニュアルを探すためのもので、command -vやtypeは入力したコマンド名が実際にどのように解釈されるかを確認するためのものです。

まとめ

aproposは名前を知らないコマンドや文書を機能キーワードで探す際に便利です。基本検索で候補を見つけ、-aで複数条件をすべて満たし、-sでセクションを絞り込めば結果を効率的に整理できます。

目的のページを見つけたら、セクション番号とともにmanで開きます。その他の基本コマンドはLinuxコマンド一覧と概要で確認できます。

公式文書を参照