linux的内建命令和外部命令

摘要:

   Linux命令有内部命令(内建命令)和外部命令之分,内部命令和外部命令功能基本相同,但是其工作机制相差很大。本文就内建命令和外部命令做一下介绍。

一、内部命令(内建命令)

   内部命令,实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等。

   所以在内部命令被执行的时候是先去内存里面查找,然后再被执行。

二、外部命令

   外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,因此系统加载时并不随系统一起被加载到内存中。只有在需要时才被系统调用到内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin……等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等。

三、内部命令和外部命令的其他相关介绍

  1)如何区分二者

   判断一个命令是内部命令还是外部命令的方法是:type command

 

[root@localhoast ~]# type pwd
pwd is a shell builtin
[root@localhoast ~]# type vim
vim is /usr/bin/vi

   显示的builtin就表示该命令是内部(内建命令),显示出执行路径的命令就是外部命令。

 2)二者的执行过程

   内部命令被用户执行时系统会从内存中去调用,调用的速率快。外部命令被执行的时候,系统将会读取环境变量文件.bash_profile、/etc/profile去找PATH路径。

然后在提一下命令的调用,有些外部命令被使用过后,会存在在hash表中,当你再次输入该命令它的调用会是这样一个过程。

hash——>内置命令——>PATH   命令的调用其实应该是这样一个过程。hash的优先级最高,然后是内部命令,最后是外部命令。

[root@localhost ~]# pwd             
/root
[root@localhost ~]# ls
anaconda-ks.cfg  install.log  install.log.syslog
[root@localhost ~]# hash -l  //显示hash表
builtin hash -p /bin/cat cat
builtin hash -p /bin/ls ls

从hash表中可以看出,hash表不存放系统内置命令。

原创文章,作者:hanlln1,如若转载,请注明出处:http://www.178linux.com/52643

(4)
hanlln1hanlln1
上一篇 2016-10-18 16:36
下一篇 2016-10-18 16:44

相关推荐

  • 网络管理基础

    什么是网络?    在计算机领域中,网络是信息传输,接受,共享的虚拟平台,通过它把各个点,面体的信息联系到一起, 从而实现这些资源的共享。 网路物理组件     终端:可发送和接受数据的,如计算机。移动设备,打印机,服务器….    互联设备:互联…

    Linux干货 2016-09-06
  • Linux计算机基础-入门2016-07-19

    Linux计算机基础-入门2016-07-19 计算机系统的组成部分 计算机系统由硬件系统和软件系统两大部分组成 硬件系统 冯.诺依曼体系结构: 1946年数学家冯.诺依曼提出运算器,控制器,存储器,输入设备,输出设备。 具体变现为一下硬件: 运算器,控制器  ——>  CPU 存储器  …

    Linux干货 2016-08-04
  • 学习Linux,记得有困难,找“男人”。

      对于Linux初学者而言,较短时间内需要涉及到几十个命令,而且每个命令还可辅以短选项、长选项…让初学者在实践时苦不堪言。   一头雾水时,请找Super"man"!  "man"的使用非常简单,命令行直接输入man COMMAND,如#man ls。此处的COMMAND均指…

    Linux干货 2016-01-15
  • Linux bash中的命令行展开介绍及应用示例

    Linux bash中的命令行展开介绍及应用示例 在Linux bash中可以使用命令行展开特性一步完成需要分开成多步完成的操作,达到事半功倍的效果。在Linux指令参数位置使用"{}" 将相应的参数括起来,括号中的参数以逗号分隔,然后bash在执行这一指令时会自动将括号中的内容进行展开。 相关示例如下: 同时创建多个目录,在/tmp目录…

    Linux干货 2016-11-07
  • Linux终端类型

    Linux终端类型 关键字:linux终端,串行终端ttySn;伪终端pty;控制终端tty;控制台终端console 要想与Linux打交道,就必须学会使用Linux终端。所谓Linux终端,其实也就是一种控制台,一种字符设备,通常用tty标识,它是用户和Linux内核交互的平台,用户能在平台上通过各种指令操作Linux。终端的特殊设备文件一般分为以下几种…

    Linux干货 2016-10-19
  • 正则表达式详解​

      正则表达式详解 一、概述   GREP(global search regular expression(RE) and print out theline),是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。利用这些返回值就可进行一些自动化的文本处…

    Linux干货 2015-05-11