内建命令与外部命令

1、内建命令实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。

2、外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。

3、type来判断到底为内部命令还是内部命令:

type 命令

例如:

Linux 帮助指令(man、help、info)_实用程序

help 命令

1、help 命令是用于显示 shell 内建命令的简要帮助信息,帮助信息中显示有该命令的简要说明以及一些参数的使用以及说明。

Linux 帮助指令(man、help、info)_加载_02

2、外部命令的 help:外部命令基本上都有一个参数 --help,通过这个参数可以得到相应的帮助。

Linux 帮助指令(man、help、info)_数据库_03

3、注意:当非常紧急只是忘记该用哪个参数的时候,help 这种显示简单扼要的信息就特别实用,若是不太紧急的时候就可以用 man 这种详细描述的查询方式。

man 命令

1、man 命令(外建命令):是 Manual pages 的缩写,是 Linux 系统中在线软件文档的一种普遍的形式,其内容包括计算机程序(包括库和系统调用)、正式的标准和惯例,抽象的概念等。(注:可以使用 man 命令查看其本身的使用说明,即:man man)

Linux 帮助指令(man、help、info)_实用程序_04

man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述,通过查看系统文档中的 man 还可以得到程序的更多相关信息和 Linux 的更多特性。

2、作用:通常用来获得某个命令的说明和使用方式的详细介绍。

3、man 手册的分区区段:man 手册的内容很多,涉及了 Linux 使用过程中的方方面面,为了便于查找,man 手册被进行了分册(分区段)处理,手册通常被分为以下9个区段(若查看相应区段的内容,就在 man 后面加上相应区段的数字即可,例如:man 1 ls):

Linux 帮助指令(man、help、info)_实用程序_05

Linux 帮助指令(man、help、info)_实用程序_06

搜寻特定指令/文件的 man page 说明文件 

在某些情况下,你可能知道要使用某些特定的指令或者是修改某些特定的配置文件,但是偏偏忘记了该指令的完整名称。 有些时候则是你只记得该指令的部分关键词。这个时候你要如何查出来你所想要知道的 man page 呢? 我们以底下的几个例子来说明 man 这个指令有用的地方喔!

例如:你可否查出来,系统中还有哪些跟『man』这个指令有关的说明文件呢? 答:你可以使用底下的指令来查询一下

[dmtsai@study ~]$ man -f man
man (1)	- an interface to the on-line reference manuals
man (1p)	- display system documentation
man (7)	- macros to format man pages

使用 -f 这个选项就可以取得更多与 man 相关的信息,而上面这个结果当中也有提示了 (数字) 的内容, 举例来说,第三行的『 man (7) 』表示有个 man (7)的说明文件存在喔!但是却有个 man (1)存在啊! 那当我们下达『 man man 』的时候,到底是找到哪一个说明档呢? 其实,你可以指定不同的文件的,举例来说,上表当中的两个 man 你可以这样将他的文件叫出来:

[dmtsai@study ~]$ man 1 man	<==这里是用 man(1) 的文件数据
[dmtsai@study ~]$ man 7 man	<==这里是用 man(7) 的文件数据

可以自行将上面两个指令输入一次看看,就知道,两个指令输出的结果是不同的。 那个 1, 7 就是分别取出在man page 里面关于 1 与 7 相关数据的文件文件啰! 好了,那么万一我真的忘记了下达数字,只有输入『 man man 』时,那么取出的数据到底是 1 还是 7 啊? 这个就跟搜寻的顺序有关了。搜寻的顺序是记录在/etc/man_db.conf 这个配置文件当中, 先搜寻到的那个说明档,就会先被显示出来! 一般来说,通常会先找到数字较小的那个啦!因为排序的关系啊!所以, man man 会跟 man 1 man 结果相同!

除此之外,我们还可以利用『关键词』找到更多的说明文件数据喔!什么是关键词呢? 从上面的『man -f man』输出的结果中,我们知道其实输出的数据是:

  • 左边部分:指令(或文件)以及该指令所代表的意义(就是那个数字)
  • 右边部分:这个指令的简易说明,例如上述的『-macros to format man pages

当使用『man -f 指令』时,man 只会找数据中的左边那个指令(或文件)的完整名称,有一点不同都不行! 但如果我想要找的是『关键词』呢?也就是说,我想要同时找上面说的两个地方的内容,只要该内容有关键词存在, 不需要完全相同的指令(或文件)就能够找到时,该怎么办?请看下个范例啰!

例如:找出系统的说明文件中,只要有 man 这个关键词就将该说明列出来。答:

[dmtsai@study ~]$ man -k man
fallocate (2)	- manipulate file space 
zshall (1)	- the Z shell meta-man page
....(中间省略)....
yum-config-manager (1) - manage yum configuration options and yum repositories 
yum-groups-manager (1) - create and edit yum's group metadata
yum-utils (1)	- tools for manipulating repositories and extended package management

看到了吧!很多对吧!因为这个是利用关键词将说明文件里面只要含有 man 那个字眼的(不见得是完整字符串) 就将他取出来!很方便吧! ^_^(上面的结果有特殊字体的显示是为了方便读者查看, 实际的输出结果并不会有特别的颜色显示喔!)

事实上,还有两个指令与 man page 有关呢!而这两个指令是 man 的简略写法说~就是这两个:

[dmtsai@study ~]$ whatis [指令或者是数据]	<==相当于 man -f [指令或者是数据] 
[dmtsai@study ~]$ apropos [指令或者是数据]	<==相当于 man -k [指令或者是数据]

注意:这两个特殊指令要能使用,必须要有建立 whatis 数据库才行!这个数据库的建立需要以 root 的身份下达如下的指令:

[root@study ~]# mandb
# 旧版的 Linux 这个指令是使用 makewhatis 喔!这一版开使用 mandb 了!

注意:一般来说是真的不会去背指令的,只会去记住几个常见的指令而已。那么怎么找到所需要的指令呢? 举例来说,打印的相关指令其实仅记得 lp (line print)而已。那我就由 man lp 开始,去找相关的说明, 然后,再以 lp[tab][tab] 找到任何以 lp 为开头的指令,找到我认为可能有点相关的指令后, 先以 --help 去查基本的用法, 若有需要再以 man 去查询指令的用法!

info命令

info命令(外建命令):info 来自自由软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息。man 和 info 就像两个集合,它们有一个交集部分,但与 man 相比,info 工具可显示更完整的 GNU 工具信息。 

Linux 帮助指令(man、help、info)_数据库_07

Linux 帮助指令(man、help、info)_实用程序_08