linux最重要的命令,没有之一,你掌握了吗?

背景

请自问自答:

  • 你觉得linux中最重要的命令是哪个?
  • 你是否已经掌握了它?
  • 你认为它最重要的理由是什么?

正所谓“自助者天助之”,在linux系统中,最重要的命令应当是能够让你“自助”的命令。

这个命令就是man——用来查看linux的文档系统。它之所以是最重要的命令,是因为通过它你能学习到其它任何命令,这无疑是为你打开了一扇信息大门。

简介

Unix系统中有两个重要的文档系统:

  • Unix联机手册:Unix系统默认提供的文档系统;
  • Info系统:GNU项目的官方文档系统;

自学的传统

在unix的传统中,自学是一个极其重要的传统,在之前的文章Unix文化--RTFM提到过。

生而知之者上也;学而知之者次也;困而学之又其次也;困而不学,民斯为下矣。

别指望什么“生而知之”,能做到“学而知之”就相当不错了。RTFM一般发生在遇到困难时,更像是“困而学之”,但它强调的是一种主观能动性,因此是“学而知之”的层次。

unix手册

Unix手册也通常称为“联机手册”、“手册”,相当于我们平常所说的“官方帮助文档”。

如何使用

unix手册的查看方式非常简单,使用man命令,意思是manual(手册、指南),后接你要查看的命令的名称,即:

man X(注意不是X man)。

比如,想要查看ls的用法,使用:

man ls

也可以后接多个命令,这样将会逐个显示后接命令的帮助手册内容,如:

man pwd ls cd

说明书页

一个命令的帮助文档是一个单独的条目,如命令man ls的显示内容,称为“一页”,也叫做“说明书页”。

如果说明书页的内容大于一屏,将分屏显示(事实上帮助文档不超过一屏的命令并不多)。

分屏的命令有lessmorepg,其中less最好用,使用最广泛,也是man命令显示说明书页的默认分屏工具。

若希望用指定的分屏工具显示帮助信息,使用管道线连接命令:

man ls | less
man cp | more
man pwd | pg

在查看帮助文档内容时,还可以使用一些命令来辅助阅读,比如对于默认的分屏工具less来说,按<space>(空格)键会显示下一屏内容,按q键会退出,等等。

然而,无论使用什么分屏工具,最重要的命令是h,它显示帮助信息。你看,再一次突出帮助命令的重要性

当按h键后,屏幕上将显示该分页工具的所有命令的摘要信息,想结束阅读时,按q退出,再回到说明书页中:

  • lessh命令摘要
                   SUMMARY OF LESS COMMANDS
      Commands marked with * may be preceded by a number, N.
      Notes in parentheses indicate the behavior if N is given.
      A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.

  h  H                 Display this help.
  q  :q  Q  :Q  ZZ     Exit.
  
                             MOVING
  e  ^E  j  ^N  CR  *  Forward  one line   (or N lines).
  y  ^Y  k  ^K  ^P  *  Backward one line   (or N lines).
  ...省略...

                          SEARCHING
  /pattern          *  Search forward for (N-th) matching line.
  ?pattern          *  Search backward for (N-th) matching line.
  ...省略...
  
                             JUMPING
  g  <  ESC-<       *  Go to first line in file (or line N).
  G  >  ESC->       *  Go to last line in file (or line N).
  ...省略...
  
                          CHANGING FILES
  :e [file]            Examine a new file.
  ...省略...
  
                    MISCELLANEOUS COMMANDS
  -<flag>              Toggle a command line option [see OPTIONS below].
  ...省略...
  
                           OPTIONS

        Most options may be changed either on the command line,
        or from within less by using the - or -- command.
        Options may be given in one of two forms: either a single
        character preceded by a -, or a name preceded by --.
  ...省略...
                          LINE EDITING

        These keys can be used to edit text being entered 
        on the "command line" at the bottom of the screen.

 RightArrow                       ESC-l     Move cursor right one character.
  ...省略...

  • moreh命令摘要

多数命令可在前面加整数参数 k。方括号中为参数的默认值
星号(*)表示参数将成为新的默认值。
 
<空格键>                显示下 k 行文本[当前屏幕尺寸]
z                       显示下 k 行文本[当前屏幕尺寸]*
<回车键>                显示下 k 行文本[1]*
d 或 ctrl-D             滚动 k 行[当前滚动尺寸,初始值为 11]*
q 或 Q 或 <interrupt>   退出 more
s                       跳过下面 k 行文本[1]
f                       跳过下面 k 屏文本[1]
b 或 ctrl-B             跳过上面 k 屏文本 [1]
'                       转到上次搜索开始处
=                       显示当前行号
/<正则表达式>           搜索正则表达式第 k 次出现处[1]
n                       搜索前一正则表达式第 k 次出现处[1]
!<cmd> 或 :!<cmd>       在子 shell 中执行 <cmd> 命令
v                       在当前行启动 /usr/bin/vi
ctrl-L                  重绘屏幕
:n                      转到后面第 k 个文件[1]
:p                      转到前面第 k 个文件 [1]
:f                      显示当前文件名和行号
.                       重复前一命令

  • pgh命令摘要
