特定のセクションのすべてのマニュアルページのリストをどのように出力しますか?


25

forkたとえば、のマニュアルページは、番号2のシステムコールセクションにあります。

man 2 fork

Googleに頼らずにセクション2が他に何であるかをどのように見ますか?


グーグルなしで、ウェブ経由で、man7.org / linux / man-pages / dir_section_2.html(またはここのメインページ:kernel.org/doc/man-pages )に移動します
belacqua

回答:


4

このコマンドは、指定されたセクションのすべてのエントリのソートされた名前をリストします。

man -aWS 1 \* | xargs basename | sed 's/\.[^.]*$//' | sort -u

パス名を表示する場合は、次を使用します。

man -aWS 1 \* | sed 's/\.[^.]*$//' | sort

これはman、ワイルドカードパターンを使用してすべてのコマンドのセクションを検索するように指示します*(シェルが解釈しないようにバックスラッシュで囲みます)。-a一致するものをすべて検索し-W、ページを表示する代わりにパス名を出力し、-S 1セクション1 を指定します。1を検索するセクションに変更します。

このsedコマンドはファイル名拡張子を取り除きます。完全なファイル名を表示する場合は削除してください。sort結果をソートします(-u重複を削除します)。

便利な再利用のために、これはBashシェル関数を定義します:

function mansect { man -aWS ${1?man section not provided} \* | xargs basename | sed 's/\.[^.]*$//' | sort -u; }

たとえばmansect 3、セクション3のエントリを表示するように呼び出すことができます。

[macOSでテスト済み。]


よかった、ありがとう。いくつかの重複(たとえば、/ Applications / Xcode.appのパスとセクション7の「高速化」)を取得しますuniqが、パイプラインに何も配置しても修正されません。
xyz

@xyz:sortコマンドを更新sort -uして重複を削除しました。
クリスページ

24

特定のセクションからインストールされたすべてのmanページをリストするには、aproposを使用できます。

apropos -s 2 .  # use an regex for apropos . means anything
apropos -s 2 -w '*'  # use unix globbing for apropos

"Aproposは:-s:未知のオプション"
マイケル・Mrozek

@MichaelMrozekどのシステムを使用していますか?それは、私の作品例:aproposの-s 2 -w「*」の出力
ウルリッヒ・Dangel

ありがとう。-sオプションは、おそらくBSDからのMac OS X aproposには存在しません。
xyz

@ f100ああ、多分試してみようman -a -s 2 '*'
Ulrich Dangel

それはもっと似ているように見えますが、それらをリストするのではなく、実際にそれぞれのビューアーを順番に呼び出しています。別のコメントで投稿したリストを作成する機能をハックしました。問題がある可能性が高いですが、
それで

20

通常、マンページはに配置されますが、を/usr/share/man確認し$MANPATH、次のようなセクションに編成されます。

 Section 1:
 /usr/share/man/man1/

 Section 2:
 /usr/share/man/man2/

 ...

したがって、インストールされているすべてのセクション2のマンページをリストするには、次のようにします。

ls /usr/share/man/man2/

またはより完全なもの:

find $(echo $MANPATH | tr ':' ' ') -path '*/man2/*'

後者$MANPATHは、名前にスペースが含まれるディレクトリがある場合に問題が発生します。

ほとんどのディストリビューションでは、パッケージツールを使用して利用可能なマニュアルページを確認することもできます。たとえば、Debian派生ディストリビューションでは次のapt-fileように使用できます。

apt-file search /man2/

1
ありがとう-これが私が必要としたスタートでした。たとえばlman 2、実行されるシェル関数を作成し、各ページの装飾されていない名前を新しい行にリストして、ページングします。関数の本体は次のとおりですfind $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
。– xyz

1

Mac OS Xで作業できるのはman -k . | grep -F '(3)'、セクション3のすべてを一覧表示することだけです。


0

これは非常に古い質問ですが、ここで与えられた答えはすべてうまくいきませんでした。そのため、Ubuntu 18.04およびmacOS Mojave 10.14.6で動作する次のワンライナーを思い付きました。

find $(man --path | tr ':' ' ') -type f -path '*man2*' \
  -exec basename {} \; | sed 's/\..*//' | sort

クイックランダウン:

  • フォームThors回答:$(man --path | tr ':' ' ')マニュアルページの現在のパスを取得するには
  • find <man paths> -type f -path '*man2*' -exec basename {} \; manパス内のすべての通常ファイルのファイル名を取得します
  • sed ファイル拡張子を取り除きます
  • sort アルファベット順に。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.