bash shell笔记整理——外部命令和内部命令区别
linux命令的类别:
- 外部命令
- 内部命令
什么是内部命令
bash shell程序内部自带的命令。
什么是外部命令
不是bash shell内建命令,bash会根据用户给定的命令从PATH环境变量中搜寻,找到后会使用hash(一个命令、一个程序)进行缓存以提高下次的调用外部命令的速度。
如何区分是外部还是内部命令
方法一:使用type命令可以根据输出结果进行判断
type命令用法:
type [-afptP] 命令 [NAME...]
选项:(这些选项几乎很少用到,有需要可以自行使用“help type”进行查看)
NAME:命令
示例1:
[root@nginx-proxy1 ~]# type cp
cp 是 `cp -i' 的别名
[root@nginx-proxy1 ~]# type date
date 是 /usr/bin/date
# 查看alias是属于哪种类型的命令,结果显示为内部命令
[root@nginx-proxy1 ~]# type alias
alias 是 shell 内嵌
# 同时查看多个命令
[root@nginx-proxy1 ~]# type cp mv
cp 是 `cp -i' 的别名
mv 是 `mv -i' 的别名
方法二:使用help命令区分
一般情况下,help 命令如果有输出帮助文档,那么这类命令大多都是内建命令,而外部命令基本上都是使用man来查看帮助文档,但不是绝对。(实际上我们并不需要过多去关注是外部还是内部命令)
从上面的示例1,我们知道,alias是内建命令,而date是外部命令,此时我们使用help来查看这两个命令。
# 从返回输出中我们可以看到help无法找到cp命令的帮助主题。
[root@nginx-proxy1 ~]# help cp
bash: help: 没有与 `cp' 匹配的帮助主题。尝试 `help help' 或者 `man -k cp' 或者 `info cp'。
# 而alias别名则可以找到
[root@nginx-proxy1 ~]# help alias
alias: alias [-p] [名称[=值] ... ]
定义或显示别名。
不带参数时, `alias' 以可重用的格式
`alias 名称=值'在标准输出设备上打印别名列表。
否则,对于每个给定值的名称定义一个别名。
值末尾的空格会使下一个词被检测
作为别名替换展开。
选项:
-p 以可重用的格式打印所有的已定义的别名
退出状态:
除非一个没有定义的名字被作为参数提供,否则 alias
返回值为真。
关于外部命令通过hash缓存提速下次使用
上面我们讲到外部命令被使用后,为了提高下一次查找速度,bash会对其进行hash映射成一个表(通过使用hash命令),用于记录命令对应的所在的具体路径。
首先我们来看看hash 命令到底属于哪种类型的命令
# 从结果后我们可以清晰得看到hash是bash shell的内建命令
[root@nginx-proxy1 ~]# type hash
hash 是 shell 内嵌
接下来我们来运行下hash命令
[root@nginx-proxy1 ~]# hash
命中 命令
1 /usr/bin/grep
1 /usr/bin/whereis
6 /usr/bin/man
# 这类的命中指的是用户使用改命令时是否命中了hash之前所缓存下来的映射表,每当你运行同一个命令就会累加一次。
# 这里我特意再运行一次whereis命令
[root@nginx-proxy1 ~]# whereis hash
hash: /usr/share/man/man1/hash.1.gz /usr/share/man/man1p/hash.1p.gz
# 再次运行hash命令,可以看到whereis命令的命中次数变成了2.
[root@nginx-proxy1 ~]# hash
命中 命令
1 /usr/bin/grep
2 /usr/bin/whereis
6 /usr/bin/man
hash命令的一些选项用法:
| 选项 | 作用 |
|---|---|
| -d | 删除指定命令再hash表中的缓存 |
| -r | 删除所有被hash缓存的命令 |
示例:
[root@nginx-proxy1 ~]# hash
命中 命令
1 /usr/bin/grep
2 /usr/bin/whereis
6 /usr/bin/man
# 将whereis从hash缓存表中删除
[root@nginx-proxy1 ~]# hash -d whereis
# 再次查看已经被删除了
[root@nginx-proxy1 ~]# hash
命中 命令
1 /usr/bin/grep
6 /usr/bin/man
bash shell笔记整理——外部命令和内部命令区别的更多相关文章
- Linux命令的内部命令执行
一个命令可能既是内部命令也是外部命令 因为内部命令优先级高,先执行内部命令 [04:21:44 root@C8[ ~]#type -a echo echo is a shell builtin ech ...
- Bash shell 笔记总结(一) 转自http://www.bubuko.com/infodetail-509992.html,谢谢原作者
本文是上课笔记总结,涉及细节知识点会在以后文章说明! bash脚本编程: 脚本程序:解释器解释执行: shell: 交互式接口:编程环境: shell: 能够提供一些内部命令,并且能通过PATH环境变 ...
- linux bash Shell脚本经典 Fork炸弹演示及命令详解
Jaromil 在 2002 年设计了最为精简的一个Linux Fork炸弹,整个代码只有13个字符,在 shell 中运行后几秒后系统就会宕机: :(){:|:&};: 这样看起来不是很好理 ...
- shell笔记整理1---vim编译器基础应用(参考鸟哥)
1.linux中的配置文件都已是以ASCII的纯文本的形式存在 2.vim文本编译器. 一般模式:用vi打开的一个文件直接进入的就是一般模式,这个模式可以移动光标和删除字符,复制粘贴等,但是不能比那几 ...
- docker外部执行容器内部命令
docker exec jenkins 'cat /var/jenkins_home/secrets/initialAdminPassword'
- Bash 中同名的内部命令和外部命令
昨天有个人在 bug-bash 上问:为什么 [ --help 没有输出帮助信息.有人回答他了,原因是 coreutils 提供的 [ 命令才接受 --help 选项,Bash 自己的 [ 命令不接受 ...
- 4.Shell内部命令
4.Shell内部命令内部命令是由shell自身提供的.如果某个内部命令的名称是一个简单命令的第一个单词,shell会直接执行这个命令,而不会启动其它程序.对于一些不可能或者不方便通过外部程序实现的功 ...
- bash shell学习-shell基础 (笔记)
When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时 ...
- bash shell笔记1 脚本基础知识
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...
- Linux的内部命令和外部命令
为了提高系统运行效率,将经常使用的轻量的命令在系统启动时一并加载这些命令到内存中供shell随时调用,这部分命令即为内部命令.反之,只有当被调用时才会被硬盘加载的这部分命令即为外部命令. 内部命令实际 ...
随机推荐
- API数据接口的应用步骤
API(Application Programming Interface)是现代软件应用程序开发中的一项重要技术,它允许不同的应用程序之间进行通信和数据交换.API接口通过提供统一的访问点,使得应用 ...
- [错误] SQL logic error near "date": syntax error
问题的来源 今天把一个项目的数据库从MySQL改到Sqlite 调试时发生了这个错误. 百度又看不懂英文(很多是国外发的), 就折腾了一下 原因 C# Sqlite 不能使用参数前缀"?&q ...
- Text2Cypher:大语言模型驱动的图查询生成
话接上文<图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index> 同大家简单介绍过 LLM 和图.知识图谱相关的结合,现在我来和大家分享下最新的成果.毕竟,从 GP ...
- 使用js开发一个快速打开前端项目的alfred插件
使用js开发一个快速打开前端项目的插件 目录 前言 使用的技术栈 步骤 问题发现 待优化 前言 一直以来开发都是先打开vscode,然后选择项目,在项目多的情况下会觉得挺繁琐:如果同时打开了许多vsc ...
- 【matplotlib 实战】--堆叠柱状图
堆叠柱状图,是一种用来分解整体.比较各部分的图.与柱状图类似,堆叠柱状图常被用于比较不同类别的数值.而且,它的每一类数值内部,又被划分为多个子类别,这些子类别一般用不同的颜色来指代. 柱状图帮助我们观 ...
- Android下音视频对讲演示程序(声学回音消除、噪音抑制、语音活动检测、自动增益控制、自适应抖动缓冲)(2023年07月13日更新)
Android下音视频对讲演示程序 必读说明 简介 本软件根据<道德经>为核心思想而设计,实现了两个设备之间进行音视频对讲,一般可用于楼宇对讲.智能门铃对讲.企业员工对讲.智能对讲机. ...
- 监控Mysql数据库
Prometheus(普罗米修斯) 监控Mysql数据库: 这个是基于第一版本环境搭建的,需要部署prometheus: 服务器 IP地址 Prometheus服务器 192.168.1.22 被监控 ...
- LAMP搭建流程与应用
LAMP搭建流程 1.环境准备 [root@localhost opt]# systemctl stop firewalld.service [root@localhost opt]# seten ...
- OA、CRM、SCM、ERP之间的区别和联系是什么?
当然,各个系统之间要集成.集成之后的东西,不叫做ERP.做ERP的人说叫ERP,做PLM的人说叫PLM,卖OA的人更愿意叫OA.其实,那个集成之后的东西,啥也不叫. 英文名 中文名 百科释义 关注 ...
- JVM-Java虚拟机是怎么实现synchronized的?
1. JVM的锁优化 今天我介绍了 Java 虚拟机中 synchronized 关键字的实现,按照代价由高至低可分为重量级锁.轻量级锁和偏向锁三种. 重量级锁会阻塞.唤醒请求加锁的线程.它针对的是多 ...