pg 1.44 2/8/02. Copyright (c) 2000-2001 Gunnar Ritter. All rights reserved.       

  h                       this screen
  q or Q                  quit program
  <newline>               next page
  f                       skip a page forward
  d or ^D                 next halfpage
  l                       next line
  $                       last page
  /regex/                 search forward for regex
  ?regex? or ^regex^      search backward for regex
  . or ^L                 redraw screen
  w or z                  set page size and go to next page
  s filename              save current file to filename
  !command                shell escape
  p                       go to previous file
  n                       go to next file

Many commands accept preceding numbers, for example:
+1<newline> (next page); -1<newline> (previous page); 1<newline> (first page).

See pg(1) for more information.

由以上三个分页命令的命令摘要也可以看出,less最好,难怪作为了man命令的默认分页工具呢!

说明书页的组织方式

我们看的各种书籍可以翻页,但Unix帮助手册不能翻页,因为并没有定义页码。它更像是一种具有层次结构的电子书。

通常情况下,unix手册分成了8节(不同的系统之间略有差异)。

  1. 命令
  2. 系统调用
  3. 库函数
  4. 特殊文件
  5. 文件格式
  6. 游戏
  7. 杂项信息
  8. 系统管理

从以上8种的大体分类也可以知道,不同节的知识侧重点不同,适用的人群也就不同,如:

节1的命令是基础中的基础,对所有unix使用者都有用;
节2、节3、节7则更适合程序员;
节7、节8则更适用于系统管理员;
...... 等等。

如下是各节的详细说明:

  1. 命令
    Unix手册中最重要的部分就是第1节——命令。这部分包含了大量的unix命令的说明书页。

  2. 系统调用
    本节是系统调用的说明书页,在程序中使用系统调用,以请求内核执行特定的动作。

  3. 库函数
    库函数,也称为子例程,是标准化的工具,不会直接涉及内核,在程序中执行特定的任务。

  4. 特殊文件
    该部分主要是指那些表示物理设备的文件,还包括设备驱动程序的信息。

  5. 文件格式
    本节介绍系统中的重要文件格式,包括配置文件。

  6. 游戏
    该节提供系统中所安装游戏的说明书页。在工作中碰到的linux机器,手册中的第6节很可能是空的,原因你懂的。

  7. 杂项信息
    既然叫杂项信息,那就是各种混杂信息了。

  8. 系统管理
    主要包括系统管理员用来执行工作所使用的所有特殊命令的说明书页,也就是那些只能由超级管理员使用的命令。

指定要查看的节号

前面介绍了要想查看某命令的unix手册,使用man命令后接该命令的名称,如:

man kill

而上面我们知道man手册分为多节,那么上述这个命令到底查看的是哪节呢?答案是第一节。

通过上述命令的输出(第一行中行首和行末括号中的数字)也可以判断:

KILL(1)               User Commands               KILL(1)

一般在命令帮助手册的最后,有“SEE ALSO”的两行,如:

SEE ALSO
       kill(2), killall(1), nice(1), pkill(1), renice(1), signal(7), skill(1)  

这说明与kill命令相关的其它几个命令的引用。可以看到kill(2),即第二节中也有个kill的条目,那么应该如何查看该条目呢?

依然使用man命令后接要查看的命令的名字,只不过在它们中间指定节号:

man 2 kill

输出的首行如下:

KILL(2)               Linux Programmer's Manual               KILL(2)

因而,man kill也等同于man 1 kill

如果希望同时查看kill帮助手册的第一节和第二节,可以使用man 1 kill 2 kill

说明书页的格式

你用man来查看多个命令的帮助手册,你会发现这些说明书页都遵循大体相同的格式,如常见的有:

  • Name
    命令的名称和用途,一般情况下是一个单行的摘要,因此意思比较模糊。
  • Synopsis
    命令语法,如果想知道一个命令如何使用,看这部分就足够了。
  • Description
    完整描述(可能很长),包含了很多使用细节。
  • Environment
    命令使用的环境变量。
  • Author
    开发该命令的程序员的名字。
  • Files
    对该命令重要的文件列表。
  • See also
    查看相关信息的位置,一般显示了相关命令以及其在帮助文档中的节数。
  • Diagnostics
    可能的警告和错误。
  • Bugs
    错误、缺点、警告等。

快速查找命令

在文章情景linux--不借助网络如何找到你需要的命令中介绍了一种快速查找命令的方式。

如果你想查询命令的作用,可以使用man -f,后接命令名称,也可以接多个命令,如:

man -f basename dirname

它将显示后接命令的一句话作用描述:

basename (1)         - strip directory and suffix from filenames
basename (3)         - parse pathname components
dirname (1)          - strip last component from file name
dirname (3)          - parse pathname components

