从 Linux 获取帮助 - 第 1 部分:Man 手册
man woman
没有关于 woman 的手册条目
噢,我知道我会在评论中听到关于这句话的吐槽。但是你知道吗?你们有多少人尝试过用其他词做类似的事情?你知道你至少尝试过一两次。来吧,试一两个……你可能会感到惊讶。那么为什么写一篇关于 man 手册的文章?嗯,不仅仅是 man 手册,更像是如何从 Linux 获取信息。当然,你可以使用互联网搜索你的问题,但你也可以使用随 Linux 发行版一起提供的久经考验的手册页(或 info)。这篇和我下一篇博文旨在涵盖 Man 手册和 Info 页面。你不仅会学到关于每一个的一些知识(-而且,可能比你一直想知道的更多-),还会了解两者之间的差异。当然,如果你只需要关于命令的基本语法信息,那么总是有久经考验的:--help、-h 或 -?。
那么,为什么要使用 Man 和 Info 而不是使用你的互联网浏览器?嗯,对于我们中的一些人来说,服务器是仅限控制台的,并且也可能具有受限制的(取决于你的基础设施)互联网访问权限。能够直接从控制台引用 Man 或 Info 页面是一种非常快速且简便的方法,可以调出有关命令行参数的信息、特定命令的作用或配置文件中的内容。可以认为有些网站复制了 Man 手册,并带有指向其他 Man 手册的超链接。但它们是你发行版和版本的正确页面吗?在我看来,最好的方法是使用随你当前使用的发行版一起安装的软件包一起安装的页面。但请记住,在你安装 Linux 的各种版本时,Man 实用程序可能没有安装。但我遇到的绝大多数受支持的 Linux 发行版都包含可以安装的 Man 软件包(对于基于 Debian 的系统,man-db 和 manpages 会浮现在脑海中,它们是必要的软件包)。
现在,关于 Man 和 Info 的内容是什么?我将站到我的肥皂盒上说几句,而且我再次确信会看到一条(或 10 条)关于其中一个比另一个更好的评论。就我个人而言,我一直更喜欢 Man 手册,自从我开始摆弄 Unix 和 Linux(90 年代)以来,它们就一直存在,当然,存在的时间比这长得多。Info 由 FSF(自由软件基金会)创建,作为一种超文本文档,其中包含比你在 Man 手册中找到的更深入的信息。你可能会问,为什么有两个?我不知道,你必须向 FSF 询问。当你“man sed”并阅读存储在 sed 的 Man 手册中的简短信息,然后“info sed”并发现存储在 Info 页面中的更多信息时,这可能会非常令人困惑。我发现 Gnu 实用程序具有非常深入的 Info 页面,但其他命令行实用程序只是读入 Info 的 Man 手册。如果我需要比我的 Man 手册告诉我的更多信息,那么我会看看 Info 是否有。但简而言之,任一实用程序的目的是让最终用户更容易从 Linux 获取信息。
因为 Man 手册和 Info 中有很多信息,而博客文章中的空间又如此之小,我将把它们分成两部分。第一部分将介绍 Man 手册,第二部分将介绍 Info。
Man 手册正如我之前所说,Man 手册已经存在了很长时间。它们的设计目的是让人们参考系统上的帮助(手册)页面。创建实用程序的程序员/工程师/等(现在仍然)应该创建一个遵循特定页面布局的 Man 手册,以便其他人可以参考手头主题的相关信息。这只是我个人的一点看法,我不认为因为 Info 的存在,Man 手册就会消失。在参考实用程序信息方面,它们已成为 Linux/Unix 基础设施的核心和灵魂。话虽如此,让我们开始学习吧。
Man 手册布局和导航我喜欢 Man 手册的一点是,大多数时候它们的布局都是相同的。称其为军事纪律,或是一丝强迫症,随你喜欢。我说大多数时候是因为有少数人会改变顺序中的一两件事,但它们通常在 Man 手册中具有 9 个主要主题。这就是它们分解的方式
- 名称
- - 这是页面的主题的名称……通常在括号中包含一个数字,表示手册部分。该数字与这些部分有关
Man 手册部分
- 用户命令
- 系统调用
- 库调用
- 特殊文件
- 文件格式
- 游戏
- 杂项
- 系统管理
- 内核例程
- 概要
- - 文档主题的简要概述
- 描述
- - 不言自明,更深入地描述主题及其作用
- 选项
- - 执行选项、命令行参数以及每个参数的作用的解释
- 文件
- - 本节列出了与该主题相关的各种文件,例如配置文件
- 环境
- - 影响程序、函数、文件等的环境变量
- 错误
- - 已知错误
- 另请参阅
- - 这是非常有用的部分。这将引用相关的 Man 手册。
- 作者(或历史记录)
- - 谁写的,和/或谁贡献的。
Man 实用程序使用 Less 来显示帮助页面。这意味着如果你熟悉 Less,那么你使用 Man 应该没有问题。对于那些不熟悉 Less 或其更知名的表兄弟 More 的人,以下是你关于 Man 页面导航的快速入门课程。打开 Man 页面后,你可以使用向上/向下键向上/向下导航单行,或者按 <enter> 向下移动 1 行。要向上/向下移动整个页面,你可以使用 PgUp/PgDn 键、空格键或 D 键表示向下(B 键表示向上)。如果你正在 Man 页面中查找特定的单词或短语,请键入“/”并输入你的短语以搜索 Man 页面。字母“n”将搜索该短语中的下一个单词。“/”字符还将搜索页面中上次搜索过的短语。就这样,基本导航。我在下面提供了一个快速备忘单。
*导航 - 通常使用 Less上/下 - 上下键。
向上/向下翻页 - PgUp/PgDn 键
搜索 - '/foo'
搜索下一个 - '/' 或 N 键
命令摘要(帮助) - h 键
退出 - q 键
向下 1 屏幕 - 空格键或 D 键
向上 1 屏幕 - B 键
向下 1 行 - Enter 提示和技巧
以下是使用 Man 手册的一些基本提示和技巧,从搜索 Man 手册到打印 Man 手册以及介于两者之间的一切。如果你迷路了,请不要感到难过,这里有一个关于 Man 的 manpage!
搜索你是否遇到过这样的问题:你知道某个关键词有一个 manpage,但你不记得 manpage 本身了?通过使用 man -k <keyword>
,Man 将在其 manpage 列表中搜索该特定关键字,并列出引用它的所有 manpage。例如
man -k sleep
apmsleep (1) - go into suspend or standby mode and wake-up later clock_nanosleep (2) - high-resolution sleep with specifiable clock nanosleep(2) - high-resolution sleep rtcwake (8) - enter a system sleep state until specified wakeup time sleep (1) - delay for a specified amount of time sleep (3) - Sleep for the specified number of seconds usleep (3) - suspend execution for microsecond intervals
从这里我可以查看所有包含单词“sleep”的 manpage。在本文前面,我描述了 man 数据库的各个部分,-k 的结果显示了这些节号。因此,我们知道有两个 sleep 页面,一个是用用户命令,另一个是用库调用。通过只键入“man sleep”,很可能会得到用户命令,而你真正想要的是库调用。通过知道更正部分,你现在可以键入:man 3 sleep
并调出 sleep() 库调用的手册页。同样,如果你知道你要查找的命令,但认为该命令有多个 Man 手册,请使用 -f 标志:man -f <command>
将列出带有括号中部分的命令。如前所述,键入 man section <command>
将把你带到你要引用的特定部分。 打印和显示
那么,如果你想打印 Man 手册以供参考,你会怎么做?谁会这样做呢?嗯,我经常打印 Man 手册,并在我不靠近终端时时不时地参考它们,也许这就是我内心的技术人员(或博客作者)。我倾向于在撰写文章时打印我需要的 Man 手册,以便我可以随时掌握它们,尤其是当我确定我会“离线”时。以下是将你的 Man 手册发送到计算机终端以外的其他设备的三种方法。
# Send sleep manpage to default printer man sleep | col -b | lpr
# Send sleep manpage to ps2pdf utility (must have installed) and save as sleep.pdf man -t sleep | ps2pdf - sleep.pdf
# dump the sleep Man page to a text file man sleep | col -b > sleep.txt
如果你的命令可能是用户命令或库调用,但你想同时看到它们,你会怎么做?你很懒(像我一样),不想键入:man 1 sleep、man 3 sleep,但想一个接一个地看到它们?通过键入 man -a <command>
,Man 实用程序将连续显示该命令。一旦第一个命令完成,它将转到下一个 man 页面。
在前往 Info 之前,最后一个技巧,我喜欢时不时地向我的下属炫耀……这个不需要解释,所以我把它留给你的想象力
man hier
“从 Linux 获取帮助”的第二部分将介绍 Info。敬请关注!