內部命令與外部命令——Linux基本命令(3)

1.     內部命令與外部命令

內部命令:由shell自帶的,而且通過某命令形式提供

內部命令在系統啟動時就調入內存,是常駐內存的,所以執行效率高。

外部命令:在文件系統路徑下有對應的可執行程序文件

外部命令是系統的軟件功能,用戶需要時才從硬盤中讀入內存。


2.     命令類型

1)判斷命令類型

使用type可以判斷一個命令是內部命令還是外部命令

內部命令與外部命令——Linux基本命令(3)

如圖,cd為內部命令,ifconfig為外部命令。

 

2enable 顯示所有啟用的內部命令

 內部命令與外部命令——Linux基本命令(3)

enable -a顯示所有內部

3enable |wc -l 統計啟用的內部命令數量(l是字母不是數字1

內部命令與外部命令——Linux基本命令(3)

統計出共61

 

4enable -n COMMAND禁用命令

例如,輸入enable –n bg,就可以禁用bg

輸入enable |wc –l 查詢發現只有60

再用enable查詢,發現果然沒有bg了,即被禁用了。

內部命令與外部命令——Linux基本命令(3)

輸入enable –n可以查詢所有被禁用的命令

內部命令與外部命令——Linux基本命令(3)

同樣,可以使用enable
-n |wc -l
統計被禁用的內部命令數量,可以使用enable
-a |wc -l
統計所有的內部命令數量

 

5enable COMMAND啟動命令

使用enable可以使被禁用的命令重新啟動

內部命令與外部命令——Linux基本命令(3)

將那三條命令重新啟動,查詢被禁用里面為空,且啟動命令數又恢復到61個了。

 

6)關于禁用

禁用內部命令并不是說不能使用,而是需要從硬盤當中去其路徑中尋找所對應的外部命令。

內部命令與外部命令——Linux基本命令(3)

 

3.     hash

1)緩存路徑

系統初始hash表為空,當外部命令執行時,默認會從PATH路徑下尋找該命令,找到后會將這條命令的路徑記錄到hash表中,當再次使用該命令時,shell解釋器首先會查看hash表,存在將執行之,如果不存在,將會去變量PATH路徑下尋找。

使用 echo 查看PATH的路徑:

內部命令與外部命令——Linux基本命令(3)

以冒號為間隔符,從左到右依次尋找。

利用hash緩存表可大大提高命令的調用速率。

如圖,fdisk是一個外部命令,當運行過后,這個命令就多了一個hash,即將路徑緩存了下來。

內部命令與外部命令——Linux基本命令(3)

緩存過后就不用去PATH路徑依次去找了。

 

這里舉一個例子。分別運行pwdifconfig,使其緩存到hash里,可以看到ifconfig的路徑在pwd之前。然后我們使用cp命令,將ifconfig復制到pwd之前的路徑并且也命名為pwd。從理論上來說,應該通過路徑按照順序從左到右去尋找,會先找到/usr/local/sbin/pwd,內容應該為ifconfig的內容,但是我們執行pwd之后發現仍然是pwd的結果,并且查詢pwd的路徑仍然為/bin/pwd。

這就說明,在之前運行的時候就已經將pwd的路徑緩存到/bin/pwd中了,所以再次運行時不需要在PATH路徑中依次尋找,而是調用hash緩存中的路徑。

內部命令與外部命令——Linux基本命令(3)

 

2hash 顯示當前被hash的所有外部命令

內部命令與外部命令——Linux基本命令(3)

 

hash -l 顯示當前被hash的外部命令,包含別名

內部命令與外部命令——Linux基本命令(3)

 

3hash -d name刪除hash

現在我們將hash中的緩存的pwd刪除,刪除時需要輸入的name就是用hash –l查到的別名。

內部命令與外部命令——Linux基本命令(3)

可以看出列表中沒有了pwd

然后我們查看一下pwd的類型,發現地址變成之前復制過去的地址了,因為緩存被刪除了。

內部命令與外部命令——Linux基本命令(3)

所以此時執行pwd,應該是ifconfig的內容了。

 內部命令與外部命令——Linux基本命令(3)


PS:也可以使用hash -r 清空所有的hash。

hash -p /…/…. name 可以手動增加一個hash緩存。

 

總結:當執行一個命令時,它的優先級為:

         內部命令> hash
> PATH

原創文章,作者:T_endless,如若轉載,請注明出處:http://www.www58058.com/80244

(1)
T_endlessT_endless
上一篇 2017-07-13 16:13
下一篇 2017-07-13 17:55

相關推薦

  • N25-第六周作業

    第六周 請詳細總結vim編輯器的使用并完成以下練習題 文本編輯器: vim:     模式化的編輯器         基本模式:          &…

    Linux干貨 2016-12-28
  • 如何修復系統問題–實驗

    實驗一: MBR的數據被破壞了,系統無法開機啟動,如果有光盤,會自動啟動光盤,因為在檢查的時候,認為是沒有硬盤設備的 dd if=/dev/zero of=/dev/sda bs=1 count=446 1. 進入光盤的救援模式中2. 切根  chroot /mnt/sysimage/   再使用 grub-install /d…

    Linux干貨 2017-09-03
  • 文本編輯工具Sed

                    Stream EDitor, 行編輯器         sed是一種流編輯器,它一次處理一行內容。處理時,一次性的先把文件讀入內存中,并且開辟一塊內存空間,該內存空間稱為“模式空間”(pa…

    Linux干貨 2016-08-10
  • Centos6.8 搭建LAMP平臺

    Centos6.8 搭建LAMP平臺 §·運行環境介紹 LAMP的運行環境介紹: L代表: Linux  Centos 6.8 A代表: apache  httpd-2.2.15-53.el6.centos.x86_64 M代表:MySQL  mysql-server-5.1.73-7.el6.x86_64 P代表: php &…

    Linux干貨 2016-10-12
  • 初識linux文件管理

    初識linux文件管理 1.文件系統與目錄結構 文件系統從根目錄 下開始,用“/”。 以. 開頭的文件為隱藏文件,路徑分隔用/表示。文件系統的層級結構是LSB(linux standard base),遵循文件系統層級標準(FHS ) 文件命名規則:   文件名最長255個字節,包括路徑名在內共4095個字節  &nb…

    2017-02-18
  • bash編程函數select語句的使用

    £select             select循環主要用于創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上,并顯示PS3提示符,等待用戶的輸入,用戶輸入菜單列表中的某個數字,執行相應的命令,用戶輸入被保存在變量REPLY中。 select是個…

    Linux干貨 2016-08-24
欧美性久久久久