您的位置:首页 > 运维架构 > Linux

Linux中 别名、内部命令、外部命令、hash缓存表 系统调用时的优先级比较

2017-05-21 12:19 316 查看
Linux系统中别名、内部命令、外部命令、hash缓存表 优先级优先级比较

在我们平时使用Linux系统执行各种命令时,会发现命令在执行过程中会区分哪个优先执行,哪个其次执行,这里我们来做个试验证明一下。

别名:用alias命令来设置命令的别名。

内部命令:内部命令在系统启动时就调入内存,是常驻内存的。

外部命令:外部命令是系统的软件功能表现为一个文件,用户需要时才从硬盘中读入内存。

hash缓存表:linux系统下会有一个hash缓存表,当你刚开机时这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。

所以从上述我们可以得出: 内部命令>外部命令
内部命令>hash表

接下来我们来比较一下别名和内部命令的关系:

[root@centos6 ]#type cd 确定CD是内部命令
cd is a shell builtin
[root@centos6 ]#type touch 确定touch是外部命令
touch is /bin/touch
[root@centos6 ]#alias cd=touch 给touch取个别名叫CD
[root@centos6 ]#cd 运行这个命令
touch: missing file operand
Try `touch --help' for more information. 系统报错,让你查看更多关于touch的帮助
[root@centos6 ]#

通过运行一个同名的命令,证明系统先调用的是别名。

所以:
别名>内部命令

然后我们再来比较一下hash表和外部命令的关系:

[root@centos6 ]#type who 查看who的地址
who is /usr/bin/who
[root@centos6 ]#cp /usr/bin/who /usr/local/bin/ 复制一个新的who
[root@centos6 ]#ls -l /usr/bin/who /usr/local/bin/who 看一下 两个除了位置其他都一样的who
-rwxr-xr-x. 1 root root 48952 Mar 23 02:52 /usr/bin/who
-rwxr-xr-x. 1 root root 48952 May 21 11:25 /usr/local/bin/who
[root@centos6 ]#who 使用一次让它进入hash缓存表
root pts/1 2017-05-21 11:22 (172.17.250.52)
root pts/2 2017-05-21 11:22 (172.17.250.52)
root tty1 2017-05-21 11:22 (:0)
[root@centos6 ]#type who 看一下它使用的哪一个地址
who is hashed (/usr/local/bin/who)
[root@centos6 ]#rm /usr/local/bin/who 删除那个地址
rm: remove regular file `/usr/local/bin/who'? y
[root@centos6 ]#who 再使用
-bash: /usr/local/bin/who: No such file or directory 找不到目录报错
[root@centos6 ]#

这个找不到目录的报错也就说明了这个命令的执行是先去找hash缓存表里记录的地址,说明hash缓存表在命令执行时比外部命令更具有优先级。
也就证明: 内部命令>hash>外部命令

综上所述:
命令执行优先级: 别名>内部命令>hash>外部命令
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息