Shell 可以看作是一个命令解释器,为我们提供了交互式的文本控制台界面。我们可以
通过终端控制台来输入命令,由 shell 进行解释并最终交给内核执行。
当我们对某个指令不熟悉时,我们可以使用 Linux 提供的帮助指令来了解这个指令的使用方法。
一、man 获得帮助信息
man 命令 是 Linux 下的帮助指令,通过 man 指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息
基本语法
man (选项)(参数:命令或配置文件)
选项
-a:在所有的man帮助手册中搜索;
-f:等价于whatis指令,显示给定关键字的简短描述信息;
-P:指定内容时使用分页程序;
-M:指定man手册搜索的路径。
参数
数字:指定从哪本man手册中搜索帮助;
关键字:指定要搜索帮助的关键字
• 应用实例
案例:查看 ls 命令的帮助信息
二、help 获得 shell 内置命令的帮助信息
一部分基础功能的系统命令是直接内嵌在 shell 中的,系统加载启动之后会随着 shell 一起加载,常驻系统内存中。这部分命令被称为“内置(built-in)命令”;相应的其它命令 被称为“外部命令”。
help 命令 help 命令只能显示 bash 内建命令的帮助信息,而对于外部命令的帮助信息只能使用 man 或者 info 命令查看
基本语法
help(选项)(参数)
选项
-d:显示内建命令的简要描述。
-m:按照man手册的格式输出内建命令的帮助信息。
-s:仅输出内建命令的命令格式。
不指定选项时:输出的帮助信息类似于-m选项,但是缺少段落名称和'SEE ALSO','IMPLEMENTATION'部分。
参数
bash内建命令(可以为多个,请用空格分隔开)
• 应用实例
案例:查看 cd 命令的帮助信息
三、type 指令
type:显示指定命令的类型。
概要
type [-afptP] name [name ...]
主要用途
- 显示要查找的命令的信息。
- 控制查找范围和行为。
- 显示要查找的命令优先级最高的类型
案例:
注意:
- 该命令是 bash 内建命令,相关的帮助信息请查看 help 命令。
- 命令优先级问题请查看 builtin 命令
四、shell 的内建命令
1、shell 简介
shell 是 Linux 系统中一个提供命名行的交互式工具,本质是一个 c 语言可执行程序,为用户提供了启动程序,管理文件系统中的文件以及运行在 Linux 系统上的进程的途径。命令行提示符是 shell
负责交互的部分,允许用户输入文本命令,然后解释命令,并在内核中执行。
Linux 系统上有多种 shell 可用,Linux 发行版默认的 shell 都是 bash shell,接下来主要介绍 bash shell。
系统中启动哪种类型的 shell,取决用个人用户 ID 配置,在/etc/passwd 文件中可见。只要用户登录到某个虚拟控制终端或是在 GUI 中启动终端仿真器,默认的 shell 程序就会开始运行。
在 CentOS 上打开终端,这时候默认的 shell 程序就开始运行了,同时第一次登录是父 shell,提供 CLI 提示符,等待命令输入。
用户 niujifei 用 bash shell 作为自己的默认程序,bash shell 位于/bin 目录下,/bin/bash 是一个可执行的二进制程序,每个用户都会对应一个 shell
x 代表可执行,ls 加-F 选项,会在可执行文件中的后面加一个 * 号,以便用户找出系统上可执行的文件。-F 选项也可以区分文件夹和文件。
2、外部命令:
外部命令也被称为文件系统命令,是存在与 bash shell 之外的程序,它们并不是 shell 程序的一部分。之前说过 bash shell 本质是也是一个二进制可执行程序。通常位于 /bin、/usr/bin、/sbin
或/usr/sbin 下。
外部命令程序通常位于/bin,/usr/bin,/sbin 或/usr/sbin 中。
当外部命令执行时,会创建出一个子进程。这种操作被称为衍生(forking),外部命令就在衍生的子进程中被执行。
当执行外部程序时,父进程 bash shell 会执行 fork() 创建一个子程序,子程序调用 exec() 执行当前的外部程序,执行完之后结束自己的生命,等待 bash shell 父进程调用 wait() 进行回收子程序的资源。
创建一个进程会有一定的开销,会打开文件,进行磁盘文件 IO 操作。
外部命令比如,可以使用 type 来确定一个命令是否是外部程序。
$PATH 变量包含的目录中系统中绝大多数的可执行命令,它们都是外部命令:
3、内建命令
内建命令并不需要父进程 bash shell 创建一个子程序,内建命令是 bash shell 程序的一部分,执行内建命令等于调用 bash shell 程序的一个程序。可以使用 type 来确定一个命令是否是内建命令。
内建命令不要子进程来执行。它是作为 shell 工具的组成部分存在。
如:cd 和 exit 命令都内建在 bash shell 中。
内建命令属于 shell 执行的一部分,因此执行内建命令不需要创建子进程,也不需要打开程序文件,这样不用操作文件 IO,执行效率高,运行快。
还有一些命令即属于外部命令也属于内建命令,用 type -a 进行查看,比如
其中 which 命令只显示出外部命令文件。
对于即属于外部命令也属于内建命令的,要想执行外部命令,输入指定文件
4、总结
内建命令比外部命令,效率更高,执行更快,执行内建命令相当于调用当前 Shell 进程的一个函数。比如 cd、exit 这些是内部命令,本质是函数调用,可以直接使用,内建命令并不是某个外部程序,而是 bash shell
该程序的组成部分,只要在 bash shell 中就可以运行这个命令。
内建命令不会受到系统环境变化的影响。
执行外部命令时,会打开文件,不但会产生磁盘 I/O,还需要调用 fork 创建一个进程来执行,执行完成后再退出。