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

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

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/

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.]

Tags:

Shell

Man