內部命令與外部命令——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
下一篇 2017-07-13

相關推薦

  • Linux文件管理類命令相關

    Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 1)、查看文件命令: (1)ls命令: list,列出目錄下的內容 語法: ls [OPTION]… [FILE]… 常用選項: -a: 顯示所有文件,包括隱藏文件; -A:顯示除.和..之外的所有文件; -l: –long, 長格式列表,即顯示文件的詳細屬性信息; -h, –huma…

    Linux干貨 2016-11-06
  • 內部命令與外部命令

    內部命令與外部命令 內部命令在系統啟動時就調入內存,是常駐內存的,所以執行效率高。 外部命令是系統的軟件功能,用戶需要時才從硬盤中讀入內存。 1.type type COMMAND 判斷一個命令的類型即判斷一個命令是否為內置命令。   2.enable(內部命令) enable既可以查看內部命令,同時也可以判斷是否為內部命令 enable 顯示所有…

    2017-07-15
  • 基本網絡設置

    我們在上網的時候會遇到各種各樣的問題,比如有時候網絡不通,沒有ip地址,或者ip地址有沖突等等,這就需要我們懂得一些網絡的配置,方便以后使用?;揪W絡配置:主機名,ip地址,網關,DNS服務器。1、 主機名的配置第一種方法:在配置文件修改Centos7版本:vim /etc/hostname 改過配置文件后需要使其生效,命令為hostname centos7…

    2017-09-09
  • CentOS 7 安裝 mysql-5.7.14

    在centos7上安裝 路上遇過各種坑 把在centos7正確安裝mysql-5.7.14分享一下 1. CentOs7 默認的數據庫為MariaDB,先卸載MariaDB,否則安裝mysql,引起沖突 rpm -qa mariadb rpm -e –nodeps mariadb 2. 準備好工作環境 mkdir /application&nbs…

    Linux干貨 2017-05-07
  • 超文本傳輸協議-HTTP

        超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用于分布式、協作式和超媒體信息系統的應用層協議。HTTP是萬維網的數據通信的基礎。     設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。通過HTTP或…

    Linux干貨 2017-07-31
  • N21沉舟11周作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 2、描述創建私有CA的過程,以及為客戶端發來的證書請求進行辦法證書。 一、CA服務器端 #進入CA目錄:cd    /etc/pki/CA #創建初始文件touch index.txt serialecho 01 >&nbsp…

    Linux干貨 2016-09-19
欧美性久久久久