Como você produz uma lista de todas as páginas de manual em uma seção específica?

25

Uma página de manual para fork, por exemplo, está na seção Chamadas do sistema que possui o número 2:

man 2 fork

Como você vê o que mais é a seção 2 sem recorrer ao Google?

xyz
fonte
Sem google, mas via Web, vá para man7.org/linux/man-pages/dir_section_2.html (ou página principal aqui: kernel.org/doc/man-pages )
Belacqua

Respostas:

4

Este comando lista os nomes classificados de todas as entradas na seção fornecida:

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

Se você quiser ver os nomes dos caminhos, use:

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

Isso diz manpara procurar em uma seção todos os comandos usando o padrão curinga *(aspas invertidas para que o shell não o interprete). -alocaliza todas as correspondências, -Wimprime os nomes dos caminhos em vez de exibir as páginas e -S 1especifica a seção um. Mude 1para a seção que você deseja pesquisar.

O sedcomando retira as extensões do nome do arquivo; remova-o se desejar ver os nomes de arquivos completos. sortclassifica os resultados ( -uremove duplicatas).

Para reutilização conveniente, isso define uma função shell Bash:

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

Por exemplo, você pode invocá-lo mansect 3para ver as entradas na seção três.

[Testado no macOS.]

Chris Page
fonte
Bom - obrigado. Recebo algumas duplicatas (por exemplo, caminhos em /Applications/Xcode.app e "Accelerate" na seção 7), mas nada colocando um uniqno pipeline não é corrigido.
Xyz
@xyz: Atualizei o comando de classificação sort -upara remover duplicatas.
Chris Página
24

Para listar todos instalados homem páginas de uma seção específica, você pode 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
fonte
"apropos: -s: opção desconhecida"
Michael Mrozek
@MichaelMrozek que sistema você está usando? Funciona para mim, por exemplo: saída de apropos -s 2 -w '*'
Ulrich Dangel
Obrigado. A opção -s não está presente no Mac OS X, provavelmente do BSD.
xyz
@ f100 Ah ok, talvez tenteman -a -s 2 '*'
Ulrich Dangel
Parece mais isso, mas, em vez de listá-los, na verdade, está invocando o visualizador para cada um deles. Eu hackeei uma função para fazer a listagem que eu publiquei em outro comentário. Ele provavelmente tem problemas, mas é o suficiente para me :)
xyz
20

As páginas de manual geralmente são colocadas /usr/share/man, mas verificam $MANPATH, e são organizadas em seções como:

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

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

 ...

Para listar todas as páginas de manual da seção 2 instaladas, faça:

ls /usr/share/man/man2/

Ou o mais completo:

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

O último terá problemas se você tiver diretórios $MANPATHcom espaço em seus nomes.

Na maioria das distribuições, você também pode verificar as páginas de manual disponíveis com uma ferramenta de pacote, por exemplo, nas distribuições derivadas do Debian, você pode usar apt-fileo seguinte:

apt-file search /man2/
Thor
fonte
1
Obrigado - Este foi o começo que eu precisava. Eu criei uma função shell que é executada, por exemplo, lman 2e lista o nome sem adornos para cada página em uma nova linha e as páginas. O corpo da função é:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz
1

No Mac OS X, a única coisa que posso trabalhar é a man -k . | grep -F '(3)'lista de tudo na seção 3.

zellyn
fonte
0

Eu sei que essa é uma pergunta muito antiga, no entanto, as respostas dadas aqui não funcionaram para mim. Portanto , criei a seguinte linha que funciona no Ubuntu 18.04 e no macOS Mojave, 10.14.6:

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

Atraso rápido:

  • resposta de Thors: $(man --path | tr ':' ' ')para obter os caminhos atuais das páginas de manual
  • find <man paths> -type f -path '*man2*' -exec basename {} \; obtém os nomes de arquivos de todos os arquivos regulares nos caminhos do homem
  • sed se livra da extensão do arquivo
  • sort alfabeticamente.
Ben
fonte