linux 内建命令与外键命令

linux shell 内建命令与外建命令的简单介绍

在 linux 里面,命令分为外键命令和内键命令。他们的功能基本相同,但是还有是一些差别的。

讲之前,先来看一个实验,要查看一下命令的帮助,通常是 –help 或者 -h ,以及使用 man 手册,那就来看一下

ainy@DESKTOP-8DHJ665:~$ echo -h
-h
ainy@DESKTOP-8DHJ665:~$ echo --help
--help
ainy@DESKTOP-8DHJ665:~$

这里可以看 -h 和 –help 都被当成了是输出的实体 (echo命令是打印,输出信息等),帮助变得不可用,man 手册也可以正常使用。

ainy@DESKTOP-8DHJ665:~$ which echo
/bin/echo
ainy@DESKTOP-8DHJ665:~$ /bin/echo --help
Usage: /bin/echo [SHORT-OPTION]... [STRING]...
or: /bin/echo LONG-OPTION
Echo the STRING(s) to standard output.

-n do not output the trailing newline
-e enable interpretation of backslash escapes
-E disable interpretation of backslash escapes (default)
--help display this help and exit
--version output version information and exit

###信息太多,此外省略一部分

这里,使用 /bin/echo –help 可以正常使用,并查看到了帮助信息。这是为什么呢?其实这就是因为 echo 是内建命令,造成的。而使用 /bin/echo 则就变成了外部命令。

PS:内键命令与外键命令,有的时候也会被叫做 内部命令与外部命令。

内键命令:是 shell 的一部分,其中包含了一些比较简单的 linux 系统的命令。那么这些命令,是由 linux shell 识别,只需要在 linux shell 内部就可以运行完成。一般情况下是由 linux 系统启动后,就被 linux shell 加载,并且一直保留在内存中。这些内建命令,都是写在 shell 的源码里面的。也正是因为这点,所以内建命令的执行速度,相比外建命令的执行速度来讲,要快很多,因为它不是需要创建子进程来解析命令了。但外建命令需要创建子进程来解析。常用的内建命令有: pwd , echo , export , history , cd 等等。

外键命令:一般是由 linux 系统中的实际应用程序提供的,实际应用程序的功能都很强大,所以他们程序量也会很大,所以在 linux 系统启动时,并不会像 shell 那样会被一起加载到内存中,而是在系统什么时候需要使用,才会将它调入到内存中,通常的情况下,外部命令的实体,不会被包含在 linux shell 中,但是他的执行过程,也就是运行过程,这个还是由 shell 来控制的,shell 管理外键命令执行的路径查找,加载,控制执行的过程等。外键命令,同时也在 shell 之外,额外安装的,一般情况下放在 /bin , /sbin , /usr/bin , /usr/sbin , /usr/local/bin 等路径。

type 命令,使用 type 命令可以分辨这是一个内建命令,还是外建命令:

ainy@DESKTOP-8DHJ665:~$ type pwd
pwd is a shell builtin
ainy@DESKTOP-8DHJ665:~$ type cd
cd is a shell builtin
ainy@DESKTOP-8DHJ665:~$ type vi
vi is /usr/bin/vi
ainy@DESKTOP-8DHJ665:~$

在这命令中,提示 xxx is a shell builtin 就是代表的这是一个内建命令,而直接显示了路径,就是外建命令了。

再来看一个实验

[root@localhost ~]# which echo
/bin/echo
[root@localhost ~]# mv /bin/echo .
[root@localhost ~]# echo ainy
ainy
[root@localhost ~]# /bin/echo
-bash: /bin/echo: No such file or directory
[root@localhost ~]#

由于可以看到,即使把 echo 移动走了,还是可执行,由此可以得出,shell 执行命令解析器的时候,应该是先执行内建命令,如果要执行的命令不是内建命令,则调用相应的外建命令。

猜您喜欢
    3条评论
    • 0
      杨洁博客 回复

      文章很不错,主次分明,讲解的也很详细。 :mrgreen: 赞!!!!

    • 0
      我兜里有糖 回复

      还是内部自带的好,方便用

      • ainy 回复私信

        linux 的命令,大部分都是外部的,内部的很少,就那么几个的