Shell命令的本质到底是什么?

Shell命令的本质到底是什么?

用户通过在 Shell 中输入一些命令来使用 Linux。给命令附带不同的选项后,同一个命令的功能也会有差异。

Shell 命令分为两种:

  • Shell 自带的命令称为内置命令,它在 Shell 内部可以通过函数来实现,当 Shell 启动后,这些命令所对应的代码(函数体代码)也被加载到内存中,所以使用内置命令是非常快速的。
  • 更多的命令是外部的应用程序,一个命令就对应一个应用程序。运行外部命令要开启一个新的进程。所以效率上比内置命令差很多。

用户输入一个命令后,Shell 会先检测该命令是不是内置命令,如果是就执行,如果不是就检测有没有对应的外部程序:有的话就转而执行外部程序,执行结束后在回到 Shell ;没有的话就报错,告诉用户该命令不存在。

内置命令

内置命令不宜过多,过多的内置命令会导致 Shell 程序本身体积膨胀,运行 Shell 程序后就会占用更多的内存。Shell 是一个常驻内存的程序,占用过多内存会影响其它的程序。

只有那些最常用的命令在有理由成为内置命令,比如 cd,kill,echo 等;

外部命令

外部命令可能是读者比较疑惑的,一个外部的应用程序究竟是如何变成一个 Shell 的命令呢?

应用程序就是一个文件,只不过这个文件是可执行的。既然是文件,那么它就有一个名字,并且存放在文件系统中。用户在 Shell 中输入一个外部命令后,只是将可执行文件的名字告诉了 Shell,但是并没有告诉 Shell 去哪里找这个文件。

难道 Shell 要遍历整个文件系统,查看每个目录吗?这显然是不能实现的。

为了解决这个问题, Shell 在启动文件中增加了一个叫做 PATH 的环境变量,该变量就保存了 Shell 对外部命令的查找路径,如果在这些路径下找不到同名的文件,Shell 也不会在去其它路径下找了,它就直接报错。

PATH 变量保存了检索路径。

我们使用 echo 命令输出 PATH 变量的值,看看它保存了那些检索路径;

[root@iZymkgezvs3r9iZ ~]# echo $PATH
/opt/model/jdk1.8.0_144/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

不同的路径之间以:分隔。你看,Shell 只会在几个固定的路径中查找外部命令。

总结

Shell 内置命令的本质是一个自带的函数,执行内置命令就是调用这个自带的函数。因为函数代码在 Shell 启东时已经被加载到内存了,所以内置命令的执行速度很快。

Shell 外部命令的本质是一个应用程序,执行外部命令就是启动一个新的应用程序。因为要创建新的进程并加载应用程序的代码,所以外部命令的执行速度很慢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值