Comment produire une liste de toutes les pages de manuel d'une section particulière?

Réponses:

4

Cette commande répertorie les noms triés de toutes les entrées dans la section donnée:

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

Si vous voulez voir les noms de chemin, utilisez:

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

Cela indique mande rechercher dans une section toutes les commandes à l'aide du modèle générique *(entre guillemets antislash afin que le shell ne l'interprète pas). -arecherche toutes les correspondances, -Wimprime les chemins d'accès au lieu d'afficher les pages et -S 1spécifie la première section. Modifiez la 1section dans la section que vous souhaitez rechercher.

La sedcommande supprime les extensions de nom de fichier; supprimez-le si vous voulez voir les noms de fichiers complets. sorttrie les résultats ( -usupprime les doublons).

Pour une réutilisation pratique, cela définit une fonction de shell Bash:

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

Par exemple, vous pouvez l'invoquer mansect 3pour voir les entrées de la section trois.

[Testé sur macOS.]

Chris Page
la source
Bien - Merci. J'obtiens des doublons (par exemple des chemins dans /Applications/Xcode.app et "Accelerate" dans la section 7), mais rien de mettre un uniqdans le pipeline ne résout pas.
xyz
@xyz: J'ai mis à jour la commande sort sort -upour supprimer les doublons.
Chris Page
24

Pour répertorier toutes les pages de manuel installées d'une section spécifique, vous pouvez utiliser apropos :

apropos -s 2 .  # use an regex for apropos . means anything
apropos -s 2 -w '*'  # use unix globbing for apropos
Ulrich Dangel
la source
"apropos: -s: option inconnue"
Michael Mrozek
@MichaelMrozek quel système utilisez-vous? Cela fonctionne pour moi, par exemple: sortie de apropos -s 2 -w '*'
Ulrich Dangel
Merci. L'option -s n'est pas présente dans Mac OS X apropos, qui est vraisemblablement de BSD.
xyz
@ f100 Ah ok, essayez peut-êtreman -a -s 2 '*'
Ulrich Dangel
Cela ressemble plus à cela, mais au lieu de les répertorier, cela appelle en fait le spectateur pour chacun à son tour. J'ai piraté une fonction pour faire la liste que j'ai publiée dans un autre commentaire. Il a probablement des problèmes, mais cela me suffit :)
xyz
20

Les pages de manuel sont généralement placées dans /usr/share/man, mais vérifiez $MANPATH, et sont organisées en sections comme ceci:

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

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

 ...

Donc pour lister toutes les pages de manuel de la section 2 installées, faites:

ls /usr/share/man/man2/

Ou le plus complet:

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

Ce dernier aura des problèmes si vous avez des répertoires $MANPATHavec de l'espace dans leurs noms.

Sur la plupart des distributions, vous pouvez également vérifier les pages de manuel disponibles avec un outil de package, par exemple sur les distributions dérivées de Debian que vous pouvez utiliser apt-filecomme ceci:

apt-file search /man2/
Thor
la source
1
Merci - C'était le début dont j'avais besoin. J'ai fait une fonction shell qui est exécutée par exemple lman 2et répertorie le nom sans fioritures de chaque page sur une nouvelle ligne et les pages. Le corps de la fonction est:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz
1

Sur Mac OS X, la seule chose que je peux obtenir au travail est man -k . | grep -F '(3)', qui répertorie tout dans la section 3.

zellyn
la source
0

Je sais que c'est une très vieille question, mais les réponses données ici n'ont pas fonctionné pour moi. Par conséquent, j'ai trouvé le one-liner suivant qui fonctionne sur Ubuntu 18.04 et macOS Mojave, 10.14.6:

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

Descente rapide:

  • forme Thors réponse: $(man --path | tr ':' ' ')obtenir les chemins actuels des pages de manuel
  • find <man paths> -type f -path '*man2*' -exec basename {} \; obtient les noms de fichiers de tous les fichiers normaux dans les chemins d'accès man
  • sed se débarrasse de l'extension de fichier
  • sort alphabétiquement.
Ben
la source