使用type命令可以查看到命令是外部命令还是内部命令。
不同命令的执行过程不同,内部命令默认开机加载进内存中,当执行内部命令的时候就直接从内存中放到CPU里面直接运行了,外部命令对应的程序在硬盘上,就需要把硬盘中的文件加载到内存中再到CPU才可以运行。
执行速度:内部命令>外部命令,但是我们从感官上不会有任何区别,例如1ms和10ms的差距对我们而言没有太大的区别
内部命令集成在shell中,是随着开机就会自动加载并在后台运行,开机就会加载/bin/bash
例如echo是属于内部命令,集成在shell中
例如hostname属于外部命令。执行hostname会把磁盘中的文件加载到内存中并执行
使用type -a echo 可以看到echo命令既是内部命令又是外部命令,使用echo命令系统运行会优先执行内部的命令。
提供了外部命令是提供容错机制,用的shell如果不是/bin/bash,如果里面不包含echo命令,那此时即可变成转为使用外部命令/usr/bin/echo,提供外部命令做备用。
为何要区分内部命令和外部命令,不把外部命令都放到内部命令里面随着开机加载,其实原因很简单,很多外部命令不是常用,只需要在执行的时候临时调用即可,执行完后再从内存中删除掉那就可以不占用内存,让开机不用加载这么多,即可减轻系统负载。
help命令可以列出所有内部命令的
使用命令,他会优先从内部命令查找,如果找不到,即从搜索外部命令的列表($PATH变量)中搜索,按目录顺序查找如果按上述顺序都没查到命令即报错
补充:alias的使用
执行顺序:alias -> 内部命令 ->外部命令(当alias和内部命令、外部命令重名则优先alias)
当alias和外部命令或者内部命令重名。使用斜杠\+命令可以运行不用alias的命令,用原始命令
永久修改alias别名配置,配置好后source .bashrc
第一次执行外部命令时,把命令从磁盘中放到内存中执行,第二次执行直接从内存中拿。从hash表可以看到执行过的命令,hits表示执行的次数。