理解Linux內建命令與外部命令
阿新 • • 發佈:2018-12-03
在學習後面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、總結
外部命令會創建出一個包含全新環境的子程序,而內建命令不會。相比之下,外部命令的使用成本更高,所以內建命令更高效,不會受到環境變化的影響。