How do you output a list of all man pages in a particular section?

12,923

Solution 1

This command lists the sorted names of all the entries in the given section:

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

If you want to see the pathnames, use:

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

This tells man to search a section for all commands using the wildcard pattern * (backslash-quoted so the shell doesn't interpret it). -a finds all matches, -W prints the pathnames instead of displaying the pages, and -S 1 specifies section one. Change the 1 to whatever section you want to search.

The sed command strips the filename extensions; remove it if you want to see the complete filenames. sort sorts the results (-u removes duplicates).

For convenient reuse, this defines a Bash shell function:

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

For example, you can invoke it as mansect 3 to see the entries in section three.

[Tested on macOS.]

Solution 2

To list all installed man pages from a specific section you can use apropos:

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

Solution 3

Manpages are usually placed in /usr/share/man, but check $MANPATH, and are organized into sections like so:

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

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

 ...

So to list all installed section 2 manpages, do:

ls /usr/share/man/man2/

Or the more complete one:

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

The latter one will have problems if you have directories in $MANPATH with space in their names.

On most distributions you can also check available man pages with a package tool, e.g. on Debian derived distributions you can use apt-file like so:

apt-file search /man2/

Solution 4

On Mac OS X, the only thing I can get to work is man -k . | grep -F '(3)', which lists everything in section 3.

Solution 5

I know this is a very old question, however the answers given here all didn't work for me. Therefore I came up with the following one-liner that works on Ubuntu 18.04 and macOS Mojave, 10.14.6:

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

Quick run down:

  • form Thors answer: $(man --path | tr ':' ' ') to get the current paths of the man pages
  • find <man paths> -type f -path '*man2*' -exec basename {} \; gets the file names of all regular files in the man paths
  • sed gets rid of the file extension
  • sort alphabetically.
Share:
12,923

Related videos on Youtube

xyz
Author by

xyz

Updated on September 18, 2022

Comments

  • xyz
    xyz over 1 year

    A man page for fork, for example, is in the System Calls section that has number 2:

    man 2 fork

    How do you see what else is section 2 without resorting to Google?

  • Michael Mrozek
    Michael Mrozek almost 12 years
    "apropos: -s: unknown option"
  • xyz
    xyz almost 12 years
    Thanks. The -s option is not present in Mac OS X apropos, which is presumably from BSD.
  • sunnysideup
    sunnysideup almost 12 years
    @f100 Ah ok, maybe try man -a -s 2 '*'
  • xyz
    xyz almost 12 years
    Thanks - This was the start I needed. I made a shell function that is run e.g. lman 2 and lists the unadorned name for each page on a new line and pages them. The function's body is: find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
  • xyz
    xyz almost 12 years
    That seems more like it, but instead of listing them, it's actually invoking the viewer for each one in turn. I've hacked up a function to do listing which I posted in another comment. It likely has issues but it's enough for me :)
  • Admin
    Admin about 8 years
    @xyz, please edit your question and add the Mac OSX tag to it so people will not take time trying parameters that do not belong to their Unices/Unix-Like systems. :)
  • xyz
    xyz over 7 years
    Nice - Thanks. I get some duplicates (e.g. paths in /Applications/Xcode.app and "Accelerate" in section 7), but nothing putting a uniq in the pipeline doesn't fix.
  • Chris Page
    Chris Page over 7 years
    @xyz: I updated the sort command to sort -u to remove duplicates.
  • Jonathan Ginsburg
    Jonathan Ginsburg over 3 years
    I get No manual entry for *
  • chanceoperation
    chanceoperation about 3 years
    Works great on macOS 10.15.7 thanks @Ben