在我们日常操作Linux发行版Rocky或Ubuntu等一些系统的时候,往往在输入命令的时候习惯按tab键补全,此时最好是在系统上通过命令yum -y install bash-completion或者apt -y install bash-completion把命令补全给安装上(上述软件安装命令分别对应Rocky和Ubuntu)。

     Linux命令分为内部命令和外部命令,可通过type查询命令到底是内部还是外部命令。如果通过命令type查询出有带"xxxx is a shell builtin"的就是内部命令,除此之外显示有“xxxxx is /usr/sbin/ifconfig”具体path路径的,为外部命令,如图:

内存命令

tab键补全命令以及补全路径的原理_补全

外部命令

tab键补全命令以及补全路径的原理_可执行程序_02

执行命令的过程

    输入命令之后回车,提请shell程序找到键入命令对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来。

shell中可执行的两类命令

内部命令:由shell自带的,而且通过某命令形式提供,用户登陆后自动加载并常驻内存。

外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行完毕再比内存中删除。我个人理解的就是,外部命令在你按回车键之后,系统会去对应外部命令的PATH路径下面去找到命令的可执行文件,启动并执行它执行结束后再从内存中删除。

关于外部命令存放路径的二进制程序和man帮助手册、命令源码可通过which和whereis查询

tab键补全命令以及补全路径的原理_Ubuntu_03

tab键补全命令以及补全路径的原理_Ubuntu_04

tab键补全命令以及补全路径的原理_补全_05