この記事から得られる知識
whatis
コマンドの基本的な使い方と考え方を理解できる。- コマンドがどのような仕組みで動作しているか(whatisデータベース)を学べる。
- 類似コマンドである
apropos
との明確な違いと使い分けがわかる。 - 便利なオプションを活用した、より高度な検索テクニックを習得できる。
- 「情報が見つからない」といった一般的な問題のトラブルシューティング方法がわかる。
1. イントロダクション:whatisコマンドとは?
Linuxシステムを使っていると、数多くのコマンドに遭遇します。時には「このコマンド、一体何だっけ?」と目的を忘れてしまうこともあるでしょう。そんな時、分厚いマニュアルページ(man page)を最初から最後まで読むのは大変です。
ここで活躍するのがwhatis
コマンドです。whatis
は、指定したコマンドが何をするものなのか、その一行説明(one-line manual page description)を表示してくれる非常に便利なツールです。名前の通り、「それは何?」という問いに簡潔に答えてくれます。
この記事では、whatis
コマンドの基本的な使い方から、その裏側にある仕組み、さらには応用的なテクニックまで、徹底的に解説していきます。このコマンドをマスターすれば、あなたのLinux上での作業効率が格段に向上することでしょう。
2. 基本的な使い方
whatis
コマンドの使い方は非常に直感的です。ターミナルで以下のように入力するだけです。
whatis [調べたいコマンド名]
例えば、ディレクトリ内のファイル一覧を表示するls
コマンドについて調べてみましょう。
$ whatis ls
ls (1) - list directory contents
出力結果は、ls (1)
とlist directory contents
という2つの部分から構成されています。
ls (1)
:ls
はコマンド名、括弧内の数字(1)
は、そのコマンドがマニュアルのどのセクションに属しているかを示しています。セクション1は一般的にユーザーが実行可能なコマンドを指します。list directory contents
: これがls
コマンドの機能を示す一行説明です。「ディレクトリの内容をリスト表示する」という意味ですね。
複数のコマンドを同時に調べることも可能です。スペースで区切ってコマンド名を並べます。
$ whatis cp mv rm
cp (1) - copy files and directories
mv (1) - move (rename) files
rm (1) - remove files or directories
このように、whatis
はコマンドの概要を素早く把握するための第一歩として非常に有効です。
3. whatisコマンドの仕組み:whatisデータベース
whatis
コマンドがこれほど高速に説明を表示できるのはなぜでしょうか。それは、実行のたびに全てのマニュアルページを検索しているわけではないからです。
実は、システム内にはwhatisデータベースと呼ばれる、コマンド名とその一行説明をまとめた専用のデータベースファイルが存在します。whatis
コマンドは、このデータベースを検索して結果を表示しているのです。このデータベースは、各マニュアルページのNAME
セクションから情報を抽出して構築されています。
データベースの更新:mandbコマンド
このwhatisデータベースは、システムに新しいソフトウェアをインストールしたり、マニュアルページが更新されたりした際に、自動で更新されるとは限りません。そのため、時々手動でデータベースを最新の状態に保つ必要があります。
データベースの更新にはmandb
コマンドを使用します。このコマンドは通常、管理者権限(rootまたはsudo)で実行する必要があります。
sudo mandb
注意: もしwhatis
コマンドを実行して「…: nothing appropriate.」のようなメッセージが表示された場合、それはデータベース内に該当する情報がないか、データベース自体が古い、あるいは存在しないことを意味します。そのような場合は、まずsudo mandb
を実行してデータベースを再構築してみてください。
mandb
コマンドは、システム内のすべてのマニュアルページをスキャンし、インデックスデータベース(whatisデータベースを含む)を更新します。システムの規模によっては、完了までに数分かかることがあります。
古いシステムではmakewhatis
というコマンドが使われていましたが、現在の多くのLinuxディストリビューションではman-db
パッケージに含まれるmandb
に取って代わられています。
4. `apropos`コマンドとの違い
whatis
と非常によく似たコマンドにapropos
があります。どちらもマニュアルページのデータベースを検索しますが、その検索方法に決定的な違いがあります。
whatis
: キーワードと完全に一致するコマンド名(ページ名)を検索します。apropos
: キーワードを部分文字列として含む、または正規表現として解釈し、コマンド名やその説明文を検索します。
例えば、「zip」というキーワードで検索してみましょう。
$ whatis zip
zip (1) - package and compress (archive) files
whatis
は`zip`という名前のコマンドだけを表示しました。一方、apropos
で検索するとどうなるでしょうか。
$ apropos zip
bunzip2 (1) - a block-sorting file compressor, v1.0.6
bzip2 (1) - a block-sorting file compressor, v1.0.6
funzip (1) - filter for extracting from a ZIP archive in a pipe
gpg-zip (1) - encrypt or sign files into a GnuPG-zipped archive
gunzip (1) - compress or expand files
gzip (1) - compress or expand files
unzip (1) - list, test and extract compressed files in a ZIP archive
zip (1) - package and compress (archive) files
zipcloak (1) - cloak entries in a zipfile
zipinfo (1) - list detailed information about a ZIP archive
zipnote (1) - write the comments in a zipfile to stdout, edit comments
zipsplit (1) - split a zipfile into smaller zipfiles
apropos
は「zip」という文字列を名前に含む、あるいは説明に含む可能性のある関連コマンドを大量にリストアップしてくれました。「何かを圧縮したいけど、どのコマンドを使えばいいかわからない」といった場合に非常に役立ちます。
コマンド | 検索対象 | 一致条件 | 主な用途 |
---|---|---|---|
whatis keyword | コマンド名(ページ名) | 完全一致 | 特定のコマンドの目的を素早く確認したい時 |
apropos keyword | コマンド名および説明文 | 部分一致 (正規表現も可) | ある機能を持つコマンドを探したいが、名前がわからない時 |
ちなみに、man -f
はwhatis
と、man -k
はapropos
とそれぞれ同等の機能を持っています。
5. 主要なオプション解説
whatis
コマンドは、オプションを指定することで、より柔軟な検索が可能になります。ここでは主要なオプションを紹介します。
オプション | 長い形式 | 説明 |
---|---|---|
-d | --debug | デバッグ情報を表示します。データベースの検索パスなどを確認するのに役立ちます。 |
-v | --verbose | より詳細な警告メッセージを表示します。 |
-r | --regex | キーワードを正規表現として解釈します。これにより、apropos のように柔軟なパターンマッチングが可能になります。 |
-w | --wildcard | キーワード内でワイルドカード(* や? など)を使用できるようにします。 |
-l | --long | 説明文が長くても、ターミナルの幅で切り捨てずに全文を表示します。 |
-s list | --sections=list | 検索対象を特定のマニュアルセクションに限定します。セクションはカンマまたはコロンで区切って複数指定できます。 |
-M path | --manpath=path | デフォルト以外のマニュアルページのパスを指定します。 |
-C file | --config-file=file | デフォルト以外の設定ファイルを使用します。 |
オプション活用例
ワイルドカードを使った検索 (-w
)
print
で始まるコマンドを検索したい場合、ワイルドカードが便利です。
$ whatis -w 'print*'
print (3) -
print.conv (5) - printer configuration file
printcap (5) - printer capability data base
printer (7) - spooler daemon interface
printf (1) - format and print data
printf (3) - formatted output conversion
ワイルドカード文字がシェルによって展開されてしまうのを防ぐため、キーワードをシングルクォート' '
で囲むことが重要です。
正規表現を使った検索 (-r
)
正規表現を使えばさらに複雑な検索が可能です。例えば、名前に `zip` または `gzip` を含むコマンドを検索できます。
$ whatis -r '^(gun)?zip'
gunzip (1) - compress or expand files
zip (1) - package and compress (archive) files
セクションを指定した検索 (-s
)
Linuxには、同じ名前でも機能が異なるコマンドやライブラリ関数が存在することがあります。例えばprintf
は、ユーザーコマンド(セクション1)とC言語のライブラリ関数(セクション3)の両方に存在します。
セクションを指定しない場合:
$ whatis printf
printf (1) - format and print data
printf (3) - formatted output conversion
セクション1(ユーザーコマンド)のみを検索したい場合:
$ whatis -s 1 printf
printf (1) - format and print data
このように、-s
オプションは、特定の種類の情報を探している場合にノイズを減らし、目的の情報に素早くたどり着くために非常に有効です。
6. マニュアルセクションについて
whatis
の出力を正しく理解するためには、マニュアルセクションの概念を知っておくことが重要です。Linuxのマニュアルは、内容に応じていくつかのセクションに分類されています。
セクション | 内容 |
---|---|
1 | 実行可能なプログラムまたはシェルコマンド |
2 | システムコール(カーネルが提供する関数) |
3 | ライブラリコール(プログラムライブラリ内の関数) |
4 | 特殊ファイル(通常は /dev にある) |
5 | ファイルフォーマットと規約(例: /etc/passwd の形式) |
6 | ゲーム |
7 | その他(マクロパッケージや規約など) |
8 | システム管理コマンド(通常はrootのみが実行) |
9 | カーネルルーチン [非標準] |
例えば、ls (1)
はセクション1のユーザーコマンドであり、reboot (8)
はセクション8のシステム管理コマンドです。このセクション番号を意識することで、コマンドの性質をより深く理解できます。
7. トラブルシューティング
whatis
コマンドを使用していると、期待通りの結果が得られないことがあります。ここでは、よくある問題とその解決策を紹介します。
まとめ
whatis
コマンドは、一見地味ながらも、Linuxのコマンドラインを扱う上で非常に強力な味方です。その主な利点を以下にまとめます。
- 迅速性: コマンドの目的を一行で瞬時に確認できる。
- 正確性: マニュアルページのNAMEセクションに基づいた信頼性の高い情報が得られる。
- 探索性:
apropos
と組み合わせることで、未知のコマンドを探す手助けとなる。
man
コマンドで詳細なドキュメントを読む前の下調べとして、あるいは単にコマンドの機能を再確認したい時に、whatis
コマンドは最高のツールです。今回紹介した仕組みやオプション、トラブルシューティング方法を理解し、ぜひ日々の作業に取り入れてみてください。コマンドライン操作の効率と快適さが、一段と向上するはずです。