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