Difference between revisions of "Man page"

From ArchWiki
Jump to: navigation, search
(Reading local man pages)
(update Pkg/AUR templates (https://github.com/lahwaacz/wiki-scripts/blob/master/update-package-templates.py))
 
(61 intermediate revisions by 28 users not shown)
Line 1: Line 1:
 +
{{Lowercase title}}
 
[[Category:System administration]]
 
[[Category:System administration]]
[[ko:Man Page]]
+
[[ar:Man page]]
[[ru:Man Page]]
+
[[es:Man page]]
[[zh-CN:Man Page]]
+
[[ja:Man ページ]]
{{Article summary start|Summary}}
+
[[ko:Man page]]
{{Article summary text|Information on man pages, along with recommendations on how to improve their usage}}
+
[[ru:Man page]]
<!--
+
[[zh-cn:Man page]]
{{Article summary heading|Related}}
+
{{Article summary wiki|}}
+
-->
+
{{Article summary end}}
+
{{DISPLAYTITLE:man pages}}
+
 
'''man pages''' (abbreviation for "manual pages") are the extensive documentation that comes preinstalled with almost all substantial UNIX-like operating systems, including Arch Linux. The command used to display them is {{Ic|man}}.
 
'''man pages''' (abbreviation for "manual pages") are the extensive documentation that comes preinstalled with almost all substantial UNIX-like operating systems, including Arch Linux. The command used to display them is {{Ic|man}}.
  
 
In spite of their scope, man pages are designed to be self-contained documents, consequentially limiting themselves to referring to other man pages when discussing related subjects. This is in sharp contrast with the hyperlink-aware info files, GNU's attempt at replacing the traditional man page format.
 
In spite of their scope, man pages are designed to be self-contained documents, consequentially limiting themselves to referring to other man pages when discussing related subjects. This is in sharp contrast with the hyperlink-aware info files, GNU's attempt at replacing the traditional man page format.
  
==Accessing Man Pages==
+
[[Core utilities#less|less]] is the default pager used with ''man''.
 +
 
 +
== Accessing Man Pages ==
 
To read a man page, simply enter:
 
To read a man page, simply enter:
  
Line 36: Line 34:
 
to read the man page on {{Ic|/etc/passwd}}, rather than the {{Ic|passwd}} utility.
 
to read the man page on {{Ic|/etc/passwd}}, rather than the {{Ic|passwd}} utility.
  
Very brief descriptions of programs can be read out of man pages without displaying the whole page using the {{Ic|whatis}} command. For example, for a brief description of ls, type:
+
One-line descriptions of man pages can be displayed using the {{Ic|whatis}} command. For example, for a brief description of the man page sections about {{ic|ls}}, type:
 
+
{{hc|$ whatis ls|ls (1p)              - list directory contents
$ whatis ls
+
ls (1)              - list directory contents}}
 
+
and {{Ic|whatis}} will output "list directory contents."
+
  
==Format==
+
== Format ==
 
Man pages all follow a fairly standard format, which helps in navigating them. Some sections which are often present include:
 
Man pages all follow a fairly standard format, which helps in navigating them. Some sections which are often present include:
 
* NAME - The name of the command and a one-line statement of its purpose.
 
* NAME - The name of the command and a one-line statement of its purpose.
Line 55: Line 51:
 
* AUTHOR, HISTORY, COPYRIGHT, LICENSE, WARRANTY - Information about the program, its past, its terms of use, and its creator.
 
* AUTHOR, HISTORY, COPYRIGHT, LICENSE, WARRANTY - Information about the program, its past, its terms of use, and its creator.
  
==Searching manuals==
+
== Searching manuals ==
Whilst the {{Ic|man}} utility allows users to display man pages, a problem arises when one knows not the exact name of the desired manual page in the first place! Fortunately, the {{Ic|-k}} or {{Ic|--apropos}} options can be used to search the manual page descriptions for instances of a given keyword.
+
Whilst the {{Ic|man}} utility allows users to display man pages, and search their contents via ''less'', a problem arises when one knows not the exact name of the desired manual page in the first place! Fortunately, the {{Ic|-k}} or {{Ic|--apropos}} options can be used to search the manual page descriptions for instances of a given keyword.
  
 
The research feature is provided by a dedicated cache. By default you may not have any cache built and all your searches will give you the ''nothing appropriate'' result. You can generate the cache or update it by running
 
The research feature is provided by a dedicated cache. By default you may not have any cache built and all your searches will give you the ''nothing appropriate'' result. You can generate the cache or update it by running
Line 80: Line 76:
 
  $ man -K password
 
  $ man -K password
  
==Colored man pages==
+
== Colored man pages ==
 
Color-enabled man pages allow for a clearer presentation and easier digestion of the content.
 
Color-enabled man pages allow for a clearer presentation and easier digestion of the content.
 
There are two prevalent methods for achieving colored man pages: using {{Ic|less}}, or opting for {{Ic|most}}.
 
There are two prevalent methods for achieving colored man pages: using {{Ic|less}}, or opting for {{Ic|most}}.
  
===Using {{ic|less}} (Recommended) ===
+
=== Using less (Recommended) ===
:<small>''Source: [http://nion.modprobe.de/blog/archives/572-less-colors-for-man-pages.html nion's blog - less colors for man pages]''</small>
+
:<small>''Source: [http://linuxtidbits.wordpress.com/2009/03/23/less-colors-for-man-pages/ Less Colors For Man Pages | Linux Tidbits]''</small>
 
This method has the advantage that {{Ic|less}} has a bigger feature set than {{Ic|most}}, and is the default for viewing man pages.
 
This method has the advantage that {{Ic|less}} has a bigger feature set than {{Ic|most}}, and is the default for viewing man pages.
  
Line 91: Line 87:
 
{{hc|~/.bashrc|
 
{{hc|~/.bashrc|
 
<nowiki>man() {
 
<nowiki>man() {
     env LESS_TERMCAP_mb=$(printf "\e[1;31m") \
+
     env LESS_TERMCAP_mb=$'\E[01;31m' \
LESS_TERMCAP_md=$(printf "\e[1;31m") \
+
    LESS_TERMCAP_md=$'\E[01;38;5;74m' \
LESS_TERMCAP_me=$(printf "\e[0m") \
+
    LESS_TERMCAP_me=$'\E[0m' \
LESS_TERMCAP_se=$(printf "\e[0m") \
+
    LESS_TERMCAP_se=$'\E[0m' \
LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
+
    LESS_TERMCAP_so=$'\E[38;5;246m' \
LESS_TERMCAP_ue=$(printf "\e[0m") \
+
    LESS_TERMCAP_ue=$'\E[0m' \
LESS_TERMCAP_us=$(printf "\e[1;32m") \
+
    LESS_TERMCAP_us=$'\E[04;38;5;146m' \
man "$@"
+
    man "$@"
 
}
 
}
 
</nowiki>}}
 
</nowiki>}}
  
To customize the colors, see [[Wikipedia:ANSI escape code]] for reference.
+
To see the changes in your Man Pages (without restarting bash or linux), you may run:
  
===Using {{ic|most}} (Not recommended)===
+
# source ~/.bashrc
 +
 
 +
For [[Fish]] a basic configuration would be:
 +
{{hc|~/.config/fish/config.fish|
 +
<nowiki>set -xU LESS_TERMCAP_mb (printf "\e[01;31m")      # begin blinking
 +
set -xU LESS_TERMCAP_md (printf "\e[01;31m")      # begin bold
 +
set -xU LESS_TERMCAP_me (printf "\e[0m")          # end mode
 +
set -xU LESS_TERMCAP_se (printf "\e[0m")          # end standout-mode
 +
set -xU LESS_TERMCAP_so (printf "\e[01;44;33m")  # begin standout-mode - info box
 +
set -xU LESS_TERMCAP_ue (printf "\e[0m")          # end underline
 +
set -xU LESS_TERMCAP_us (printf "\e[01;32m")      # begin underline
 +
</nowiki>}}
 +
 
 +
To see the changes in your Man Pages (without restarting fish or linux), you may run:
 +
 
 +
# source ~/.config/fish/config.fish
 +
 
 +
For a detailed explanation on these variables, see [http://unix.stackexchange.com/questions/108699/documentation-on-less-termcap-variables/108840#108840 this answer]. To customize the colors, see [[Wikipedia:ANSI escape code]] for reference.
 +
 
 +
==== If less doesn't display color man pages ====
 +
 
 +
{{Accuracy|Which terminals on which systems don't support [[wikipedia:ANSI_escape_code#SGR|SGR escape sequences]]? Old versions of ''less'' are not supported on Arch. Anyway, this option ''disables'' colors, and everything ''might'' have been just fine until the above has been applied.}}
 +
 
 +
On some systems, terminals don't understand SGR escape sequences, and older versions of {{Ic|less}} (without the -R option) don't understand SGR either. {{Ic|Groff}} offers a few solutions to fix this. The easiest one is to set and export the variable {{ic|GROFF_NO_SGR}} in your terminal environment:
 +
 
 +
  export GROFF_NO_SGR=1
 +
 
 +
This tells {{Ic|groff}} to make adjustments when it is passed a man page for formatting.
 +
 
 +
=== Using most (Not recommended) ===
 
The basic function of 'most' is similar to {{Ic|less}} and {{Ic|more}}, but it has a smaller feature set. Configuring most to use colors is easier than using less, but additional configuration is necessary to make most behave like less.
 
The basic function of 'most' is similar to {{Ic|less}} and {{Ic|more}}, but it has a smaller feature set. Configuring most to use colors is easier than using less, but additional configuration is necessary to make most behave like less.
Install {{Pkg|most}} using [[pacman]]:
+
Install the {{Pkg|most}} package.
# pacman -S most
+
  
 
Edit {{ic|/etc/man_db.conf}}, uncomment the pager definition and change it to:
 
Edit {{ic|/etc/man_db.conf}}, uncomment the pager definition and change it to:
Line 160: Line 184:
 
=== Colored man pages on xterm or rxvt-unicode ===
 
=== Colored man pages on xterm or rxvt-unicode ===
  
:<small>''Source: [http://pub.ligatura.org/fs/xfree86/xresources/xterm XFree resources file for XTerm program]''</small>
+
:<small>''Source: [http://pub.ligatura.org/fs/xfree86/xresources/xterm XFree resources file for XTerm program]''</small>{{Dead link|2013|09|10}}
  
A quick way to add color to manual pages viewed on {{Pkg|xterm}}/{{Ic|uxterm}} or {{Pkg|rxvt-unicode}} can be made modifying {{ic|~/.Xresources}} or {{ic|~/.Xdefaults}}.
+
A quick way to add color to manual pages viewed on {{Pkg|xterm}}/{{Ic|uxterm}} or {{Pkg|rxvt-unicode}} is to modify {{ic|~/.Xresources}}.
  
 
==== xterm ====
 
==== xterm ====
Line 185: Line 209:
  
 
Launch a new {{Ic|xterm/uxterm}} or {{Ic|rxvt-unicode}} and you should see colorful man pages.
 
Launch a new {{Ic|xterm/uxterm}} or {{Ic|rxvt-unicode}} and you should see colorful man pages.
This combination puts colors to '''bold''' and <u>underlined</u> words in {{Ic|xterm/uxterm}} or to '''bold''', <u>underlined</u>, and ''italicized'' text in {{Ic|rxvt-unicode}}. You can play with different combinations of these attributes (see the [http://pub.ligatura.org/fs/xfree86/xresources/xterm sources] of this item).
+
This combination puts colors to '''bold''' and <u>underlined</u> words in {{Ic|xterm/uxterm}} or to '''bold''', <u>underlined</u>, and ''italicized'' text in {{Ic|rxvt-unicode}}. You can play with different combinations of these attributes (see the [http://pub.ligatura.org/fs/xfree86/xresources/xterm sources]{{Dead link|2013|09|10}} of this item).
 +
 
 +
== Dynamic page width ==
 +
 
 +
{{Accuracy|How is this dynamic? If you later resize the terminal window, the line breaks will still become wrong.}}
 +
 
 +
The man page width is controlled by the {{Ic|MANWIDTH}} environment variable.
 +
 
 +
If the number of columns in the terminal is too small (e.g. the window width is narrow), the line breaks will be wrong. This can be very disturbing for reading. You can fix this by setting the MANWIDTH on {{Ic|man}} invocation. With {{Ic|Bash}}, that would be:
 +
 
 +
{{Hc|~/.bashrc|
 +
<nowiki>man() {
 +
    local width=$(tput cols)
 +
    [ $width -gt $MANWIDTH ] && width=$MANWIDTH
 +
    env MANWIDTH=$width \
 +
    man "$@"
 +
}
 +
</nowiki>}}
 +
 
 +
Feel free to combine this function with the [[#Colored man pages|color settings]].
  
 
== Reading local man pages ==
 
== Reading local man pages ==
Instead of the standard interface, using browsers such as [[lynx]] and [[Firefox]] to view man pages allows users to reap info pages' main benefit: hyperlinked text.
+
Instead of the standard interface, using browsers such as {{Pkg|lynx}} and [[Firefox]] to view man pages allows users to reap info pages' main benefit: hyperlinked text.
  
 
[[KDE]] users can read man pages in Konqueror using:
 
[[KDE]] users can read man pages in Konqueror using:
 
  man:<name>
 
  man:<name>
From the [[Official Repositories]] come two other possibilities:
+
From the [[Official repositories]] come two other possibilities:
  
 
1. {{pkg|xorg-xman}} provides a categorized look at man pages in [[X]].
 
1. {{pkg|xorg-xman}} provides a categorized look at man pages in [[X]].
Line 199: Line 242:
  
 
=== Converting to browser-readable HTML ===
 
=== Converting to browser-readable HTML ===
 +
==== mdocml ====
 +
Install {{AUR|mdocml}} from [[AUR]]. To convert a page, for example {{ic|free(1)}}:
 +
$ gunzip -c /usr/share/man/man1/free.1.gz | mandoc -Thtml -Ostyle=style.css 1> free.html
 +
 +
Now open the file called {{ic|free.html}} in your favourite browser.
 +
 +
==== man2html ====
 
First, install {{Pkg|man2html}} from the official repositories.
 
First, install {{Pkg|man2html}} from the official repositories.
  
Line 207: Line 257:
 
  $ man free | man2html -bare > ~/free.txt
 
  $ man free | man2html -bare > ~/free.txt
  
 +
==== man -H ====
 
The GNU implementation of man in the Arch repositories also has the ability to do this on its own:
 
The GNU implementation of man in the Arch repositories also has the ability to do this on its own:
 
  $ man -H free
 
  $ man -H free
  
This will read your {{ic|BROWSER}} environment variable to determine the browser. You can override this by passing the binary to the {{ic|-H}} option.
+
This will read your {{ic|BROWSER}} [[environment variable]] to determine the browser. You can override this by passing the binary to the {{ic|-H}} option.
 +
 
 +
==== roffit ====
 +
First install {{AUR|roffit}}{{Broken package link|{{aur-mirror|roffit}}}} from [[AUR]].
 +
 
 +
To convert a man page:
 +
 
 +
$ gunzip -c /usr/share/man/man1/free.1.gz | roffit > free.html
  
 
=== Converting to PDF ===
 
=== Converting to PDF ===
Line 217: Line 275:
 
Caveats: Fonts are generally limited to Times at hardcoded sizes. There are no hyperlinks. Some man pages were specifically designed for terminal viewing, and won't look right in PS or PDF form.
 
Caveats: Fonts are generally limited to Times at hardcoded sizes. There are no hyperlinks. Some man pages were specifically designed for terminal viewing, and won't look right in PS or PDF form.
  
The following perl script converts man pages to PDFs, caches the PDFs in the {{ic|$HOME/.manpdf/}} directory, and calls a PDF viewer, specifically [https://www.archlinux.org/packages/community/x86_64/mupdf/ mupdf].
+
The following perl script converts man pages to PDFs, caches the PDFs in the {{ic|$HOME/.manpdf/}} directory, and calls a PDF viewer, specifically {{Pkg|mupdf}}.
  
 
{{hc|Usage: manpdf [<section>] <manpage>|<nowiki>
 
{{hc|Usage: manpdf [<section>] <manpage>|<nowiki>
Line 251: Line 309:
 
== Online Man Pages ==
 
== Online Man Pages ==
 
There are several online databases of man pages, including:
 
There are several online databases of man pages, including:
 +
*[http://man7.org/linux/man-pages/index.html Man7.org.] Upstream for Arch Linux's {{pkg|man-pages}}.
 
*[http://manpages.debian.net/ ''Debian GNU/Linux man pages'']
 
*[http://manpages.debian.net/ ''Debian GNU/Linux man pages'']
 
*[http://leaf.dragonflybsd.org/cgi/web-man ''DragonFlyBSD manual pages'']
 
*[http://leaf.dragonflybsd.org/cgi/web-man ''DragonFlyBSD manual pages'']
Line 258: Line 317:
 
*[http://linux.die.net/man/ ''Linux man pages at die.net'']
 
*[http://linux.die.net/man/ ''Linux man pages at die.net'']
 
*[http://www.kernel.org/doc/man-pages/ The Linux man-pages project at kernel.org]
 
*[http://www.kernel.org/doc/man-pages/ The Linux man-pages project at kernel.org]
*[http://man-wiki.net/index.php/Main_Page Man-Wiki: ''Linux / Solaris / UNIX / BSD'']
 
 
*[http://netbsd.gw.com/cgi-bin/man-cgi ''NetBSD manual pages'']
 
*[http://netbsd.gw.com/cgi-bin/man-cgi ''NetBSD manual pages'']
 
*[http://developer.apple.com/documentation/Darwin/Reference/ManPages/index.html ''Mac OS X Manual Pages'']
 
*[http://developer.apple.com/documentation/Darwin/Reference/ManPages/index.html ''Mac OS X Manual Pages'']
Line 268: Line 326:
 
*[http://www.unix.com/man-page/OpenSolaris/1/man/ ''The UNIX and Linux Forums Man Page Repository'']
 
*[http://www.unix.com/man-page/OpenSolaris/1/man/ ''The UNIX and Linux Forums Man Page Repository'']
 
*[http://manpages.ubuntu.com/ ''Ubuntu Manpage Repository'']
 
*[http://manpages.ubuntu.com/ ''Ubuntu Manpage Repository'']
 +
 +
{{Warning|Some distributions provide patched or outdated man pages that differ from those provided by Arch. Exercise caution when using online man pages.}}
  
 
==Noteworthy manpages==
 
==Noteworthy manpages==
Line 300: Line 360:
 
* pacman.conf(5)
 
* pacman.conf(5)
  
==See also==
+
== See also ==
  
* [[General Recommendations]] - General Recommendations for Arch
+
* [http://wiki.gentoo.org/wiki/Man_page man page - Gentoo wiki article]
 +
* [http://unix.stackexchange.com/a/147 Setting colors for less] and [http://unix.stackexchange.com/a/6357 solving related problems] (threads on StackExchange)
 +
* [https://linuxtidbits.wordpress.com/2013/08/21/wtfm-write-the-fine-manual-with-pod2man-text-converter/ Write The Fine Manual with pod2man]

Latest revision as of 17:58, 24 April 2016

man pages (abbreviation for "manual pages") are the extensive documentation that comes preinstalled with almost all substantial UNIX-like operating systems, including Arch Linux. The command used to display them is man.

In spite of their scope, man pages are designed to be self-contained documents, consequentially limiting themselves to referring to other man pages when discussing related subjects. This is in sharp contrast with the hyperlink-aware info files, GNU's attempt at replacing the traditional man page format.

less is the default pager used with man.

Accessing Man Pages

To read a man page, simply enter:

$ man page_name

Manuals are sorted into several sections:

  1. General commands
  2. System calls (functions provided by the kernel)
  3. Library calls (C library functions)
  4. Special files (usually found in /dev) and drivers
  5. File formats and conventions
  6. Games
  7. Miscellaneous (including conventions)
  8. System administration commands (usually requiring root privileges) and daemons

Man pages are usually referred to by their name, followed by their section number in parentheses. Often there are multiple man pages of the same name, such as man(1) and man(7). In this case, give man the section number followed by the name of the man page, for example:

$ man 5 passwd

to read the man page on /etc/passwd, rather than the passwd utility.

One-line descriptions of man pages can be displayed using the whatis command. For example, for a brief description of the man page sections about ls, type:

$ whatis ls
ls (1p)              - list directory contents
ls (1)               - list directory contents

Format

Man pages all follow a fairly standard format, which helps in navigating them. Some sections which are often present include:

  • NAME - The name of the command and a one-line statement of its purpose.
  • SYNOPSIS - A list of the options and arguments a command takes or the parameters the function takes and its header file.
  • DESCRIPTION - A more in depth description of a command or function's purpose and workings.
  • EXAMPLES - Common examples, usually ranging from the simple to the relatively complex.
  • OPTIONS - Descriptions of each of the options a command takes and what they do.
  • EXIT STATUS - The meanings of different exit codes.
  • FILES - Files related to a command or function.
  • BUGS - Problems with the command or function that are pending repair. Also known as KNOWN BUGS.
  • SEE ALSO - A list of related commands or functions.
  • AUTHOR, HISTORY, COPYRIGHT, LICENSE, WARRANTY - Information about the program, its past, its terms of use, and its creator.

Searching manuals

Whilst the man utility allows users to display man pages, and search their contents via less, a problem arises when one knows not the exact name of the desired manual page in the first place! Fortunately, the -k or --apropos options can be used to search the manual page descriptions for instances of a given keyword.

The research feature is provided by a dedicated cache. By default you may not have any cache built and all your searches will give you the nothing appropriate result. You can generate the cache or update it by running

# mandb

You should run it everytime a new manpage is installed.

Now you can begin your search. For example, to search for man pages related to "password":

$ man -k password

or:

$ man --apropos password

This is equivalent to calling the apropos command:

$ apropos password

The given keyword is interpreted as a regular expression by default.

If you want to do a more in-depth search by matching the keywords found in the whole articles, you can use the -K option:

$ man -K password

Colored man pages

Color-enabled man pages allow for a clearer presentation and easier digestion of the content. There are two prevalent methods for achieving colored man pages: using less, or opting for most.

Using less (Recommended)

Source: Less Colors For Man Pages | Linux Tidbits

This method has the advantage that less has a bigger feature set than most, and is the default for viewing man pages.

Add the following to a shell configuration file. For Bash it would be:

~/.bashrc
man() {
    env LESS_TERMCAP_mb=$'\E[01;31m' \
    LESS_TERMCAP_md=$'\E[01;38;5;74m' \
    LESS_TERMCAP_me=$'\E[0m' \
    LESS_TERMCAP_se=$'\E[0m' \
    LESS_TERMCAP_so=$'\E[38;5;246m' \
    LESS_TERMCAP_ue=$'\E[0m' \
    LESS_TERMCAP_us=$'\E[04;38;5;146m' \
    man "$@"
}

To see the changes in your Man Pages (without restarting bash or linux), you may run:

# source ~/.bashrc

For Fish a basic configuration would be:

~/.config/fish/config.fish
set -xU LESS_TERMCAP_mb (printf "\e[01;31m")      # begin blinking
set -xU LESS_TERMCAP_md (printf "\e[01;31m")      # begin bold
set -xU LESS_TERMCAP_me (printf "\e[0m")          # end mode
set -xU LESS_TERMCAP_se (printf "\e[0m")          # end standout-mode
set -xU LESS_TERMCAP_so (printf "\e[01;44;33m")   # begin standout-mode - info box
set -xU LESS_TERMCAP_ue (printf "\e[0m")          # end underline
set -xU LESS_TERMCAP_us (printf "\e[01;32m")      # begin underline

To see the changes in your Man Pages (without restarting fish or linux), you may run:

# source ~/.config/fish/config.fish

For a detailed explanation on these variables, see this answer. To customize the colors, see Wikipedia:ANSI escape code for reference.

If less doesn't display color man pages

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Which terminals on which systems don't support SGR escape sequences? Old versions of less are not supported on Arch. Anyway, this option disables colors, and everything might have been just fine until the above has been applied. (Discuss in Talk:Man page#)

On some systems, terminals don't understand SGR escape sequences, and older versions of less (without the -R option) don't understand SGR either. Groff offers a few solutions to fix this. The easiest one is to set and export the variable GROFF_NO_SGR in your terminal environment:

 export GROFF_NO_SGR=1

This tells groff to make adjustments when it is passed a man page for formatting.

Using most (Not recommended)

The basic function of 'most' is similar to less and more, but it has a smaller feature set. Configuring most to use colors is easier than using less, but additional configuration is necessary to make most behave like less. Install the most package.

Edit /etc/man_db.conf, uncomment the pager definition and change it to:

DEFINE     pager     most -s

Test the new setup by typing:

$ man whatever_man_page

Modifying the color values requires editing ~/.mostrc (creating the file if it is not present) or editing /etc/most.conf for system-wide changes. Example ~/.mostrc:

% Color settings
color normal lightgray black
color status yellow blue
color underline yellow black
color overstrike brightblue black

Another example showing keybindings similar to less (jump to line is set to 'J'):

% less-like keybindings
unsetkey "^K"
unsetkey "g"
unsetkey "G"
unsetkey ":"

setkey next_file ":n"
setkey find_file ":e"
setkey next_file ":p"
setkey toggle_options ":o"
setkey toggle_case ":c"
setkey delete_file ":d"
setkey exit ":q"

setkey bob "g"
setkey eob "G"
setkey down "e"
setkey down "E"
setkey down "j"
setkey down "^N"
setkey up "y"
setkey up "^Y"
setkey up "k"
setkey up "^P"
setkey up "^K"
setkey page_down "f"
setkey page_down "^F"
setkey page_up "b"
setkey page_up "^B"
setkey other_window "z"
setkey other_window "w"
setkey search_backward "?"
setkey bob "p"
setkey goto_mark "'"
setkey find_file "E"
setkey edit "v"

Colored man pages on xterm or rxvt-unicode

Source: XFree resources file for XTerm program[dead link 2013-09-10]

A quick way to add color to manual pages viewed on xterm/uxterm or rxvt-unicode is to modify ~/.Xresources.

xterm

*VT100.colorBDMode:     true
*VT100.colorBD:         red
*VT100.colorULMode:     true
*VT100.colorUL:         cyan

which replaces the decorations with the colors. Also add:

*VT100.veryBoldColors: 6

if you want colors and decorations (bold or underline) at the same time. See man xterm for a description of the veryBoldColors resource.

rxvt-unicode

URxvt.colorIT:      #87af5f
URxvt.colorBD:      #d7d7d7
URxvt.colorUL:      #87afd7

Run:

$ xrdb -load ~/.Xresources

Launch a new xterm/uxterm or rxvt-unicode and you should see colorful man pages. This combination puts colors to bold and underlined words in xterm/uxterm or to bold, underlined, and italicized text in rxvt-unicode. You can play with different combinations of these attributes (see the sources[dead link 2013-09-10] of this item).

Dynamic page width

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: How is this dynamic? If you later resize the terminal window, the line breaks will still become wrong. (Discuss in Talk:Man page#)

The man page width is controlled by the MANWIDTH environment variable.

If the number of columns in the terminal is too small (e.g. the window width is narrow), the line breaks will be wrong. This can be very disturbing for reading. You can fix this by setting the MANWIDTH on man invocation. With Bash, that would be:

~/.bashrc
man() {
    local width=$(tput cols)
    [ $width -gt $MANWIDTH ] && width=$MANWIDTH
    env MANWIDTH=$width \
    man "$@"
}

Feel free to combine this function with the color settings.

Reading local man pages

Instead of the standard interface, using browsers such as lynx and Firefox to view man pages allows users to reap info pages' main benefit: hyperlinked text.

KDE users can read man pages in Konqueror using:

man:<name>

From the Official repositories come two other possibilities:

1. xorg-xman provides a categorized look at man pages in X.

2. The GNOME Help Browser yelp is a more neat way but has some dependencies.

Converting to browser-readable HTML

mdocml

Install mdocmlAUR from AUR. To convert a page, for example free(1):

$ gunzip -c /usr/share/man/man1/free.1.gz | mandoc -Thtml -Ostyle=style.css 1> free.html

Now open the file called free.html in your favourite browser.

man2html

First, install man2html from the official repositories.

Now, convert a man page:

$ man free | man2html -compress -cgiurl man$section/$title.$section$subsection.html > ~/man/free.html

Another use for man2html is exporting to raw, printer-friendly text:

$ man free | man2html -bare > ~/free.txt

man -H

The GNU implementation of man in the Arch repositories also has the ability to do this on its own:

$ man -H free

This will read your BROWSER environment variable to determine the browser. You can override this by passing the binary to the -H option.

roffit

First install roffitAUR[broken link: archived in aur-mirror] from AUR.

To convert a man page:

$ gunzip -c /usr/share/man/man1/free.1.gz | roffit > free.html

Converting to PDF

man pages have always been printable: they are written in troff, which is fundamentally a typesetting language. If you have ghostscript installed, converting a man page to PDF is actually very easy: man -t <manpage> | ps2pdf - <pdf>. This google image search should give you an idea of what the result looks like; it may not be to everybody's liking.

Caveats: Fonts are generally limited to Times at hardcoded sizes. There are no hyperlinks. Some man pages were specifically designed for terminal viewing, and won't look right in PS or PDF form.

The following perl script converts man pages to PDFs, caches the PDFs in the $HOME/.manpdf/ directory, and calls a PDF viewer, specifically mupdf.

Usage: manpdf [<section>] <manpage>
#!/usr/bin/perl
use File::stat;

$pdfdir = $ENV{"HOME"}."/.manpdf";
-d $pdfdir || mkdir $pdfdir || die "can't create $pdfdir";
$manpage = $ARGV[0];
chop($manpath = `man -w $manpage`);
die if $?;

$maninfo = stat($manpath) or die;
$manpath =~ s@.*/man./(.*)(\.(gz|bz2))?$@$1@;
$pdfpath = "$pdfdir/$manpath.pdf";
$pdftime = 0;
if (-f $pdfpath) {
    $pdfinfo = stat($pdfpath) or die;
    $pdftime = $pdfinfo->mtime;
}
if (!-f $pdfpath || $maninfo->mtime > $pdftime) {
    system "man -t $manpage | ps2pdf -dPDFSETTINGS=/screen - $pdfpath";
}
die if !-f $pdfpath;
if (!fork) {
    open(STDOUT, "/dev/null");
    open(STDERR, "/dev/null");
    exec "mupdf", "-r", "96", $pdfpath;
    #exec "acroread", $pdfpath;
}

Online Man Pages

There are several online databases of man pages, including:

Warning: Some distributions provide patched or outdated man pages that differ from those provided by Arch. Exercise caution when using online man pages.

Noteworthy manpages

Here follows a non-exhaustive list of noteworthy pages that might help you understand a lot of things more in-depth. Some of them might serve as a good reference (like the ascii table).

  • ascii(7)
  • boot(7)
  • charsets(7)
  • chmod(1)
  • credentials(7)
  • fstab(5)
  • hier(7)
  • systemd(1)
  • locale(1P)(5)(7)
  • printf(3)
  • proc(5)
  • regex(7)
  • signal(7)
  • term(5)(7)
  • termcap(5)
  • terminfo(5)
  • utf-8(7)

More generally, have a look at category 7 pages:

$ man -s 7 -k ".*" 

Arch Linux specific pages:

  • archlinux(7)
  • mkinitcpio(8)
  • pacman(8)
  • pacman-key(8)
  • pacman.conf(5)

See also