像专业人士一样阅读手册

2020-12-05 17:11:48

在进行开发演讲或演讲时,我经常参考手册页,但是直到最近我才意识到很少有人对手册界面感到满意,并且擅长通过它来发现信息。

这篇文章是我尝试分享我多年来阅读联机帮助页时学到的一些技巧和技术。

手册页(“ manual pages”的缩写)是* nix上最早,运行时间最长的文档集,其起源可追溯至1971年Unix程序员手册的第一版。

在现代系统上,man命令是访问手册页的最常用方法:

#访问名为" time"的第一个手册页,恰好是time(1)man time#访问特定节的&times#34,在这种情况下为C时间函数#2次尝试访问不存在的" time"在第5部分5次中

因为这些手册页最初是在纸上发布的,所以在大多数系统上都使用troff排版(并将继续使用)。今天,man命令(和其他联机帮助页阅读器)在内部调用troff并将输出通过管道传递到用户的寻呼机(或多或少)。

实际上,只需将三个命令一起流水线就可以实现非常简单的联机帮助页阅读器(仅适用于第1节):

函数myman {#-t和`-e`:在输入中为表和方程式运行`tbl`和`eqn`#`-mandoc`:使用一组专门用于联机帮助页的troff宏#`-Tutf8` :输出UTF-8文字,而不是PostScript gunzip< / usr / share / man / man1 /" $ {1} .1.gz" | groff -t -e -mandoc -Tutf8 | } myman gccmyman ls

除了其简单性和对UNIX哲学的坚持外,man和联机帮助页还扮演着许多重要的角色:

它们提供了一个分类:第1节是系统命令,第2节是系统调用,第3节是库函数,依此类推。系统本身(由多个部分组成)以及用户或程序包管理器安装的程序都遵循此分类。

他们提供离线文档:男人不需要互联网连接,并且可以提供互联网搜索所需要的大部分文档。

它们提供了规范的信息:在线搜索命令或函数可能会告诉您它是否存在,但不会告诉您系统特定的标志,参数或行为,例如man ls会告诉您系统的ls是否是BSD或GNU(以及它们之间的差异)。手册页(在Linux上)还将告诉您要使用功能(或功能的变体),您需要在C程序中定义哪些功能宏。

要提高man手册页的可读性,您可以做的最简单的事情之一就是使寻呼机的输出着色:

用更少的钱,这是通过将LESS_TERMCAP_ *环境变量设置为您首选的ANSI颜色代码来完成的。您可以设置以下变量:

LESS_TERMCAP_mb#闪烁模式(在联机帮助页中不常见)模式(用于带下划线的文本)LESS_TERMCAP_ue#退出下划线模式

您也许可以设置与termcap功能名称相对应的其他名称,但是上面的变量应该可以满足您的所有联机帮助需求。

举例来说,这是我用来为联机帮助页上色的bash函数:

man(){env \ LESS_TERMCAP_mb =" $(printf" \ e [1; 31m")" \ LESS_TERMCAP_md =" $(printf" \ e [1; 31m")" \ LESS_TERMCAP_me =" $(printf" \ e [0m")" \ LESS_TERMCAP_se =" $(printf" \ e [0m")" \ LESS_TERMCAP_so =" $(printf" \ e [1; 44; 33m")" \ LESS_TERMCAP_ue =" $(printf" \ e [0m")" \ LESS_TERMCAP_us =" $(printf" \ e [1; 32m")" \人" $ {@}" }

请注意,您不需要使用上面的转义序列-tput可以正常工作。

我在上面提到了一些重要的部分:1用于系统命令,2用于系统调用,依此类推。

90%的人查询将在这三个查询中进行,但是有一些鲜为人知的部分也可能有用:

在Linux上,第4节用于记录特殊文件,这些文件通常代表计算机或其外围设备的某些方面。例如,man 4 mem会告诉您如何使用/ dev / mem,/ dev / kmem和/ dev / port文件来读取和写入系统的主内存。

您可能知道/ etc / shadow文件,但是您知道如何指定其格式吗?男人5的影子会告诉你。同样,man 5 deb描述了.deb软件包格式,man 5 ppm列出了PPM图像的规范。

这些页面可用于将POSIX行为与系统行为进行对比。

#将系统ls(在Linux,GNU上)与POSIX ls行为man 1 ls man 1p ls##将读取的系统调用与POSIX的读取函数进行比较#注意分类:POSIX读取是一个函数,而不是syscall!男人2读男人3p读

像着色一样,搜索通常比人类特有的功能少。话虽如此,较少的搜索和导航功能可以使联机帮助页浏览更快,更愉快。

较少的搜索可以使用/和?进行正向或反向搜索。命令。搜索语法主要是POSIX ERE,但有一些补充(细节少了!)。

例如,要在man gcc中查找“ x86”的第一个实例(请在屏幕底部查看搜索提示):

观察到搜索词的实例以以前突出的颜色突出显示。

输入搜索词后,即可通过n和N命令浏览其结果,这两个命令分别在结果列表中向前和向后移动。例如,浏览“ Windows”的所有结果:

当最后一个结果跳转到后,状态栏将变为“未找到模式”。一旦发生这种情况,如上面的视频中所示,可以通过按N返回先前的结果。

即使这样也可以简化:&命令可用于仅显示与给定模式匹配的行。例如,检索包含“ ARM”或“ ABI”的每一行:

搜索标志的定义(在本例中为-D)时,效果更加明显:

这些命令只是冰山一角,更少地支持搜索多个文件,跳跃范围(打开和关闭括号,大括号,方括号)以及标记当前位置以供以后返回。其中的每一个都记录在帮助屏幕上,您可以在更少的会话中通过h命令进入该屏幕:

在掌握这些技巧之前(特别是在搜索之前),手册页对我而言是不得已的事情:我会在互联网上搜索或询问朋友,结果却不尽相同。我不知道如何减少使用量,只是笨拙地翻页直到找到想要的东西。很多时候,我会完全放弃。

最终,手册页(和man界面)并不完美-没有超链接或真实的交叉引用,并且整个语料库均使用45岁以上的排版语言编写,旨在提供物理输出,而不是虚拟显示 终奌站。 话虽这么说,它们是有关您系统的几乎所有内容的绝佳初始资源-它们保持最新(与博客和文章不同),它们准确而简洁,并且它们非常UNIX-y(文本文件和 管道!)。