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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中 别名内部命令外部命令hash缓存表 系统调用时的优先级比较相关的知识,希望对你有一定的参考价值。

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


      

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

     

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


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


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


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


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

                                          内部命令>hash表


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


[[email protected] ]#type cd                                           确定CD是内部命令

cd is a shell builtin

[[email protected] ]#type touch                                      确定touch是外部命令

touch is /bin/touch

[[email protected] ]#alias cd=touch                                给touch取个别名叫CD

[[email protected] ]#cd                                                    运行这个命令

touch: missing file operand

Try `touch --help‘ for more information.                    系统报错,让你查看更多关于touch的帮助

[[email protected] ]#


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


所以:    

                                                 别名>内部命令


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


[[email protected] ]#type who                                                    查看who的地址

who is /usr/bin/who

[[email protected] ]#cp /usr/bin/who /usr/local/bin/                复制一个新的who

[[email protected] ]#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

[[email protected] ]#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)

[[email protected] ]#type who                                                    看一下它使用的哪一个地址

who is hashed (/usr/local/bin/who)

[[email protected] ]#rm /usr/local/bin/who                                删除那个地址

rm: remove regular file `/usr/local/bin/who‘? y

[[email protected] ]#who                                                            再使用

-bash: /usr/local/bin/who: No such file or directory             找不到目录报错

[[email protected] ]# 


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

               也就证明:                            内部命令>hash>外部命令


综上所述:

               命令执行优先级:                     别名>内部命令>hash>外部命令

                

本文出自 “11986114” 博客,请务必保留此出处http://11996114.blog.51cto.com/11986114/1927874

以上是关于Linux中 别名内部命令外部命令hash缓存表 系统调用时的优先级比较的主要内容,如果未能解决你的问题,请参考以下文章

linux入门——基础命令

Linux命令之Hash缓存表

基础LINUX学习与配置

linux入门——基础命令

关于shell中的hash缓存

hash 哈希表 缓存表