這是什麼
Man Page ( Manual Page ) 是 Unix 系統標配的在線系統手冊, 主要用來查詢命令. 在使用包管理器安裝程序的時候基本總是可以看到 configurating man-db...
的輸出, 是程序將自己的手冊加入到系統手冊當中.
儘管 Man Page 聲稱是在線手冊 ( 其本身也支持在線查詢 ), 但是大多數手冊都以 troff 格式存儲在本地.
包含的章節
章節 | 描述 |
---|---|
1 | 命令 |
2 | System calls (Linux 內核函數) |
3 | 庫函數. (收錄了部分 C 語言函數) |
4 | 特殊檔案 (比方說 /dev 下的文件) 和驅動 |
5 | 檔案格式與協定 (e.g /etc/passwd ) |
6 | 遊戲和屏保 |
7 | 雜項 |
8 | 管理員指令 |
在手冊的開頭和結尾都可以看到 名稱(數字) 形式的字串, 括弧中的數字就是說明這個條目隸屬的章節. 一個條目可以隸屬于多個章節, 比如 passwd
是一個命令的同時也是一個檔案, 所以它同時隸屬于第一和第五章.
格式
Man Page 是按照確定的格式組織的. 一般來說, 以下章節基本固定出現.
NAME | 條目的名稱. 名稱之後會有一句話概括它是什麼 |
SYNOPSIS | 梗概, 包含了如何運行這個命令和這個命令接受的一些命令行參數. 對於庫函數來說, 包含了這個函數的頭文件和它接受的參數 |
DESCRIPTION | 對於命令或者函數功能的描述 |
EXAMPLES | 運行這個命令的一些樣例 |
SEE ALSO | 與之相關的命令和文件 (關聯條目) |
如何使用
鍵盤操作
因为 Man Page 是在使用 less 作为其默认的 Pager, (你也可以在 /etc/man.conf
中自行修改), 所以操作是沿用 less 系的操作. 随便打开一个条目按 h 可以看到操作手册.
命令行參數
敲入 man -h
可以看到命令行参数… 在这里贴出中文版的 man 命令参数. (只列出了常用的命令)
用法: man [-adfhktwW] [section] [-M 指定手册路径] [-P 查看器] name ... a : 列出所有符合查找条件的条目 f : 等价于 whatis, 精准查找命令打出一句话介绍 h : 打出本条帮助信息 k : 和 apropos 一样, 模糊查找命令并打出介绍 K : 在所有页面里查找一条字串 w : 打出匹配到条目的文件位置. (如果只输出 man -w, 会打出 man 搜索数据的位置.) M 路径 : 指定 man page 数据库的路径 P 查看器 : 指定用什么查看器查看 man page (less, more...)
whatis
和apropos
的功能差不多, 都是给出一句话解释输入的命令是什么. 只不过whatis
精确查找输入, 要求匹配到的结果必须和输入一摸一样;apropos
模糊查找, 只要结果包括输入就可以. 比如说,whatis print
会提示找不到结果,apropos print
会输出包括 printf、pwd 在内的一堆结果, 因为printf
包含print
,pwd
的介绍是print name of current/working directory
也包含print
. ( 在 Mac 上好像自带的 whatis 和 apropos 没有区别, 我不知道是不是只是我的电脑这个样子 ).man -aw [name]
是很常见的用法. 当要查询的条目在多个部分中存在的时候, 可以先执行man -aw
看一下该条目存在于那几个部分, 然后分别查询.
小技巧
彩色 Man Page
黑白的 Man Page 可讀性確實不怎麼好. 如果你的命令行恰巧是在使用 oh-my-zsh 的話 (強推), 可以配合使用這個插件. 在你的 ~/.zshrc
文件中添加以下一行:
plugins=(... colored-man-pages)
如果你並沒有安裝 oh-my-zsh, 可以安裝 most 來達到類似的效果:
brew install most # sudo apt-get install most export PAGER="most" man printf
配合使用 Linux Man Page
因為我的筆電是 Mac 系統, 雖然命令大多和 Linux 差不多, 還是有少數不同或者找不到的 (比如 open). 這個難道開一個虛擬機查詢嗎?
使用下面的命令可以在 mac 上使用 linux 的 manpage (僅限內核命令)
cd /tmp wget https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/man-pages-5.12.tar.xz tar -xf man-pages-5.12.tar.xz mv man-pages-5.12 /usr/local/lib/linuxman echo "alias linuxman='man -M /usr/local/lib/linuxman/" >> ~/.zshrc
因為 Linux Man Page 是有中譯版的, 所以你可以選擇使用中譯版, 但是我並不推薦. 一是有的翻譯非常蛋疼, 或者格式化得亂七八糟; 二是配置複雜, 而且和彩色 man page 並不兼容.
將手冊存儲為 PDF 格式
man -t printf | ps2pdf - > printf.pdf
C++ Man Page
前面有介紹過, Man Page 包含了一些 C 語言函數. 那麼有沒有類似的, 專門為 C++ 打造的 Man Page 呢? 還真的有: CPPMAN – 一個用 python 寫成的 C++ 語言手冊. 來源採用了 cppreference.com
和 cplusplus.com
的在線手冊, 以 vim 作為 pager.
要安裝 CPPMAN, 可以使用以下命令:
brew install cppman # Mac 用戶 sudo apt-get install cppman # debian 系用戶 pip install cppman # 有 python 環境的
另外, CPPMAN 還支持離線手冊, 使用以下命令可以將在線的內容離線到本地方便斷網查看.
cppman -c
參考
- Man Page Wikipedia: https://en.wikipedia.org/wiki/Man_page
- Colored-Man-Pages: https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/colored-man-pages
- Man Pages 使用指南: https://blog.gtwang.org/linux/linux-man-page-command-examples/
- Linux Man Page: https://zhuanlan.zhihu.com/p/349918075
- C++ Man Page: https://github.com/aitjcize/cppman
Thumbnail: Dev Manual by Tom Souverain
If using the image violates your rights, or there’s anything related to copyright laws, please contact me at [email protected], I will deal with them right away.
aha