Wie wird eine Liste aller Manpages in einem bestimmten Abschnitt ausgegeben?

25

Eine Manpage für forkbefindet sich beispielsweise im Abschnitt Systemaufrufe mit der Nummer 2:

man 2 fork

Wie sehen Sie, was sonst noch in Abschnitt 2 steht, ohne auf Google zurückzugreifen?

xyz
quelle
Ohne Google, aber über das Internet, gehen Sie zu man7.org/linux/man-pages/dir_section_2.html (oder zur Hauptseite hier: kernel.org/doc/man-pages )
belacqua

Antworten:

4

Dieser Befehl listet die sortierten Namen aller Einträge im angegebenen Abschnitt auf:

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

Wenn Sie die Pfadnamen sehen möchten, verwenden Sie:

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

Dies weist Sie manan, einen Abschnitt nach allen Befehlen zu durchsuchen, indem Sie das Platzhalter-Muster verwenden *(mit Backslash-Anführungszeichen, damit die Shell es nicht interpretiert). -afindet alle Übereinstimmungen, -Wdruckt die Pfadnamen, anstatt die Seiten anzuzeigen, und -S 1gibt den ersten Abschnitt an. Wechseln Sie zu dem 1Abschnitt, den Sie durchsuchen möchten.

Der sedBefehl entfernt die Dateinamenerweiterungen. Entfernen Sie es, wenn Sie die vollständigen Dateinamen sehen möchten. sortsortiert die Ergebnisse ( -uentfernt Duplikate).

Zur bequemen Wiederverwendung definiert dies eine Bash-Shell-Funktion:

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

Sie können es beispielsweise aufrufen mansect 3, um die Einträge in Abschnitt drei anzuzeigen .

[Getestet unter macOS.]

Chris Page
quelle
Nett, danke. Ich erhalte einige Duplikate (z. B. Pfade in /Applications/Xcode.app und "Accelerate" in Abschnitt 7), aber nichts, was ein uniqin die Pipeline stellt, kann das Problem nicht beheben.
XYZ
@xyz: Ich habe den Sortierbefehl aktualisiert sort -u, um Duplikate zu entfernen.
Chris Seite
24

Um alle installierten Manpages eines bestimmten Abschnitts aufzulisten, können Sie apropos verwenden :

apropos -s 2 .  # use an regex for apropos . means anything
apropos -s 2 -w '*'  # use unix globbing for apropos
Ulrich Dangel
quelle
"apropos: -s: unbekannte Option"
Michael Mrozek
@MichaelMrozek welches System benutzt du? Das funktioniert bei mir zB: Ausgabe von apropos -s 2 -w '*'
Ulrich Dangel
Vielen Dank. Die Option -s ist in Mac OS X apropos, das vermutlich von BSD stammt, nicht vorhanden.
XYZ
@ f100 Ah ok, vielleicht versuchenman -a -s 2 '*'
Ulrich Dangel
Das scheint eher so zu sein, aber anstatt sie aufzulisten, ruft es den Betrachter für jede einzelne nacheinander auf. Ich habe eine Funktion zum Auflisten gehackt, die ich in einem anderen Kommentar gepostet habe. Es hat wahrscheinlich Probleme, aber es ist genug für mich :)
XYZ
20

Hilfeseiten werden normalerweise in folgenden Abschnitten abgelegt /usr/share/man, aber geprüft $MANPATH:

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

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

 ...

Gehen Sie wie folgt vor, um alle installierten Hilfeseiten für Abschnitt 2 aufzulisten:

ls /usr/share/man/man2/

Oder die vollständigere:

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

Letzteres hat Probleme, wenn Sie Verzeichnisse $MANPATHmit Leerzeichen im Namen haben.

Bei den meisten Distributionen können Sie die verfügbaren Manpages auch mit einem Pakettool überprüfen, z. B. bei von Debian abgeleiteten Distributionen, die Sie folgendermaßen verwenden können apt-file:

apt-file search /man2/
Thor
quelle
1
Danke - Dies war der Anfang, den ich brauchte. Ich habe eine Shell-Funktion erstellt, die z. B. ausgeführt wird lman 2und den schmucklosen Namen für jede Seite in einer neuen Zeile auflistet und mit Seiten versehen. Der Körper der Funktion ist:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz
1

Unter Mac OS X kann ich nur arbeiten, indem ich man -k . | grep -F '(3)'alles in Abschnitt 3 aufführe.

Zellyn
quelle
0

Ich weiß, dass dies eine sehr alte Frage ist, aber die hier gegebenen Antworten haben bei mir alle nicht funktioniert. Aus diesem Grund habe ich mir folgenden Einzeiler ausgedacht , der unter Ubuntu 18.04 und macOS Mojave 10.14.6 funktioniert:

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

Schnell runter rennen:

  • form Thors answer: $(man --path | tr ':' ' ')um die aktuellen Pfade der manpages zu erhalten
  • find <man paths> -type f -path '*man2*' -exec basename {} \; Ruft die Dateinamen aller regulären Dateien in den man-Pfaden ab
  • sed Entfernt die Dateierweiterung
  • sort alphabetisch.
Ben
quelle