我们运行的命令行程序,通常在技术上称作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 output

SYNOPSIS
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 pages

SYNOPSIS
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个技术要点

  1. 是否重启程序?
    2.是否重启设备?
    3.是否尝试卸载后重新安装程序

其中第2点通常能解决90%不能解释的计算机错误。

图11:'技术支持的小抄'(通过XKCD),见Box5的技术精湛

练习

  1. 根据手册页,看看你的系统上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[~]$

1.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——手册页的更多相关文章

  1. 4.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—链接到目录

    在4.2章中我们已经会用cd进入到指定的目录中.这是导航最常见的用途之一,但是它还有几个值得关注的用途.第一个是使用cd ..(读作'see-dee 点点')返回当前目录级别的上一级: $ pwd / ...

  2. 2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——操作文件

    已经学习了基本的命令,现在是时候学习操作文件了,这也是命令行的重要任务.还是基于本教程的事先规定,本教程是入门级的,不要求熟悉类似编辑文本的程序(这些文本编辑程序,将在下个系列教程中介绍, Learn ...

  3. 1.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——运行终端

    终端是个允许我们运行命令行的程序,运行命令前,先打开它.在MacOS系统上,可以使用macOS应用 Spotlight来打开终端窗口,Spotlight也有其他两种方式触发,一种是键入⌘␣(comma ...

  4. 3.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——less即more

    Unix提供了两个工具查看不止文件的头部和尾部.这个功能程序叫做more,但有种更强大的变异体叫做less(起初我认为这是玩笑).less这个程序是交互性地,所以很难在输出时捕获,但是仍然为大家提供了 ...

  5. 1.6《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——小结

    本章节学过的重要命令整理,见下表Table 2. 命令 描述 例子 echo <string> 向屏幕输出字符串 $ echo hello man <command> 显示命令 ...

  6. 3.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——下载文件

    首先,为了不手动创建一个长文件(这太麻烦了),我们将使用强大的curl(有时也写作"cURL")工具从网上下载一个文件,这个命令可以让命令行与URL交互.尽管这不是Unix核心命令 ...

  7. 2.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——重命名,复制,删除

    最常用的文件操作除了将文件列出来外,就应该是重命名,复制,删除了.正如将文件列出来一样,大多数现代操作系统为这些任务提供了用户图形界面,但是在许多场景中,用命令行还是会更方便. 使用mv命令重命名一个 ...

  8. 1.2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——开始第一条命令

    现在开始准备运行我们的第一条命令了,在屏幕上打印'hello'.(字符打印的地方被称为'标准输出',通常指的是屏幕,很少指真的物理打印机设备).这条命令就是echo,这条命令的参数是想要输出的字符串或 ...

  9. 1.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——编辑命令

    在编辑模式中,命令行包括几个重复之前命令的功能.这些以及其他很多命令功能时常设计键盘上的特殊键,所以给出Table 1作为参考,给出了许多键在典型的Macintosh键盘上的标记符号.若你的键盘不太一 ...

随机推荐

  1. 从零开始学习html(十一)CSS盒模型——上

    一.元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1 ...

  2. <Android 基础(三十三)> TabHost ~ 仿微信底部菜单

    简介 Container for a tabbed window view. This object holds two children: a set of tab labels that the ...

  3. Nginx控制客户端请求的速率

    使用ngx_http_limit_req_module模块的两个参数 ngx_http_limit_req_module模块用于限制每个IP访问每个定义key的请求速率 1.limit_req_zon ...

  4. Android 外部启动activity,自定义action,action常量大全

    从任意app,启动另外一个app的activity: 1.   Intent i = new Intent();           ComponentName cn = new ComponentN ...

  5. JDK动态代理、CGLib动态代理

    JDK动态代理源码 一.public static Object newProxyInstance ——> 调用下面这个方法二.Class<?> cl = getProxyClass ...

  6. Pytest+Allure环境的搭建

    参考博客 测试报告解释 pytest+allurre进阶 1. pytest的安装: 1.1. windows下: pip install pytest 1.2. linux下: pip instal ...

  7. guid是否为空的判断

    Guid类型的变量不会为空,初始化没有赋值的GUID应该是00000000-0000-0000-0000-000000000000 . 正确的判断应该是if(Guid testId== Guid.Em ...

  8. Sql Server与.Net(C#)中星期值对比

    最近发现Sql Server与.Net(C#)中星期值居然不匹配,倒不知道依哪一个了. 1.Sql Server declare @date datetime; set @date = '2017-0 ...

  9. IE 出现stack overflow 报错的原因归纳

    1. 重定义了系统的触发事件名称作为自定义函数名如:  onclick / onsubmit ...  都是系统保留的事件名称,不允许作为重定义函数名称: 2. IE缓存满了,无法写入.解决办法:清空 ...

  10. selenium-键盘和鼠标事件

    常见的键盘操作 from selenium.webdriver.common.keys import Keys 模拟enter键:send_keys(Keys.ENTER)键盘F1~F12: send ...