Linux下的內部命令與外部命令的區別

2021-08-17 16:03:12 字數 1632 閱讀 4301

linux命令有內部命令(內建命令)和外部命令之分,內部命令和外部命令功能基本相同,但也有些細微差別。

內部命令實際上是shell程式的一部分,其中包含的是一些比較簡單的linux系統命令,這些命令由shell程式識別並在shell程式內部完成執行,通常在linux系統載入執行時shell就被載入並駐留在系統記憶體中。內部命令是寫在bashy原始碼裡面的,其執行速度比外部命令快,因為解析內部命令shell不需要建立子程序。比如:exit,history,cd,echo等。

外部命令是linux系統中的實用程式部分,因為實用程式的功能通常都比較強大,所以其包含的程式量也會很大,在系統載入時並不隨系統一起被載入到記憶體中,而是在需要時才將其呼叫記憶體。通常外部命令的實體並不包含在shell中,但是其命令執行過程是由shell程式控制的。shell程式管理外部命令執行的路徑查詢、載入存放,並控制命令的執行。外部命令是在bash之外額外安裝的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通過「echo

$path」命令檢視外部命令的儲存路徑,比如:ls、vi等。

用type命令可以分辨內部命令與外部命令

[root@localhost account]# type cd

cd is a shell builtin

pwd命令用於顯示當前工作目錄,是linux系統下最常用的命令之一。在不太能確定當前位置時,可以使用pwd命令來判斷目錄在檔案系統內的確切位置。而涉及pwd指令,就不得不提及三個環境變數:path、oldpwd、pwd。

path:執行檔案路徑的變數;"echo $path"(path前面加$表示後面接的是變數)

oldpwd:表示前一次的工作目錄;

pwd:表示當前的工作目錄。

問題緣由:當輸入「man pwd」時可以檢視pwd的幫助文件,而輸入「pwd --help」就提示有錯誤bash: pwd: --: invalid option;若輸入「 /bin/pwd --help」就能正常顯示pwd的幫助文件。

從網上查詢原因並經過整合可知,這主要是由於內部命令和外部命令的區別,pwd是內部命令,而/bin/pwd就是外部命令。在顯示當前目錄時,/bin/pwd能顯示當前工作目錄的完整檔案路徑,能更準確些。在多人共享同一臺linux機器時,經常會發現當前目錄被別人刪除後,pwd命令仍然會顯示那個目錄。

後續試驗:切換至root許可權下,將/bin目錄下的執行檔案ls移動到非正規目錄中去,mv /bin/ls /root(#mv為移動,可將檔案在不同的目錄間進行移動操作),然後不管在哪個目錄底下輸入任何與ls相關的指令,都不能順利執行ls了(因為/root這個目錄並不在path指定的目錄中,外部命令ls是沒法通過path路徑找到執行檔案ls),除非用/root/ls

才行。如果想要讓root在任何目錄下均可執行/root底下的ls,那麼可以將/root加入到path當中,該命令path="$path":/root即可。若有兩個ls指令在不同的目錄中,例如/usr/local/bin/ls

和/bin/ls ,那麼當我下達 ls命令時,是根據path裡面哪個目錄先被查詢到,則那個目錄下的指令就先被執行。

而即使採用相同的方法移動/bin目錄下的執行檔案pwd,仍可以輸入pwd命令執行,因為這時仍是呼叫內部命令pwd指令。

故shell命令直譯器在執行命令時,是應先執行內部指令,若要執行的指令不是內部指令,則應是呼叫的外部指令。

linux下的內部命令與外部命令

linux下分為內部命令和外部命令,二者相差不大,但還是有細微的區別,所謂的內外之分是相對shell來分的。內部命令在系統啟動時就調入記憶體,是常駐記憶體的,所以執行效率高。外部命令是系統的軟體功能,使用者需要時才從硬碟中讀入記憶體。1 內部命令實際上是shell程式的一部分,其中包含的是一些比較簡...

說說Linux shell外部命令與內建命令

linux 命令有內部命令 內建命令 和外部命令之分,內部命令和外部命令功能基本相同,但也有些細微差別。內部命令 內部命令不需要使用子程序來執行,它們已經和shell編譯成一體,作為shell工具的組成部分存在。不需要借助外部程式檔案來執行。它們是一些比較簡單的linux系統命令,如exit,his...

window下g 不是內部或外部命令

安裝mingw 軟體安裝介面 設定環境變數 右擊我的電腦,點屬性 高階 環境變數。在環境變數path 新增系統 mingw 的實際安裝位置,如 d program files mingw 或者比如本文中演示的c mingw bin。在path裡加入c mingw bin 具體路徑請根據你的mingw...