Come si genera un elenco di tutte le pagine man in una particolare sezione?


Risposte:


4

Questo comando elenca i nomi ordinati di tutte le voci nella sezione indicata:

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

Se vuoi vedere i nomi dei percorsi, usa:

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

Questo dice mandi cercare una sezione per tutti i comandi usando il modello jolly *(citato da una barra rovesciata in modo che la shell non lo interpreti). -atrova tutte le corrispondenze, -Wstampa i nomi dei percorsi anziché visualizzare le pagine e -S 1specifica la sezione uno. Passa 1alla sezione che desideri cercare.

Il sedcomando elimina le estensioni del nome file; rimuovilo se vuoi vedere i nomi di file completi. sortordina i risultati ( -urimuove i duplicati).

Per un comodo riutilizzo, questo definisce una funzione shell Bash:

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

Ad esempio, puoi invocarlo mansect 3per vedere le voci nella sezione tre.

[Testato su macOS.]


Bene grazie. Ottengo alcuni duplicati (ad esempio i percorsi in /Applications/Xcode.app e "Accelerate" nella sezione 7), ma nulla che inserisce un uniqin pipeline non risolve.
xyz,

@xyz: ho aggiornato il comando sort sort -uper rimuovere i duplicati.
Chris Page

24

Per elencare tutte le pagine man installate da una sezione specifica è possibile usare apropos :

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

"a proposito: -s: opzione sconosciuta"
Michael Mrozek

@MichaelMrozek che sistema stai usando? Funziona per me, ad esempio: output di apropos -s 2 -w '*'
Ulrich Dangel,

Grazie. L'opzione -s non è presente a proposito di Mac OS X, presumibilmente da BSD.
xyz,

@ f100 Ah ok, forse provaman -a -s 2 '*'
Ulrich Dangel il

Sembra più simile, ma invece di elencarli, in realtà sta invocando lo spettatore per ognuno a turno. Ho hackerato una funzione per fare un elenco che ho pubblicato in un altro commento. Probabilmente ha problemi ma è abbastanza per me :)
xyz

20

Le pagine man sono generalmente posizionate /usr/share/man, ma spuntano $MANPATHe sono organizzate in sezioni in questo modo:

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

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

 ...

Quindi per elencare tutte le manpage della sezione 2 installate, fare:

ls /usr/share/man/man2/

O il più completo:

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

Quest'ultimo avrà problemi se si dispone di directory $MANPATHcon spazio nei loro nomi.

Sulla maggior parte delle distribuzioni puoi anche controllare le pagine man disponibili con uno strumento per pacchetti, ad esempio sulle distribuzioni derivate da Debian che puoi usare in questo apt-filemodo:

apt-file search /man2/

1
Grazie - Questo è stato l'inizio di cui avevo bisogno. Ho creato una funzione shell che viene eseguita ad es. lman 2Ed elenca il nome senza ornamenti per ogni pagina su una nuova riga e le pagine. Il corpo della funzione è:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz

1

Su Mac OS X, l'unica cosa che riesco a lavorare è man -k . | grep -F '(3)', che elenca tutto nella sezione 3.


0

So che questa è una domanda molto antica, tuttavia le risposte fornite qui non hanno funzionato per me. Pertanto ho ideato il seguente one-liner che funziona su Ubuntu 18.04 e macOS Mojave, 10.14.6:

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

Esecuzione rapida:

  • modulo Risposta di Thors: $(man --path | tr ':' ' ')per ottenere i percorsi attuali delle pagine man
  • find <man paths> -type f -path '*man2*' -exec basename {} \; ottiene i nomi dei file di tutti i file regolari nei percorsi man
  • sed elimina l'estensione del file
  • sort in ordine alfabetico.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.