手冊頁

手冊頁（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.