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?
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityA 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?
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/
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
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.]
uniq
in the pipeline doesn't fix.
On Mac OS X, the only thing I can get to work is man -k . | grep -F '(3)'
, which lists everything in section 3.
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:
$(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 pathssed
gets rid of the file extensionsort
alphabetically.man man
for more details. (In particular, it can search for things 'near the roots', and all sectionN pages aren't under manN subfolders.)