Linux shell 内建命令和外部命令

前言

在shell中可执行的命令分为内键命令和外部命令。在此之前,搞明白shell的内建命令和外部命令非常重要。下面将简要描述什么是内建命令和外部命令?

内建命令

内建命令不需要子进程来执行,它已经和shell编译为一体。作为shell工具的组成部分存在。不需要借助外部程序文件来运行。而常见shell内建命令有如下命令:

bind将键盘序列绑定到一个 readline 函数或宏
cd将当前目录切换为指定的目录
dirs显示当前存储目录的列表
echo将指定字符串输出到 STDOUT
exec用指定命令替换 shell 进程
export设置子 shell 进程可用的变量
fc从历史记录中选择命令列表
fg将作业以前台模式运行
getopts分析指定的位置参数
help显示帮助文件
history显示命令历史记录
jobs列出活动作业
kill向指定的进程 ID(PID) 发送一个系统信号
pwd显示当前工作目录的路径名
set设置并显示环境变量的值和 shell 属性
test基于指定条件返回退出状态码 0 或 1
times显示累计的用户和系统时间
type显示指定的单词如果作为命令将会如何被解释
umask为新建的文件和目录设置默认权限
unset刪除指定的环境变量或 shell 属性
wait等待指定的进程完成,并返回退出状态码

可以利用type命令来了解某个命令是否是内建的。

type echo

在这里插入图片描述

type cd

在这里插入图片描述

type ps

在这里插入图片描述

由此可见,如果是内建命令,会显示 shell 内嵌。则echo、cd 是一个 Shell 内建命令。而ps命令则显示 是位于/usr/bin/中,并不是shell的一部分。

内建命令的执行速度要更快,效率也更高。

说到这里要提请一下。有些命令有多种实现。常见的为echo、pwd这两个命令既是内建命令也是外部命令。如果只用type命令不带选项,则只会显示shell 内嵌。上面的例子也测试过 type echo。只会显示shell 内嵌。要查看命令的不同实现,必须使用type -a选项。

type -a echo 

在这里插入图片描述

使用history命令

一个有用的内建命令history命令。bash shell会跟踪你用过的命令,这在开发过程中很重要。可以换回这些命令并重新使用。

用法:
要查看最近的用过的命令,可以输入不带选项的history使用。

histroy
在这里插入图片描述
在上面的截图中,因历史记录较多,只截屏了一小段信息。还用一种方法就是在终端输入 !! ,然后按回车键就能够换回刚刚用过的那条命令来使用。

外部命令
外部命令有时候被称为文件系统命令,是存在于bash shell之外的程序。它们并不是shell程序的一部分。外部命令通常位于 /bin、/usr/bin、/sbin、/usr/sbin中。

可以使用which和type命令来找到。假设要找ps命令。

which ps

在这里插入图片描述

当然也可以使用type 命令来找:

在这里插入图片描述

这里要注意一下:which 命令只显示外部命令的文件。

外部命令的执行时,会创建一个子进程。这个操作被称为衍生。在执行速度相比内建命令来说,相对要慢些。这也因为外部命令程序通常位于/bin、/usr/bin、/sbin、/usr/sbin查找命令上需要时间。

外部命令 ps执行会创建子进程。

ps -f

在这里插入图片描述
ps命令执行时,创建子进程。从截图信息来看,ps的PID是4231,父PID为3437。而bash shell 父进程PID为3437。当进程必须执行衍生操作时,它需要花费时间和精力来设置新的子进程的环境。

总结

外部命令会创建出一个包含全新环境的子进程,而内建命令不会。相比之下,外部命令的使用成本更高。内建命令因为不需要创建新的环境,所以更高效,不会受到环境变化的影响。

在这里插入图片描述

扫二维码关注微信公众号,获取技术干货

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值