我们运行的命令行程序,通常在技术上称作shell, 它包含了一个非常强大(也很神秘)的工具,我们将用它来学习更多可用的命令。这个工具本身就是个称作'man'的命令(‘manual’的简写)。它的参数是一个命令的名字(如echo
)。具体细节要依赖于系统,我的系统上运行man echo
的结果如下Listing 2所示
备注:关于命令行的许多教程都涵盖了文本编辑器和shell元素,而本教程并不计划介绍[前面已经提过],但我们会把这些重要的主题推迟到这一个教程的后续教程[第5章节],毕竟从学习文本编辑器开始挑战太大。
Listing 2: 运行
man echo
的结果
$ man echo
ECHO(1) BSD General Commands Manual ECHO(1)NAME
echo -- write arguments to the standard outputSYNOPSIS
echo [-n] [string ...]DESCRIPTION
The echo utility writes any specified operands, separated by single blank (` ') characters and followed by a newline (`\n') character, to the standard output.The following option is available:
-n Do not print the trailing newline character. This may also be achieved by appending `\c' to the end of the string, as is done by iBCS2 compatible systems. Note that this option as well as the effect of `\c' are implementation-defined in IEEE Std 1003.1-2001 (``POSIX.1'') as amended by Cor. 1-2002. Applications aiming for maximum portability are strongly encouraged to use printf(1) to suppress the newline character.
:
在Listing 2中的最后一行,注意有个冒号:
, 表示下面还有更多的信息。 最后一行的细节信息依赖于系统,但是在任何系统上都可以通过按向下箭头键一次或者空格键一次访问下一行信息。要推出手册页,按q(quit 退出)。(手册页的用户界面跟less
程序一样,less
程序相关内容将在3.3章节中介绍)
*图10: `man`对`man`*
因为man
本身也是条命令,所以我们可以对man
添加参数man
(图10),运用后显示如Listing 3
Listing 3: The result of running man man.
$ man man
man(1) man(1)NAME
man - format and display the on-line manual pagesSYNOPSIS
man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file]
[-M pathlist] [-P pager] [-B browser] [-H htmlpager] [-S section_list]
[section] name ...DESCRIPTION
man formats and displays the on-line manual pages. If you specify sec-tion, man only looks in that section of the manual. name is normally the name of the manual page, which is typically the name of a command, function, or file. However, if name contains a slash (/) then man interprets it as a file specification, so that you can do man ./foo.5 or even man /cd/foo/bar.1.gz.See below for a description of where man looks for the manual page files.
OPTIONS
-C config_file
:
我们可以从Listing 3中发现man
的概要(SYNOPSIS)如下:
man [-acdfFhkKtwW] [--path] [-m system] [-p string] ...
就像我本节开始描述的那样手册页通常很‘神秘’。的确,我发现在很多情况下手册页的细节几乎不能理解,但是能够从手册页中获得命令的高级概览信息是项宝贵的技能,值得收藏。为了能够习惯阅读手册页,我建议在遇到一条新命令时,运行man <command name
。即使这些细节不完全清楚,即使细节不完全清楚,阅读手册页将有助于培养技术精湛的宝贵技能。(技术精湛解释 Box5])
Box5 技术精湛
在数学中,许多的学科是通过基于少量的假设或公理应用纯演绎发展而来,包括代数,几何,数论和分析。因此,这些课程间相互独立,单独学习时无需成立的先决条件——原则上,即使是一个小孩也可以学习。然而,在实践中,还需要别的东西,而数学家通常会建议数学精湛的非正式先决条件,其中包括理解和标写数学证明所需的经验和一般复杂性。
在技术中,技术的精湛是掌握一项相似的技能(或者更确切的说是一系列技能)。除了'硬技能'如熟悉文本编辑器,或Unix命令行以外。技术的精湛还包括'软技能'如寻找可用的菜单选项,如何在Google(搜索引擎)中搜索自己所需知识(图2),还有总能让计算机听我们的命令的态度(Box1)。这些软技能、和态度很难直接传授,所以通过本篇及之后的教程Learn Enough tutorials,你可以不断的找机会精湛自己的技术(比如,学习从手册页获取程序的要点[章节1.3])。随着时间的推移,产生的累积效应就像图11中的作者一样,将拥有在各个程序中做各种事的神奇能力。
顺便提一下,图2缺少了解决公共问题的2个技术要点
- 是否重启程序?
2.是否重启设备?
3.是否尝试卸载后重新安装程序
其中第2点通常能解决90%不能解释的计算机错误。
图11:'技术支持的小抄'(通过XKCD),见Box5的技术精湛
练习
- 根据手册页,看看你的系统上
echo
命令的官方简写和详细的描述是什么?
2.正如Listing1中所说,echo
命令默认会在屏幕上输出参数,然后在新的一行中显示新的提示。这是通过添加一个称作newline
的特殊字符(这个特殊的字符正如字面的意思,是将字符串放在新的一行中,在许多场景中写做'反斜线n'\n
).由于echo
常用于输出没被newline分开的一系列字符串,因此有个特殊的命令行选项阻止插入新的行。
通过阅读echo
的手册页,确定打印出'hello'所需的命令,而没有尾部的换行符,为了验证你的终端如预期运行。提示:要确定命令行选项的位置,可以参考图5。通过将你的结果与Listing 4 和Listing 5做比较,确定你是否使用了正确的选项。(备注:在一些老版本的macOS系统的默认终端程序上,这个练习可能会失败。这种情况下,我建议安装iTerm(无论如何这不是个坏主意))
Listing 4 : 运行
echo
出现新的行(没有加参数)
hello
[~]$
Listing 5 : 运行
echo
不出现新的行(加参数)
hello[~]$