¿Cómo se genera una lista de todas las páginas man en una sección en particular?

Respuestas:

4

Este comando enumera los nombres ordenados de todas las entradas en la sección dada:

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

Si desea ver los nombres de las rutas, use:

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

Esto le indica manque busque en una sección todos los comandos utilizando el patrón comodín *(barra invertida entre comillas para que el shell no lo interprete). -aencuentra todas las coincidencias, -Wimprime los nombres de las rutas en lugar de mostrar las páginas y -S 1especifica la sección uno. Cambie 1a la sección que desee buscar.

El sedcomando elimina las extensiones de nombre de archivo; elimínelo si desea ver los nombres completos de los archivos. sortordena los resultados ( -uelimina duplicados).

Para una reutilización conveniente, esto define una función de shell Bash:

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

Por ejemplo, puede invocarlo mansect 3para ver las entradas en la sección tres.

[Probado en macOS.]

Chris Page
fuente
Genial gracias. Obtengo algunos duplicados (p. Ej., Rutas en /Applications/Xcode.app y "Accelerate" en la sección 7), pero uniqno se soluciona nada que ponga un en curso .
xyz
@xyz: Actualicé el comando de clasificación sort -upara eliminar duplicados.
Chris Page
24

Para enumerar todas las páginas man instaladas de una sección específica, puede usar a propósito :

apropos -s 2 .  # use an regex for apropos . means anything
apropos -s 2 -w '*'  # use unix globbing for apropos
Ulrich Dangel
fuente
"a propósito: -s: opción desconocida"
Michael Mrozek
@MichaelMrozek ¿qué sistema estás usando? Funciona para mí, por ejemplo: salida de apropos -s 2 -w '*'
Ulrich Dangel
Gracias. La opción -s no está presente en Mac OS X a propósito, que presumiblemente es de BSD.
xyz
@ f100 Ah ok, tal vez intenteman -a -s 2 '*'
Ulrich Dangel
Parece más parecido, pero en lugar de enumerarlos, en realidad está invocando al espectador para cada uno por turno. He pirateado una función para hacer un listado que publiqué en otro comentario. Es probable que tenga problemas, pero es suficiente para mí :)
xyz
20

Las páginas de manual generalmente se colocan /usr/share/man, pero comprueban $MANPATH, y se organizan en secciones de la siguiente manera:

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

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

 ...

Para enumerar todas las páginas de manual de la sección 2 instaladas, haga lo siguiente:

ls /usr/share/man/man2/

O el más completo:

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

El último tendrá problemas si tiene directorios $MANPATHcon espacio en sus nombres.

En la mayoría de las distribuciones, también puede consultar las páginas man disponibles con una herramienta de paquete, por ejemplo, en las distribuciones derivadas de Debian que puede usar apt-fileasí:

apt-file search /man2/
Thor
fuente
1
Gracias. Este fue el comienzo que necesitaba. Hice una función de shell que se ejecuta, por ejemplo, lman 2y enumera el nombre sin adornos para cada página en una nueva línea y las pagina. El cuerpo de la función es:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz
1

En Mac OS X, lo único que puedo hacer para trabajar es man -k . | grep -F '(3)'que enumera todo en la sección 3.

zellyn
fuente
0

Sé que esta es una pregunta muy antigua, sin embargo, las respuestas dadas aquí no funcionaron para mí. Por lo tanto, se me ocurrió el siguiente one-liner que funciona en Ubuntu 18.04 y macOS Mojave, 10.14.6:

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

Descenso rápido:

  • respuesta de Thors: $(man --path | tr ':' ' ')para obtener las rutas actuales de las páginas man
  • find <man paths> -type f -path '*man2*' -exec basename {} \; Obtiene los nombres de archivo de todos los archivos normales en las rutas de acceso man
  • sed se deshace de la extensión del archivo
  • sort alfabéticamente.
Ben
fuente