Linux shell 内部命令与外部命令有什么区别以及怎么辨别

内部命令实际上是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等。

内部命令和外部命令最大的区别之处就是性能。内部命令由于构建在shell中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。

1.内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。

2.外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。

type可以用来判断一个命令是否为内置命令


type: usage: type [-afptP] name [name ...]
[root@linuxeye ~]# type type
type is a shell builtin
[root@linuxeye ~]# type -p type
[root@linuxeye ~]# type -t type
builtin
[root@linuxeye ~]# type type
type is a shell builtin
[root@linuxeye ~]# type -t type
builtin
[root@linuxeye ~]# type pwd
pwd is a shell builtin
[root@linuxeye ~]# type whiptail
whiptail is /usr/bin/whiptail
[root@linuxeye ~]# type -t whiptail
file

enable既可以查看内部命令,同时也可以判断是否为内部命令

[root@linuxeye ~]# enable -a #查看内部命令
[root@linuxeye ~]# enable whiptail #非内部命令
-bash: enable: whiptail: not a shell builtin
[root@linuxeye ~]# enable pwd #是内部命令

内部命令用户输入时系统调用的速率快,不是内置命令,系统将会读取环境变量文件.bash_profile、/etc/profile去找PATH路径。

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

hash——>内置命令——>PATH   命令的调用其实应该是这样一个过程。

[root@linuxeye ~]# type pwd
pwd is a shell builtin
[root@linuxeye ~]# type cat
cat is /usr/bin/cat
[root@linuxeye ~]# pwd
/root
[root@linuxeye ~]# ls linuxeye*
linuxeye.pem linuxeye.txt
[root@linuxeye ~]# cat linuxeye.txt
linuxeye
[root@linuxeye ~]# hash -l #显示hash表
builtin hash -p /usr/bin/cat cat
builtin hash -p /usr/bin/ls ls
[root@linuxeye ~]# type cat
cat is hashed (/usr/bin/cat)
[root@linuxeye ~]# hash -r #清除hash表
[root@linuxeye ~]# type cat
cat is /usr/bin/cat

从上面操作可以看出。hash表不存放系统内置命令。

转载于:https://www.cnblogs.com/gavinpan/p/11248279.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]矩阵分解在推荐系统中的应用

矩阵分解是最近几年比较火的算法,经过kddcup和netflix比赛的多人多次检验,矩阵分解可以带来更好的结果,而且可以充分地考虑各种因素的影响,有非常好的扩展性,因为要考虑多种因素的综合作用,往往需要构造cos…

iPhone 系统刷机

1. 下载好固件(爱思 或者 pp助手) e.g. http://jailbreak.25pp.com/gujian/ 2. 将电脑与手机连接上,弹出iTunes软件即可 3. 长按手机电源键 关闭手机 4. 按住电源健,出现屏幕亮出现苹果标志后再按住Home健 5. 屏幕黑屏时松开电源健,继续按照H…

hdu4044

题意:给你一颗树有n个节点,树的根节点为1,表示为敌人的基地,其他叶子节点为你的基地,你一开始有m元,给你每个节点可以建造的塔的数量和塔的价格和可以照成的伤害,每个节点至多建立一座塔。敌人的…

RS100项目进展更新

1. 添加手机界面访问网页,毕竟PDA的屏幕大小和PC机大小不一致,完成了一自适应网页,便于在手机上观看实时画面; 2. 此项目为一个远程视频监控远程开关项目,远程PC机或者手机能操作到监控端的开关,所以在远程…

python os操作

1 # 常用的文件管理操作2 # https://www.cnblogs.com/dkblog/archive/2011/03/25/1995537.html3 import os4 import shutil5 6 # 切换工作目录,默认是在当前目录下7 # os.chdir("xx")8 9 # 当前的工作目录 D:\pythonworkspace\py_base\cn\tele\io 10 print(os.getcw…

洛谷模板,树状数组二 差分

题目链接:https://www.luogu.org/problemnew/show/P3368 先介绍下差分: 设数组a[]{1,6,8,5,10},那么差分数组b[]{1,5,2,-3,5} 也就是说b[i]a[i]-a[i-1];(a[0]0;),那么a[i]b[1]....b[i];(这个很好证的)。 假如区间[2,4]都加上2的话…

KMS安装后激活机器

slmgr /skms 192.168.26.82 slmgr /ato转载于:https://www.cnblogs.com/EllieSoft/p/3410320.html

Java内存模型深度解析:总结

处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和JMM,那么…

sourcetree,创建工作流报错:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解决办法...

1、打开项目下.git/config文件,或者如下图操作: 2、打开config文件以后,删除所有 [gitflow *条目并保存文件 3、关闭并重新打开sourcetree 4、仓库-》Git 工作流-》初始化仓库即可转载于:https://www.cnblogs.com/yxfeng/p/10536955.html

关于a标签的href属性的注意事项

今天在做一个lightbox效果的时候出现了一个问题。 当往下滚动再点击按钮出现lightbox的时候,lightbox的遮罩层不能铺满(即滚动高度处不能铺上),如下图所示。原因是提交按钮使用的是a标签,当给a标签写上href属性的时候&…

爬虫开发4.三种数据解析方式

数据解析三种方式引言:回顾requests实现数据爬取的流程 指定url基于requests模块发起请求获取响应对象中的数据进行持久化存储其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析。因为大多数情况下的需求&…

在mac上安装gitlab

参考链接: https://www.cnblogs.com/floodwater/p/10138265.html 注意事项: 在安装gitlab-ce时,配置hostname域名后,通过域名访问gitlab时,需要配置本机hosts文件,不然不能访问 本地hosts文件中配置后 就可…

org.apache.maven.archiver.MavenArchiver.getManifest错误

org.apache.maven.archiver.MavenArchiver.getManifest错误 网上普遍要add,,,,, 正解: 接到一个新需求,开始搭建项目时遇到了如标题错误。查询网络普遍得到是更新maven插件版本。 之前已安装过此…

d3.js 入门指南

说到数据可视化,我们会行到很多优秀的框架,像echarts、highcharts,这些框架很优雅,健壮,能满足我们对可视化的大部分需求,但是缺点也很明显,就是这些框架几乎是不可定制化的,当遇到特…

【LeetCode】200. 岛屿的个数

题目 给定一个由 1(陆地)和 0(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1:输入: 11110 110…

AI 模拟退火算法

模拟退火算法转载于:https://www.cnblogs.com/yangwenhuan/p/10548171.html

keep用法

keep 是英语中用法灵活的动词之一,下面笔者就其用法归纳如下: 一、用作系动词,意为“保持(某种状态)”,其后常接形容词作表语。如: Please keep quiet / silent! 请保持安静! Aft…

Kubernetes系列之Helm介绍篇

本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复【K8s实战】获取 介绍 Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来管理 Charts。有点类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM。Helm…

HTNL笔记整合

简述概括了HTML 的部分内容,不是很完善,希望能给予你们相对的帮助。 一下文件的整合百度云链接:HTML整合笔记 第一章 HTML入门 课时1:HTML初识 1、英文名(Hyper Text Markup Language)超文本标签语言 对…

EXCEL 图表 只在拐点的时候显示数字

EXCEL图表只在折线的拐点显示数值,中间不需要显示。同时往下拐的,显示在上方,往上的显示在下方,这样数值不会挡住线。 首先,做一些模拟数据 因为起点和终点数值必须显示,所以单元格,C2 D2 C19 D…