Linux 伺服器系統管理:第十一章 外殼進階操作 下一頁 |
第十一章 進階外殼操作
11-1 外殼與核心 『外殼』(Shell)是一套程式,它會隨時監督使用者輸入命令。當使用者輸入命令並敲入『Enter 鍵』之後,Shell 立即解譯該命令並執行,完成之後,Shell 再回去繼續等待接受命令。Shell 包含許多『外殼命令』(Shell command),使用者透過這些 Shell command 可以操作系統,或要求完成某一特定工作。之前,我們大略介紹過 Unix/Linux 是屬於開放性系統。這裡所說的開放系統,是指『系統核心』(System kernel)是開放的,亦即核心內系統函數(System call)的原始碼都是開放的,需要遵循各自使用授權方式,如 GPL。系統函數即是操作該系統最基本的介面程式,譬如,操作檔案系統的系統函數有 open(file_name)、read(file_ID, data)、write(file_ID, data)等等。既然系統函數是開放的,任何人都可利用這些函數編寫應用系統,因此造成 Unix/Linux 系統上的應用軟體可以大量且快速的被發展出來,甚至其中許多功能強大的系統套件都屬於自由軟體,也造成軟體工業更快速的發展(並非全都免費的,有些還是需要付費購買)。 核心大多與主機硬體或系統操作環境有關程式的結合體,如欲在系統內增加硬體設施,則必須編寫相關驅動程式再嵌入核心內。另外,欲增加系統功能,譬如雙核心 CPU 處理、虛擬記憶體、加密/解密安全、多重執行緒……等等功能,也必須編寫相關程式並嵌入核心。由此可見,核心程式可能會被隨時呼叫使用,但隨系統功能越強,它就越來越龐大。可能成長到並無法全部儲存於記憶體內,而大部分儲存磁碟機內,需要時再呼叫它並導入記憶體內。雖然核心程式提供有標準介面,但還是需利用程式語言才可以呼叫它,各方領域的專家們,為了方便使用者操作系統,所以利用系統函數發展出許多系統工具。基本上,所謂 Unix/Linux 僅是指系統核心而言,而利用核心的函數所發展出來的工具,因處於系統核心的外部,因此稱之為『外殼』(Shell)。 也就這樣,隨著不同環境的需求,Shell 也出現了幾種不同的版本,如圖 11-1 所示。基本上,任何版本的 Unix/Linux 系統都可以依照需求安裝一個或多個 Shell,甚至可以針對任一使用者的需求,而給予不同的版本。雖然市面上有許多 Shell 版本,但是版本之間大多能夠相容,在學習方面並不會出現太大的困擾。以下列出幾種較常見的版本:
圖 11-1 外殼與系統核心 Ø Bourne Shell(sh):此為 Unix 系統上最普遍使用的 Shell,是由 AT&T 貝爾實驗室的 Steven Bourne 所編寫出來。自 1979 年後 sh 幾乎是所有 Unix 系統的標準配備。 Ø Korn Shell(ksh):是由 AT&T 的 David Korn 針對 Bourne Shell 所提出的改良版。第一版的 ksh 在 1986 年出版。 Ø Bourne Again Shell(bash):此為目前 Linux 系統最普遍使用的版本,是在 1988 年被公開出來,它最初是 Brian Fox 為自由軟體基金會所寫的 GNU 專案,再進一步由 Chet Ramey 開發而成。 Ø C Shell(csh):是 BSD Unix 系統的標準配備,大多數 Unix 系統都會安裝此套件。C Shell 是由加州大學柏克萊分校的 Bill Joy 所撰寫,於 1979 年被包括在 BSD 系統內。 Ø TC Shell(tcsh):是 C Shell 的改良版,於 1980 年出版。 基本上,任何一套 Unix/Linux 系統都提供有多種 Shell 執行環境,隨著個人喜好可切換到任何一種 Shell 來執行,都不會影響它的執行結果,因為都是呼叫相同的核心程式。 11-2 Shell 環境運作 每一外殼程式包含著一串列的 Shell 命令,並會建立一個與使用者交談的環境,稱之為『外殼環境』(Shell Environment)。當系統管理者幫使用者建立帳戶時,會幫使用者指定一個 Shell環境(如,/bin/sh)。使用者登入系統之後,就會啟動所指定的 Shell,使用者與系統之間便在所指定的 Shell 環境下運作。一般 Shell 環境的運作步驟如下:(如圖 11-2 所示) 1. 出現 提示符號(”$” 記號)準備接受命令。 2. 使用者(或終端機傳輸)輸入命令。 3. 依照 PATH 變數,尋找命令位置。 4. 產生子行程,解譯並執行命令。 5. 輸出結果或錯誤訊息給使用者。 6. 再出現 Prompt 準備接受下一個命令。
圖 11-2 Shell 環境的運作 當 Shell 執行命令時,Prompt 會消失,一直到該命令執行完畢,才會再出現 Prompt。如果 Prompt 一直不出現,極有可能該命令進入無窮迴圈永遠執行不完。每當 Shell 接受收一個命令時,會依照 PATH 變數搜尋命令位置,範例如下: 範例如下:
PATH 變數內記錄著多個搜尋命令的目錄位置,每一個欄位紀錄一個搜尋路徑,欄位之間是利用冒號(:)分隔。以上述範例為例,當使用者下達命令之後,系統搜尋 /usr/Kerberos/bin 目錄下是否有該命令的程式,如沒有會再到 /usr/local/bin 目錄下尋找,再找不到則會繼續到/usr/X11R6/bin 的目錄下尋找,依此類推。如果 PATH 所指定的所有目錄都找不到的話,則會出現 “Command not found” 訊息,範例如下: 範例如下:
由此可見,出現 “Command not found” 訊息並非所下的命令一定不存在,有可能僅是所指定的 PATH 路徑的問題而已。
|
翻轉工作室:粘添壽
Linux 伺服器系統管理 - CentOS:
翻轉電子書系列:
|