2019年7月10日 星期三

Unix手册中常用的搜索命令

1. 一种快速查寻命令作用的方法:whatis
        当输入man命令时,Unix将显示整个手册页。但有时候,您可能只对一个简要描述感兴趣。在这种情况下,还有另一种方法。
        正如前面所述,说明书页的Name节中包含有一行描述。如果只想看这一行内容,可以键入man-f,后面跟一个或者多个命令的名称。例如:


man –f time date
        在man命令的这种形式中,-f称为一个选项。字母f代表单词 “files”。每个说明书页都存储在一个单独的文件中。当使用-f选项时,就是告诉man查找哪些文件。


        为了方便起见,可以使用命令whatis来取代man –f。例如,如果想显示时间,但是不能确定使用time命令还是date命令,就可以输入两条命令中的任意一条:

whatis time date
man –f time date


您将看到类似于下面的显示信息:



ares_timeout(3) - return maximum time to wait
gdate(1), date(1) - print or set the system date and time
gsleep(1), sleep(1) - delay for a specified amount of time
gtimeout(1), timeout(1) - run a command with a time limit
CURLINFO_APPCONNECT_TIME(3) - get the time until the SSL/SSH handshake is completed

        最后两行不是指向第1节的,所以可以忽略这两行。查看头两行,就可以知道您需要的命令的date。实际上,time命令是用来测量一个程序或者一条命令执行了多长时间。
        众所周知,在输入man命令时,可以指定一个特定的节号(例如,man 1 date)。至于man –f或者whatis命令,就不能再指定具体的节号。Unix总是搜索整个手册。
        因此,查找手册包含什么内容最好输入:

    whatis intro

        这样将会显示每个intro页的简要说明。
        注意,要想whatis命令正常运行,说明书页必须以某种特定的方式进行预处理。这包括手机所有的单行描述,并将它们存储在特定文件中。whatis命令搜索的正是这些文件,而不是实际手册。如果没有执行预处理,那么whatis命令就不会返回有用的信息。

2. 搜索命令:apropos
        当希望学习某条具体的命令时,可以用man来显示该命令的说明书页。但是,如果您知道想做什么,但是缺不确定使用哪条命令,该怎么办呢?
        解决方法就是使用带有-k选项的man命令。这样将搜索NAME节中包含特定关键字的命令(字母k代表”keyword”)。例如,假如您希望查找手册中与手册自身相关的所有条目,则可以输入:

    man –k manual

        为了方便起见,可以使用单个单词代替man –k:

    apropos manual

        注意,当发音apropos时,重音位于最后一个音节上,而且“s”不发音,所以apropos的发音为:a-pro-poe。这是因为这一名称来自发于,而在法语中,单词后面”s”通常不发音。
        apropos命令搜索所有的单行命令描述,查找那些包含有指定字符串的描述。为了使该命令功能更强大,在该命令中Unix不区分大小写字母:
        下面是上例的一些示例输出:

DBIx::Class::Manual(3pm) - Index of the Manual
DBIx::Class::Manual::Component(3pm) - Developing DBIx::Class Components
DBIx::Class::Manual::Cookbook(3pm) - Miscellaneous recipes
DBIx::Class::Manual::DocMap(3pm) - What documentation do we have?
DBIx::Class::Manual::Example(3pm) - Simple CD database example
DBIx::Class::Manual::FAQ(3pm) - Frequently Asked Questions (in theory)

        注意到其中有两条我们感兴趣的命令,它们是manwhereis, 也是仅有的位于第1节中的两条命令。同样注意到route命令也被引用,这是因为该命令的描述中恰有字符串“manual”出现。
        您或许会问,为什么aproposwhatis没有出现在该列表中?无论如何,它们毕竟是帮助访问联机手册的命令。为了回答这个问题,请输入:

   whatis apropos whatis

        您将发现单词“manual”并没有出现在这两条命令的描述中。
        这里的经验是:apropos命令并不神秘,它只是盲目的查找匹配的字符串,所以没有找到需要的东西,可以换另一种方法再试试。


提示:
        大多数命令实际上就是程序。例如,man命令实际上就是一个名为“man”的程序。但是,有些最基本的命令是由shell本身执行的,这些命令称为内置命令。这些命令的shell的说明书页中。手册中没有它们各自的单独条目。
        如果查找一条您知道存在的命令,但是根据其名称并没有找到该命令,那么shell的说明书页中:

        man bash
    man ksh
    man csh


        如果您是Bash用户,还可以使用一个列出所有内置命令的特殊说明书页:

    man builtin

沒有留言:

張貼留言