手册页

手册页（man page，Manual pages的缩写）是指在Unix或类Unix操作系统中查询指令使用手册，使用者可以执行`man`命令查询指令用法。简体中文直译为手册页，台湾繁体中文翻译为使用手册、线上手册。在Unix或类Unix操作系统中有非常多的指令，通常使用者（甚至是资深的系统管理者）都无法记住每个指令的详细使用方式，尤其是那些有非常多参数可以用的指令，就算是天天在用的`ls`，可能也不是很清楚它所有的参数如何使用。所幸一般 UNIX/Linux 系统中的指令都会附带相关的线上说明手册（Manual pages，简称 man page），提供使用者查询与参考，内容包括计算机程序（库和系统调用）。

## 用法

为查阅某个Unix命令的手册页，用户可以在命令行界面执行如下命令：

```bash
man <command_name>
```

```bash
#範例：查詢 cal(calendar) 指令用法。
[user101@twfo-mdc ~]$ man cal
CAL(1)                    BSD General Commands Manual                   CAL(1)

NAME
     cal - displays a calendar

SYNOPSIS
     cal [-smjy13] [[month] year]

DESCRIPTION
     Cal displays a simple calendar.  If arguments are not specified, the cur-
     rent month is displayed.  The options are as follows:

     -1      Display single month output.  (This is the default.)

     -3      Display prev/current/next month output.

     -s      Display Sunday as the first day of the week.  (This is the
             default.)

     -m      Display Monday as the first day of the week.

     -j      Display Julian dates (days one-based, numbered from January 1).

q     -y      Display a calendar for the current year.

     A single parameter specifies the year (1 - 9999) to be displayed; note
     the year must be fully specified: “cal 89” will not display a calendar
     for 1989.  Two parameters denote the month (1 - 12) and year.  If no
     parameters are specified, the current month's calendar is displayed.

     A year starts on Jan 1.

     The Gregorian Reformation is assumed to have occurred in 1752 on the 3rd
     of September.  By this time, most countries had recognized the reforma-
     tion (although a few did not recognize it until the early 1900's.)  Ten
     days following that date were eliminated by the reformation, so the cal-
     endar for that month is a bit unusual.

HISTORY
     A cal command appeared in Version 6 AT&T UNIX.

OTHER VERSIONS
     Several much more elaborate versions of this program exist, with support
     for colors, holidays, birthdays, reminders and appointments, etc. For
     example, try the cal from http://home.sprynet.com/~cbagwell/projects.html
     or GNU gcal.

BSD                              June 6, 1993                              BSD
```

例如，“man ftp”。为了方便用户查阅输出的信息，man命令一般会提供一个Less终端机分页检视程式。

按惯例，man页面可以按照“程序名(区段)”的标记来查阅：例如1。相同的手册页标记可能出现在多个不同的区段（section）中，例如相同的名字在系统调用、用户命令或Troff中重复出现的时候。比如1与 7，以及2与3。

访问非默认手册页区段的语法在不同的软件实现中是不一样的。例如，在Solaris中，阅读3的语法为：

```bash
man -s 3c printf
```

在Linux和类BSD系统中，相同的命令语法为：

```bash
man 3 printf
```

此命令在手册页的第3区段中搜寻“printf”的信息。

## 历史

<image>

<image>

《UNIX程序员手册》1971年11月3日第一次出版。1971年，在主管道格拉斯·麦克罗伊的坚持下，丹尼斯·里奇和肯·汤普逊编写了第一份实际意义上的手册页。除了手册页，《UNIX程序员手册》还汇整了一些简短的论文，其中一部分是教程（例如Unix的一般用法、C语言，以及Yacc等工具），另一部分是对操作系统功能的更详细的说明。手册的印刷版最初装在一个活页夹中，但PWB/UNIX和Research Unix第七版的手册被分为两卷，印刷版的手册页成为了其第1卷。

