1. 程式人生 > >Linux中關於別名、內部命令、hash緩存、以及外部命令(硬盤裏路徑)的優先級比較。

Linux中關於別名、內部命令、hash緩存、以及外部命令(硬盤裏路徑)的優先級比較。

計算機 for 定義 hist -h linu 指定 history 我們

我們都知道:計算機中文件的讀取 內存>緩存>硬盤
linux中別名是為了簡化某些命令的輸入,在終端輸入alias可以查詢系統存在的別名,用戶也可以自定義別名,具體為:alias 別名=‘命令 ‘

[root@CentOs6 ~]# alias hist=‘history‘

[root@CentOs6 ~]# hist
    1  alias hist=‘history‘
    2  type hsit
    3  type hsitory
    4  enable
    5  hist
[root@CentOs6 ~]# 

linux中使用enable 獲取linux所有的內部命令

linux中使用enable -n command 禁用所指定的內部命令
linux中使用enable -n 顯示所禁用內部命令

[root@CentOs6 ~]# enable -n pwd
[root@CentOs6 ~]# enable -n
enable -n pwd
[root@CentOs6 ~]# 

下面是關於別名和內部命令的優先級比較

[root@CentOs6 ~]# type touch    touch是外部命令
touch is /bin/touch
[root@CentOs6 ~]# type cd         cd是內部命令
cd is a shell builtin
[root@CentOs6 ~]# alias cd=‘touch‘
[root@CentOs6 ~]# cd
touch: missing file operand
Try `touch --help‘ for more information.
[root@CentOs6 ~]# 

可以看出別名優先於內部命令
下面是外部命令與hash緩存比較優先級:
系統初始Hash表是空的,如果系統重啟也會清空,當外部命令執行是會到PATH裏找該命令,然後記錄在Hash裏,當再執行時就到Hash裏取,這樣會加快執行速度。而且Hash裏不存放內部命令

[root@CentOs6 ~]# hash -r
[root@CentOs6 ~]# date
Sat Jul 14 00:23:49 CST 2018
[root@CentOs6 ~]# hash
hits    command
   1    /bin/date
[root@CentOs6 ~]# mv /bin/date /sbin
[root@CentOs6 ~]# date
-bash: /bin/date: No such file or directory
[root@CentOs6 ~]# 

先清除hash中所有緩存,執行date,依然是從緩存中讀取到date所在位置,但date已經被移動到其他位置,無法執行,說明hash高於外部路徑
下面是內部命令與hash緩存比較優先級:
內部命令直接在內存啟動時就存在,直接放在內存裏面。hash緩存必須執行過命令才能存在hash裏,而且hash緩存裏面不放內部命令,說明輸入內部命令時,不會去hash裏去找,直接就運行了。所以內部命令>hash緩存。
綜上所述:alias > 內部命令 > hash緩存 > path(外部路徑)

Linux中關於別名、內部命令、hash緩存、以及外部命令(硬盤裏路徑)的優先級比較。