理解Linux内置命令与外部命令

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/hidengxin/article/details/84708090

在学习后面bash shell知识点前,我们得搞明白一件事,什么是内置命令与外部命令?

你可能听到过“内置命令”这个术语,大多都是如下解释,今天换个方式来说,感觉大家会更能理解。


Linux的命令可以分为内部命令和外部命令:

    内置命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。

    而外部命令是系统的软件功能,用户需要时才从硬盘中读入内存

1、先说说外部命令

外部命令也称为文件系统命令,是bash shell之外的程序,它并不是shell 的一部分。外部命令一般位于/bin、/usr/bin、/sbin或/usr/sbin中。

eg: 通过下面几种方式可以查找到某个外部命令 tar 或 ps。

当执行外部命令时,Linux系统会创建出一个子进程(这种操作被称为衍生)。

为了演示,我们分析ps -f 的结果。

上图结果所示:当执行ps时会创建出一个子进程9122(ps命令的PID是9122),其父PID 是9084。

作为父进程的bash shell的PID是9084。

当进程必须执行衍生时,Linux系统需要消耗资料来设置新子进程的环境。

通过上面演示,得出结论:执行外部命令有额外的代价。

2、再说内置命令

内置命令和shell是一体的,它们作为shell工具的组成部分存在,不需要通过衍生出子进程来执行,也不需要打开程序文件。

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

我们还需要注意一点,有很多命令有多种实现。

例如pwd既是外部命令又是内置命令。原因是pwd有两种不同实现。

查看命令的不同实现,使用type的-a参数

对于有多种实现的命令,如果想要使用其外部命令实现,直接指明对应的文件就可以了。

例如,要使用外部命令pwd,可以输入/usr/bin/pwd

3、总结

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

猜你喜欢

转载自blog.csdn.net/hidengxin/article/details/84708090