whatis命令等价于man -f

whatis basename dirname
basename (1)         - strip directory and suffix from filenames
basename (3)         - parse pathname components
dirname (1)          - strip last component from file name
dirname (3)          - parse pathname components

文档结构

unix联机手册是一个文件集,每个文件是一个具体命令的相关文档资料。那么,unix联机手册对应的文件在哪里能够找到呢?

前面提到说明书页中有一节“FILES”是指该命令的相关文件,查看man命令的说明书页中的“FILES”:

FILES
       /etc/manpath.config
              man-db configuration file.

       /usr/share/man
              A global manual page hierarchy.

       /usr/share/man/index.(bt|db|dir|pag)
              A traditional global index database cache.

       /var/cache/man/index.(bt|db|dir|pag)
              An FHS compliant global index database cache.

可见,man的帮助文档页存于目录/usr/share/man中。

至于这些文件是怎样保存的,文件的格式,文件的内容是怎样的,请自行探索,你会有所收获的,也可以辅助理解unix联机手册。

Info系统

Info系统独立于unix手册,是一个联机帮助系统,用来记录GNU实用工具的用法。GNU实用工具在unix世界很普遍,所以掌握如何使用Info系统也大有裨益。

查看info系统中的文件,需要使用info命令,后接要查看的命令,即,info X

info time
File: time.info,  Node: Top,  Next: Resource Measurement,  Up: (dir)

The GNU `time' Command
**********************

This file documents the the GNU `time' command for running programs and
summarizing the system resources they use.  This is edition 1.7, for
version 1.7.

* Menu:

* Resource Measurement::  Measuring program resource use.
* Concept index::  Index of concepts.

使用man time对比一下:

man time
TIME(1)                                                                               General Commands Manual                                                                               TIME(1)



NAME
       time - run programs and summarize system resource usage

SYNOPSIS
       time   [ -apqvV ] [ -f FORMAT ] [ -o FILE ]
              [ --append ] [ --verbose ] [ --quiet ] [ --portability ]
              [ --format=FORMAT ] [ --output=FILE ] [ --version ]
              [ --help ] COMMAND [ ARGS ]

...省略...

unix帮助手册和info系统的分工不同,决定了所有的unix和linux命令都有说明书页,但却不一定有info文件。因此,如果尝试显示一个命令的info文件,而系统上没有时,会默认显示其说明书页。

一点儿经验,请笑纳

最重要的常常被忽略

man命令常常被大多数人忽略。现如今,获取信息的成本非常之低,当你不清楚一个命令的用法时,上网使用搜索引擎就可以轻松解决了。
但,仅仅这样做并不够好。

  1. 使用搜索引擎和使用man命令查阅帮助文档并不冲突;
  2. 轻松不代表高效,你仔细想过没有?使用搜索引擎和使用man查询帮助文档相比,后者效率更高,熟练掌握后成本更低!
  3. 这不是一种非此即彼的选择,我觉得,两种方式配合使用会更好。

专项查询窗口

可以专门开个终端窗口,只为随时能查询命令的用法。
一般的终端软件,如xshellputty CM等都支持将两个终端窗口以水平或竖直分布的方式同时显示在屏幕上,一个窗口作为你工作的窗口,另一个则用于查询命令手册,工作效率会更高。

!的妙用
另外,在查询命令的帮助文档时,如果需要查看另一个命令的帮助信息,或者想知道某个命令的执行结果,这时你大可不必退出当前的说明书页,也没必要再重新打开一个终端窗口,你可以直接在当前状态下得到你想要的结果。
比如,在查看basename的帮助文档时,想要看下dirname的某个参数,输入“!man dirname”即可,当前页面会转到dirname的说明书页,当你从dirname的说明书页退出后,屏幕显示“!done (press RETURN)”,此时按回车键会再回到basename的帮助文档页。

观其大略

linux命令的参数一般有多个,最常用的几个参数能应付得了日常需要,不常用的参数往往满足某个特殊的需求。因而,无所事事的时候,不妨粗略阅读一个命令的说明书页,目前是大致了解一个命令的作用,大致有哪些参数,结合实际思考其可以使用的场景。这样,在寻找命令或参数上能节省很多的时间。而且,这种“遍历式的阅读文档”,往往能发现更加给力的命令和参数。

总结

unix文档系统是一部字典,在这里,我只能给出查阅字典的方法和方法论,无论是unix文档系统本身,还是文档系统中的命令们,更多内容还有待我们去探索。

掌握了查阅unix文档系统的方法,仅仅是一个开始,但正因为有这样的开始,你的linux成长之路会比在这之前要更加的畅通和高效。

参考资料

http://www.gnu.org/software/texinfo/
书籍《Unix & Linux 大学教程》第9章
情景linux--不借助网络如何找到你需要的命令
Unix文化--RTFM
你为什么必须(从现在开始就)掌握linux

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容