Jak wypisujesz listę wszystkich stron podręcznika w określonej sekcji?

Odpowiedzi:

4

To polecenie wyświetla posortowane nazwy wszystkich pozycji w danej sekcji:

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

Jeśli chcesz zobaczyć nazwy ścieżek, użyj:

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

Mówi to, manaby przeszukać sekcję dla wszystkich poleceń za pomocą wzoru wieloznacznego *(cudzysłów odwrócony, aby powłoka go nie interpretowała). -aznajduje wszystkie dopasowania, -Wdrukuje nazwy ścieżek zamiast wyświetlać strony i -S 1określa sekcję pierwszą. Zmień 1sekcję na dowolną, którą chcesz wyszukać.

sedPolecenie taśmy rozszerzenia nazwy pliku; usuń go, jeśli chcesz zobaczyć pełne nazwy plików. sortsortuje wyniki ( -uusuwa duplikaty).

Dla wygodnego ponownego użycia definiuje to funkcję powłoki Bash:

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

Na przykład możesz go wywołać, mansect 3aby zobaczyć wpisy w sekcji trzeciej.

[Testowany na macOS.]

Chris Page
źródło
Fajnie dzięki. Dostaję trochę duplikatów (np. Ścieżki w /Applications/Xcode.app i „Accelerate” w sekcji 7), ale nic nie umieszcza uniqw potoku nie naprawia.
xyz
@xyz: Zaktualizowałem polecenie sortowania, sort -uaby usunąć duplikaty.
Chris Page
24

Aby wyświetlić listę wszystkich zainstalowanych stron podręcznika z określonej sekcji, możesz użyć apropos :

apropos -s 2 .  # use an regex for apropos . means anything
apropos -s 2 -w '*'  # use unix globbing for apropos
Ulrich Dangel
źródło
„apropos: -s: nieznana opcja”
Michael Mrozek
@MichaelMrozek z jakiego systemu korzystasz? Działa dla mnie, np .: wyjście apropos -s 2 -w '*'
Ulrich Dangel
Dzięki. Opcja -s nie jest obecna w aproposach Mac OS X, prawdopodobnie z BSD.
xyz
@ f100 Ah ok, może spróbujman -a -s 2 '*'
Ulrich Dangel
To wydaje się bardziej podobne, ale zamiast ich wymienić, w rzeczywistości wywołuje każdego z nich po kolei. Zhackowałem funkcję do zrobienia listy, którą zamieściłem w innym komentarzu. Prawdopodobnie ma problemy, ale dla mnie to wystarczy :)
xyz
20

Strony podręczne są zwykle umieszczane /usr/share/man, ale sprawdzane $MANPATHi podzielone na następujące sekcje:

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

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

 ...

Aby wyświetlić listę wszystkich zainstalowanych stron sekcji 2, wykonaj:

ls /usr/share/man/man2/

Lub bardziej kompletny:

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

Ten ostatni będzie miał problemy, jeśli masz katalogi $MANPATHze spacją w ich nazwach.

W większości dystrybucji możesz również sprawdzić dostępne strony podręcznika man za pomocą narzędzia do tworzenia pakietów, np. W dystrybucjach pochodnych Debiana możesz użyć apt-file:

apt-file search /man2/
Thor
źródło
1
Dzięki - To był początek, którego potrzebowałem. Zrobiłem funkcję powłoki, która jest uruchamiana np. lman 2I wyświetla nieprzyzwoitą nazwę dla każdej strony w nowym wierszu i stron. Ciało funkcji to:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz
1

W systemie Mac OS X jedyne, co mogę zabrać do pracy, to man -k . | grep -F '(3)'lista wszystkich elementów w sekcji 3.

zellyn
źródło
0

Wiem, że to bardzo stare pytanie, jednak wszystkie podane tutaj odpowiedzi nie działały dla mnie. Dlatego wymyśliłem następujący liniowiec, który działa na Ubuntu 18.04 i macOS Mojave, 10.14.6:

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

Szybki bieg:

  • z formularza Thors odpowiedz: $(man --path | tr ':' ' ')aby uzyskać bieżące ścieżki stron podręcznika man
  • find <man paths> -type f -path '*man2*' -exec basename {} \; pobiera nazwy wszystkich zwykłych plików ze ścieżek man
  • sed pozbywa się rozszerzenia pliku
  • sort alfabetycznie.
Ben
źródło