1. 程式人生 > >理解Linux內建命令與外部命令

理解Linux內建命令與外部命令

在學習後面bash shell知識點前,我們得搞明白一件事,什麼是內建命令與外部命令?

你可能聽到過“內建命令”這個術語,大多都是如下解釋,今天換個方式來說,感覺大家會更能理解。


Linux的命令可以分為內部命令和外部命令:

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

    而外部命令是系統的軟體功能,使用者需要時才從硬碟中讀入記憶體

1、先說說外部命令

外部命令也稱為檔案系統命令,是bash shell之外的程式,它並不是shell 的一部分。外部命令一般位於/bin、/usr/bin、/sbin或/usr/sbin中。

eg: 通過下面幾種方式可以查詢到某個外部命令 tar 或 ps。

當執行外部命令時,Linux系統會創建出一個子程序(這種操作被稱為衍生)。

為了演示,我們分析ps -f 的結果。

上圖結果所示:當執行ps時會創建出一個子程序9122(ps命令的PID是9122),其父PID 是9084。

作為父程序的bash shell的PID是9084。

當程序必須執行衍生時,Linux系統需要消耗資料來設定新子程序的環境。

通過上面演示,得出結論:執行外部命令有額外的代價。

2、再說內建命令

內建命令和shell是一體的,它們作為shell工具的組成部分存在,不需要通過衍生出子程序來執行,也不需要開啟程式檔案。

所以內建命令的執行速度要更快,效率也更高。

我們還需要注意一點,有很多命令有多種實現。

例如pwd既是外部命令又是內建命令。原因是pwd有兩種不同實現。

檢視命令的不同實現,使用type的-a引數

對於有多種實現的命令,如果想要使用其外部命令實現,直接指明對應的檔案就可以了。

例如,要使用外部命令pwd,可以輸入/usr/bin/pwd

3、總結

外部命令會創建出一個包含全新環境的子程序,而內建命令不會。相比之下,外部命令的使用成本更高,所以內建命令更高效,不會受到環境變化的影響。