shell內部命令和外部命令

2021-07-05 21:03:39 字數 2842 閱讀 7968

什麼是shell

linux系統的shell作為作業系統的外殼,為使用者提供使用作業系統的介面。它是命令語言、命令解釋程式及程式語言的統稱。

shell是使用者和linux核心之間的介面程式,如果把linux核心想象成乙個球體的中心,shell就是圍繞核心的外層。當從shell或其他程式向linux傳遞命令時,核心會做出相應的反應。

shell是乙個命令語言直譯器,它擁有自己內建的shell命令集,shell也能被系統中其他應用程式所呼叫。使用者在提示符下輸入的命令都由shell先解釋然後傳給linux核心。

有一些命令,比如改變工作目錄命令cd,是包含在shell內部的。還有一些命令,例如拷貝命令cp和移動命令rm,是存在於檔案系統中某個目錄下的單獨的程式。對使用者而言,不必關心乙個命令是建立在shell內部還是乙個單獨的程式。

shell首先檢查命令是否是內部命令,若不是再檢查是否是乙個應用程式(這裡的應用程式可以是linux本身的實用程式,如ls和rm,也可以是 購買的商業程式,如xv,或者是自由軟體,如emacs)。然後shell在搜尋路徑裡尋找這些應用程式(搜尋路徑就是乙個能找到可執行程式的目錄列 表)。如果鍵入的命令不是乙個內部命令並且在路徑裡沒有找到這個可執行檔案,將會顯示一條錯誤資訊。如果能夠成功找到命令,該內部命令或應用程式將被分解 為系統呼叫並傳給linux核心。

shell的另乙個重要特性是它自身就是乙個解釋型的程式語言,shell程式語言支援絕大多數在高階語言中能見到的程式元素,如函式、變數、陣列和程式控制結構。shell程式語言簡單易學,任何在提示符中能鍵入的命令都能放到乙個可執行的shell程式中。

當普通使用者成功登入,系統將執行乙個稱為shell的程式。正是shell程序提供了命令列提示符。作為預設值(turbolinux系統預設的shell是bash),對普通使用者用「$」作提示符,對超級使用者(root)用「#」作提示符。

一旦出現了shell提示符,就可以鍵入命令名稱及命令所需要的引數。shell將執行這些命令。如果一條命令花費了很長的時間來執行,或者在螢幕上產生了大量的輸出,可以從鍵盤上按ctrl+c發出中斷訊號來中斷它(在正常結束之前,中止它的執行)。

當使用者準備結束登入對話程序時,可以鍵入logout命令、exit命令或檔案結束符(eof)(按ctrl+d實現),結束登入。

使用者登入到linux系統後,系統將啟動乙個使用者shell。在這個shell中,可以使用shell命令或宣告變數,也可以建立並執行shell 指令碼程式。執行shell指令碼程式時,系統將建立乙個子shell。此時,系統中將有兩個shell,乙個是登入時系統啟動的shell,另乙個是系統為 執行指令碼程式建立的shell。當乙個指令碼程式執行完畢,它的指令碼shell將終止,可以返回到執行該指令碼之前的shell。從這種意義上來說,使用者可以 有許多 shell,每個shell都是由某個shell(稱為父shell)派生的。

在子shell中定義的變數只在該子shell內有效。如果在乙個shell指令碼程式中定義了乙個變數,當該指令碼程式執行時,這個定義的變數只是該 指令碼程式內的乙個區域性變數,其他的shell不能引用它,要使某個變數的值可以在其他shell中被改變,可以使用export命令對已定義的變數進行輸 出。 export命令將使系統在建立每乙個新的shell時定義這個變數的乙個拷貝。這個過程稱之為變數輸出。

unix 命令有內部命令和外部命令之分

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

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

檢視shell內部命令

:[...]#man builtins

判斷某命令是否是內部命令

:[...]#type 命令

如果命令為內部命令,則type命令會明確的指出該命令是shell內嵌的。如果命令時外部命令,type則會給出該命令的執行路徑。故shell命令直譯器在執行命令時,是應先執行內部指令,若要執行的指令不是內部指令,則應是呼叫的外部指令。

內部命令和外部命令最大的區別之處就是效能。內部命令由於構建在shell中而不必啟動乙個子shell來執行,要比外部命令執行快得多。因此和執行更大的指令碼道理一樣,執行包含很多外部命令的指令碼會損害指令碼的效能。但大多數情況下我們只要達成我們的目標,而不必在意使用的是內部命令還是外部命令

獲取命令幫助文件

(1)內建命令獲取幫助文件的方式:

[...]#help command      檢視內部命令的幫助檔案 

(2)外部命令獲取幫助文件的方式:

1、使用 --help

[...]#command --help    檢視外部命令的幫助檔案

2、想要獲取命令的完整幫助可以使用 man 命令

[...]#man command

man命令是呼叫了less工具顯示文件,man的具體的操作方法和less是一樣的。

4、應用程式自帶的幫助文件,通常在存放在目錄 /usr/share/doc

5、linux發行版官方文件

6、通過google搜尋

參考文獻:

shell內部命令和外部命令

在shell中,有一些命令是包含在shell內部的。還有一些命令是存在於檔案系統中某個目錄下的單獨的程式。對使用者而言,不用關心是內部命令還是乙個單獨的程式。shell接到使用者輸入的命令後首先檢查命令是否是內部命令,如果不是再檢查是否是乙個應用程式,如果都不是,就會輸出一條錯誤資訊。內部命令要比外...

Linux shell 內部命令和外部命令

linux中的命令大致分為兩類 內部命令和外部命令,內部命令也稱shell內建命令或者內嵌命令,外部命令存放在乙個檔案中,需要時候在檔案中查詢,這些檔案定義在 path中。首先linux所有的都是檔案,我們在作業系統載入的時候會載入shell表現為 bin bas 件 內建命令不需要子程序來執行,它...

不是內部或外部命令

問題描述 使用cmd 執行某個路徑下 一般是c program files 或者e program files 或者d program files 下面的某個 的exe檔案時,往往彈出這樣的錯誤,並且你發現你也配置了環境變數,網上的那些方法,比如將program files 改為 progra 1然...