コマンドの検索~whatisコマンド・aproposコマンド~
本記事の対象者
LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。
今回の内容
今回は、whatisコマンドとaproposコマンドについて解説します。
コマンドの検索をしたいときに使用します。
簡単に言うと、whatisコマンドは完全一致検索で、aproposコマンドは部分一致検索ですが、それ以外にも少し違いがあります。
whatisコマンド
whatisコマンドは、「man -f」に相当するコマンドです。
コマンドを完全一致で検索し、説明を表示します。
whatisコマンド | |
---|---|
意味 | コマンドマニュアルを完全一致で検索する。 |
書式 | whatis [オプション] 検索文字列 |
オプション | 説明 |
---|---|
-w | 検索にワイルドカードを使用する。 |
[root@localhost ~]# whatis ls ls (1) - ディレクトリの内容をリスト表示する ls (1p) - list directory contents
whatisの引数に文字列を置いて実行すると、該当するコマンドの説明が表示されます。
[root@localhost ~]# whatis passwd passwd (1) - ユーザパスワードを変更する passwd (5) - パスワードファイル
passwdコマンドを検索すると、2つの異なる結果が表示されました。
「passwd」には「passwdコマンド」と「passwdというファイル」が存在しています。
これらがふたつとも検索にかかっています。
括弧の中に書かれている数字は「セクション番号」です。
それぞれ以下の意味になります。
セクション番号 | 意味 |
---|---|
1 | シェルコマンドや実行ファイル |
2 | システムコール |
3 | ライブラリ関数 |
4 | デバイスファイル |
5 | ファイルフォーマット |
6 | ゲームプログラム |
7 | その他(マクロ、規約、ファイルシステム、プロトコル等) |
8 | システム管理コマンド |
9 | カーネル用ドキュメント |
manコマンドで、passwdのように複数のセクションに存在する文字列を検索する際、このセクション番号を指定すれば求める検索結果を得られます。
whatisコマンドを使用すれば、詳しいマニュアルを検索する前に、求める情報のセクション番号を調べることが可能です。
[root@localhost ~]# whatis -w 'ls*' ls (1) - ディレクトリの内容をリスト表示する lsattr (1) - Linux 第 2 拡張ファイルシステム (ext2fs) ... lsdev (8) - 組み込まれているハードウェアに関する... lsearch (3) - 配列を線形検索する lseek (2) - ファイルの読み書きオフセットの位置を... lseek64 (3) - ファイルの 64 ビットの読み書きオフセ... lsetxattr (2) - 拡張属性の値を設定する lsmod (8) - Linux カーネルのモジュールの状態を表示... lspci (8) - 全ての PCI デバイスを表示する lstat (2) - ファイルの状態を取得する lstat64 (2) - ファイルの状態を取得する ls (1p) - list directory contents lsblk (8) - list block devices lscgroup (1) - list all cgroups lscpu (1) - display information about the CPU architecture lsearch (3p) - linear search and update lseek (3p) - move the read/write file offset lshw (1) - list hardware lsinitrd (1) - tool to show the contents of an initramfs image lsipc (1) - show information on IPC facilities currently employed ... lslocks (8) - list local system locks lslogins (1) - display information about known users in the system lsmcli (1) - libStorageMgmt command line interface lsmd (1) - lsmd lsmd.conf (5) - libStorageMgmt daemon lsmd configuration file. lsmem (1) - list the ranges of available memory with their online ... lsns (8) - list namespaces lsof (8) - list open files lsscsi (8) - list SCSI devices (or hosts) and their attributes lssubsys (1) - list hierarchies containing given subsystem lstat (3p) - get symbolic link status lsusb (8) - list USB devices
「-w」オプションを使用すると、ワイルドカードを使用した検索が可能です。
この例では、「ls」から始まるものをすべて検索していることになります。
aproposコマンド
aproposコマンドは、「man -k」に相当するコマンドです。
コマンドを部分一致で検索し、説明を表示します。
apropos | |
---|---|
意味 | コマンドマニュアルを部分一致(正規表現)で検索する。 |
書式 | apropos [オプション] 検索文字列 |
aproposコマンドは、部分一致検索です。
正確に言えば、デフォルトの状態で正規表現検索になっています。
aproposコマンドのオプションについては試験でも問われず使用頻度も低いため割愛します。
[root@localhost ~]# apropos ls _llseek (2) - ファイルの読み書きオフセットの位置を... backtrace_symbols (3) - アプリケーション自身でのデバッグの... backtrace_symbols_fd (3) - アプリケーション自身でのデバッグ... credentials (7) - 認証に用いられるプロセスの識別子 dircolors (1) - ls 用の色設定 dlsym (3) - 動的リンクを行うローダへの プログラ... false (1) - 何もせず、失敗で終了する get_thread_area (2) - スレッド局所記憶 (TLS) 領域を取り出す ※注意 llseek (2) - ファイルの読み書きオフセットの位置を... ls (1) - ディレクトリの内容をリスト表示する lsattr (1) - Linux 第 2 拡張ファイルシステム (ext2fs) ... lsdev (8) - 組み込まれているハードウェアに関する... lsearch (3) - 配列を線形検索する (以下省略)
whatisコマンドとの違いを抑えましょう。
aproposコマンドは正規表現検索になっているため、「ls」を含むすべての検索結果が表示されます。
「※注意」とした行について、「get_thread_area」には「ls」という文字列が含まれていないことにお気づきでしょうか。
なぜこれが「apropos ls」で検索結果に表示されたのでしょう。
「get_thread_area」の説明文を見ると「TLS」という文字列があります。
実は、この説明文の「TLS」に含まれる「LS」にヒットしています。
つまり、aproposコマンドはコマンド名称だけでなく、マニュアル内容も検索対象に含めています。
[root@localhost ~]# apropos 検索 apropos (1) - マニュアルページの名前と要約文を検索... bsearch (3) - ソートされた配列を二分木検索 (binary sea... bzgrep (1) - bzip2 圧縮されている可能性のあるファイ... find (1) - ディレクトリ階層をたどって、条件を満... gawk (1) - パターン検索・処理言語 host (1) - ドメインサーバを使ってホスト名の検索... lfind (3) - 配列を線形検索する lkbib (1) - 文献目録データベースを検索する lookbib (1) - 文献目録データベースを検索する lsearch (3) - 配列を線形検索する manpath (1) - マニュアルページの検索パスを設定します wcschr (3) - ワイド文字文字列中のワイド文字を検索... wcscspn (3) - ワイド文字文字列から、与えた文字集合... wcspbrk (3) - ワイド文字列から、与えられたワイド文... zgrep (1) - 圧縮されている可能性のあるファイルで... [root@localhost ~]# whatis 検索 検索: 適切なものはありませんでした。# whatisでは不可
例①で説明した通り、aproposコマンドはマニュアル内容も検索対象であることから、このような使い方が可能です。
これで「検索」に関するコマンドを疑似的に検索している形です。
ただし、日本語マニュアルがインストールされていないともちろんヒットしません。
whatisデータベース
whatisコマンドやaproposコマンドは「whatisデータベース」というマニュアルのデータベースを対象に検索を行っています。
新しいコマンドをインストールした際などは、whatisデータベースを更新しないと正しい結果が得られません。
whatisデータベースを更新するコマンドが、「makewhatis」「mandb」です。
makewhais | |
---|---|
意味 | whatisデータベースを更新する。 |
書式 | whatis |
mandb | |
---|---|
意味 | whatisデータベースを更新する。 |
書式 | mandb |
makewhatisコマンドは古いコマンドであり、現在ではmandbコマンドを使用します。
[root@localhost ~]# mandb /usr/share/man 内の古いデータベース要素を取り除いています... /usr/share/man 配下のマニュアルページを処理しています... /usr/share/man/hu 内の古いデータベース要素を取り除いています... /usr/share/man/hu 配下のマニュアルページを処理しています... /usr/share/man/ja 内の古いデータベース要素を取り除いています... /usr/share/man/ja 配下のマニュアルページを処理しています... /usr/share/man/de 内の古いデータベース要素を取り除いています... /usr/share/man/de 配下のマニュアルページを処理しています... (中略) 0 man subdirectories contained newer manual pages. 0 manual pages were added. 0 stray cats were added. 0 old database entries were purged.
まとめ
今回は、whatisコマンド、aproposコマンドについて解説しました。
それぞれの特徴をまとめておきます。
コマンド | 書式 | 検索方法 | その他の特徴 |
---|---|---|---|
whatis | whatis [オプション] 検索文字列 | 完全一致 | 名称のみを検索対象とする。 |
apropos | apropos [オプション] 検索文字列 | 部分一致(正規表現) | 名称だけでなく、説明文も検索対象である。 |
最後に、確認問題で今回の記事で得た知識を確かめましょう。
確認問題
次のコマンドのうち、「ssh」から始まるマニュアルを検索するものはどれか。
A) apropos ssh
B) whatis ssh
C) which ssh
D) whatis -w ‘ssh*’
E) man ssh