Linux中 別名、內部命令、外部命令、hash緩存表 系統調用時的優先級比較

          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>外部命令

                

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章