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发展史

    1、Linux是什么     Linux 是一套 Unix-like 的作业系统,是 Unix 的一种,它控制整个系统基本服务的核心程式 (kernel) 是由 Linus 带头开发出来的,「Linux」这个名称便是以「Linus's Minix」来命名,Linus 选择用「大众公有版权」 (GPL)的方式来发行这份程…

    Linux干货 2016-10-19
  • keepalived高可用实例

    1、keepalived单实例 1)实验环境为VMware虚拟机,两台centos7.2,主机1IP地址为10.1.252.55,主机2IP地址为10.1.252.34,虚拟路由IP为10.1.252.246, 2)确保iptables和selinux不影响实验 (1)确保两台主机的时间同步 [root@localhost ~]# vim…

    Linux干货 2016-11-01
  • LVS类型及工作原理

    lvs工作原理 lvs(Linux Virtual Server),工作于layer4,其原理是根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一提供服务的主机,具体转发到哪一台后端主机需要由挑选算法来决定。通俗来说,lvs的功能是通过在内核空间的netfilter上的INPUT链上的ipvs实现的,当报文由物理网络接口进入主机后,ipvs将流经…

    Linux干货 2016-12-05
  • ip、ss、nmcli命令的使用

    配置Linux网络属性:ip命令 ip命令: ip – show / manipulate routing, devices, policy routing and tunnels ip [ OPTIONS ] OBJE…

    Linux干货 2016-07-29
  • SQL Server 2012 故障转移群集最佳实践

    一、Windows server  2012 系统主域的安装配置 功能介绍:  SQL Server 故障转移群集在网络上显示为一台计算机上的单个 SQL Server 实例。在群集内部,一次只有一个节点拥有群集资源组,满足针对该故障转移群集实例的所有客户端请求。在出现故障(硬件故障、操作系统故障、应用程序或服务故障)或进行计划升级时,组…

    Linux干货 2015-10-27
  • 网络服务基础理论

    最近学习了有关网络管理的有关知识,所以给也在学习这些知识的童鞋分享一下我的一些经验。 听了这几天课,总结了几个前提。 有关网络的通信均是基于数据传输的,且数据均是二进制格式的流式数据。 在网络中需要把大包分成小包, 每传一个包都需要有三个地址,由内向外为端口号、IP地址、MAC地址。端口号确定应用,IP确定网段,MAC确定广播域中的某个网卡。 OSI模型 &…

    Linux干货 2017-09-01