Unix或类Unix操作系统手册页是用troff软件包排版的，是一组`man`宏。当时，手册页系统带来的联机文档可用性被认为是一项伟大的进步。时至今日，几乎所有的Unix命令行应用程序都附带了手册页，而很多Unix用户将缺少手册页视为低质量应用程序的一个标志。事实上，有些项目（如Debian）不辞劳苦的为缺乏手册页的应用编写手册页；4.4BSD的现代继任者也将手册页作为系统文档的主要形式之一（将旧的`man`宏用新的`mdoc`宏取代）。

几乎没有什么替代品能像`man`那样流行，只有GNU计划的`info`系统可能是个例外。

此外，一些Unix图形用户界面应用程序（尤其是那些使用GNOME和KDE开发环境构建的）现在提供的HTML版本的最终用户手册，并包含内嵌的HTML阅读器，如`Yelp`，以供阅读应用程序中的帮助文档。

Unix或类Unix操作系统手册页通常是用英文写的，在某些系统上可能有翻译成其他语言的版本。

手册页的默认格式是troff，使用`man`宏软件包（着重展现）或`mdoc`mandoc宏软件包（着重语义）。可以把手册页排版成PostScript、PDF和其他各种格式进行查看或打印。

大多数Unix系统有一个man2html命令的软件包，该命令允许用户使用HTML浏览器浏览手册页（例如，FreeBSD的textproc/man2html，或某些Linux发行版中的man）。

2010年，OpenBSD宣布淘汰troff，改用mandoc展示手册页。

## 手册区段

在Research Unix、BSD、OS X和Linux中，手册通常被分为8个区段，安排如下：

区段｜说明

1｜一般命令

2｜系统调用

3｜库函数，涵盖C标准函数库

4｜特殊文件（通常是/dev中的设备）和驱动程序

5｜档案格式和约定

6｜电子游戏和萤幕保护装置

7｜杂项

8｜系统管理命令和守护进程

Unix System V采用了类似的编号方案，但顺序不同：

区段｜说明

1｜一般命令

1M｜系统管理命令和守护进程

2｜系统调用

3｜C函数库函数

4｜档案格式和约定

5｜杂项

6｜电子游戏和萤幕保护装置

7｜特殊文件（通常是/dev中的设备）和驱动程序

在某些系统中还有下述的区段可用：

区段｜描述

0｜C函数库头文件

9｜内核例程

n｜Tcl/Tk关键字

x｜X Window系统

一些区段利用后缀进一步细分了。例如在一些系统中，区段3C是C函数库调用，3M是数学（Math）函数库，等等。这样做的结果是区段8（系统管理命令）有时也被移动到区段1M（作为命令区段的子区段）。一些子区段后缀有跨区段的一般含义：

子区段｜说明

p｜POSIX规范

x｜X Window系统文档

## 布局

所有的手册页遵循一个常见的布局，其为通过简单的ASCII文本展示而优化，而这种情况下可能没有任何形式的高亮或字体控制。一般包括以下部分内容：

NAME（名称）: 该命令或函数的名称，接着是一行简介。

SYNOPSIS（概要）: 对于命令，正式的描述它如何运行，以及需要什么样的命令行参数。对于函数，介绍函数所需的参数，以及哪个头文件包含该函数的定义。

DESCRIPTION（说明）: 命令或函数功能的文本描述。

EXAMPLES（示例）: 常用的一些示例。

SEE ALSO（参见）: 相关命令或函数的列表。

也可能存在其他部分内容，但这些部分没有得到跨手册页的标准化。常见的例子包括：OPTIONS（选项），EXIT STATUS（退出状态），ENVIRONMENT（环境），BUGS（程序漏洞），FILES（文件），AUTHOR（作者），REPORTING BUGS（已知漏洞），HISTORY（历史）和COPYRIGHT（版权）。

## 使用在线手册

参考：archlinux社区的 使用在线手册

## 外部链接

- History of UNIX Manpages for a primary-source history of UNIX manpages.