第二章 Linux 基本概念

小昇發表於2015-05-09

學習一門新的學科往往從基本概念開始,學習一門新的技術也是如此。如果把學習的過程看作是建造一幢大廈,那麼基本概念就是大廈的基石。

本章將簡單地介紹 Linux 系統相關的一些基礎知識,包括核心、shell、終端的基本概念,核心與 shell、終端與主機的相互關係,以及終端模擬的含義。這些概念雖然基礎,但都很重要,瞭解它們將有助於理解後面的內容。

當然,你也可以跳過本章,直接從下一章開始閱讀,當遇到困惑時再返回查閱相關的內容。 但在第三章開始前,建議先閱讀一下本章的 2.6 節 命令語法。

2.1 核心

核心是作業系統的核心,它的工作是執行基本的任務。除非關閉計算機系統,否則核心會一直執行。

可以把 Linux 系統看成一個堅果,我們都知道,堅果的外層是一個硬殼,裡面則是柔軟的果仁。對 Linux 系統來說,內部的果仁就是核心,是作業系統的核心;外部的殼就是 shell,是“圍繞”在核心周圍的一種特殊型別程式(命令處理器)的名稱,充當人與系統互動的介面。

核心可以分為兩大類:單核心(monolithic kernel)和微核心(microkernel)。

單核心由一個非常龐大的程式構成,自身就可以完成所有的事情。而微核心是一個非常小的程式,只能執行最基本的任務,需要呼叫其他程式來完成更復雜的功能。

單核心所有工作都在自身程式中完成,所以速度很快,但因為規模較大,難以設計和維護。微核心因為完成大部分工作需要呼叫其他程式,所以速度較慢,不過由於採用模組化設計,比較易於修改和維護。大部分 Unix 系統與 Linux 一樣,使用某種型別的單核心。

對 Linux 來說,除了核心之外還含有大量的輔助程式。具體來說可以分為兩大類:一類是充當人與系統互動介面的 shell 程式,又可以分為命令列介面(CLI)程式和圖形使用者介面(GUI)程式;另一類是大量的實用工具,這也正是 Linux 功能強大的原因。

如果想嘗試自己編譯核心,可以參考附錄A。

2.2 shell

正如前面所說,shell 是一種特殊型別的程式,像殼一樣“包裹”住核心,充當人與系統互動的介面。

shell 可以分為兩大類:圖形介面 shell (GUI shell)和命令列式 shell (CLI shell)。

一般人們省略 CLI,shell 指的就是命令列式 shell,而 GUI shell 直接簡稱為 GUI。本書以後不特別註明,shell 指的就是命令列式 shell,GUI 指的就是圖形介面 shell。聽上去有些繞,但實際應用中人們已經習慣這樣使用。

先來說 shell,shell 是一種提供基於文字介面的程式:使用者可以一個接一個地鍵入命令,shell 會讀取命令,然後完成所需的工作來執行命令。

再來說 GUI,GUI 是一種更復雜精美的程式,使用視窗、滑鼠指標、圖示等向使用者提供圖形介面。

Linux 中廣為人知的 shell 有 Bourne Shell 家族的 sh、ksh、bash 和 C-Shell 家族的 csh、tcsh。

而有名的 GUI 有 CDE、GNOME、KDE 等,這些 GUI 都執行在一個名為 X Window 的系統之上,這個系統為使用圖形資料的程式提供服務。

2.3 終端和主機

前面提到的“介面”一詞,指的是事物提供的一種與外界進行互動的方式。人使用計算機可以說成是人使用他的介面與計算機的介面互動。

在 Linux 的世界中,將提供介面的裝置稱為終端(terminal),將其他部件總稱為主機(host)。終端有兩個主要的任務:接受輸入和生成輸出。因而計算機系統可以描述為:

• 計算機 = 終端 + 主機

• 終端 = 輸入裝置 + 輸出裝置

計算機的終端就是指顯示器、鍵盤、滑鼠、揚聲器等輸入/輸出裝置,而機箱中的處理器、硬碟、記憶體、顯示卡等其他部件的組合就是主機。

其實,人的身體也可以分為“終端”和“主機”:

眼睛、嘴、耳朵以及能改變環境的手、胳膊等身體部分,充當人的輸入/輸出裝置,也就是人的“終端”;而大腦、肌肉、骨骼以及其他的器官就充當人的“主機”。

所以從 Linux 的角度來看,人使用計算機,就是人的終端與計算機的終端進行互動。

正是因為 Linux 系統將終端和主機分離,使得 Linux 是一種真正的多使用者系統。只要每個人擁有自己的終端,並且終端與主機相連,多人就可以同時使用同一臺計算機。

具體來說,終端可以分為兩大類:字元終端(character terminal)和圖形終端(graphics terminal)。

字元終端指只使用文字的終端,輸入輸出只有字元形式,字元終端只有字母、數字、標點符號和幾個特殊的控制鍵。

早期的字元終端,比如 Teletype,僅有一個鍵盤用於輸入,一大卷紙用於輸出,以及一個紙帶穿孔機和一個紙帶閱讀機用於儲存程式和資料。它沒有螢幕,沒有滑鼠,也沒有聲音。

enter image description here
圖 2-1 Teletype 33-ASR

enter image description here
圖 2-2 最流行的字元終端 DEC VT100

後來,隨著 PC 技術的發展,出現了更完善的字元終端,再後來出現了圖形終端。圖形終端在輸入方面仍依靠鍵盤和滑鼠;在輸出方面,充分利用視訊硬體的優點,可以在螢幕上繪製各種顏色和圖形。使用圖形終端時,可以使用一個成熟的 GUI。

2.4 控制檯

有一臺終端比較特殊,它是用來管理系統的,這個特殊的終端就是控制檯(console)。

Linux 系統總是區分控制檯和普通終端,而且有一些特定的事情只能在控制檯上完成。比如說有的時候,系統需要顯示一個非常嚴重的錯誤訊息,它不會顯示在普通終端上,而只會顯示在控制檯上,以確保系統管理員能夠看到。

但如果我們是使用本地主機的唯一使用者,那麼終端也就是控制檯。

2.5 終端模擬器

現在傳統的字元終端和圖形終端早已退出歷史舞臺,我們並不使用真正的物理終端來訪問 Linux 系統。而是使用計算機來模擬終端,也就是在計算機上執行模擬終端的程式,稱之為終端模擬器。終端模擬器的功能就是讓我們能夠使用 shell(這裡指的是殼程式,包括GUI)。

對於 Linux 系統而言,訪問終端模擬器的方法有兩種:終端視窗和虛擬控制檯。

在 GUI 下,執行“Terminal”程式(KDE 用的是 konsole,GNOME 用的是 gnome-terminal),就開啟了一個終端視窗。在終端視窗中,可以使用標準的命令列介面輸入命令。因為終端模擬器執行在視窗中,所以可以擁有任意數量的視窗,同時執行多個終端。

因為 GUI 執行在 X Window 之上,X Window 提供的終端模擬器叫做 xterm,儘管後來換了程式,但依然叫 xterm,所以終端視窗實際上訪問的是 xterm。xterm 既可以模擬字元終端(DEC VT-102),也可以模擬圖形終端(Tektronix 4014)。

當 Linux 啟動時,同時啟動了 7 個不同的終端模擬程式,它們稱為虛擬控制檯。

虛擬控制檯 #1~6 都是全屏、基於文字的終端,用來使用 shell;虛擬控制檯 #7 是模擬的圖形終端,用來執行 GUI。

可以使用快捷鍵 <Ctrl> + <Alt> + <F1~7>在不同的虛擬控制檯間切換。例如 <Ctrl> + <Alt> + <F7> 切換回模擬圖形終端。

2.6 命令語法

在使用 shell 的時候,需要一條接一條地輸入命令。當輸入命令時,所輸入的整行稱為命令列。

大多數情況下,一個命令列只輸入一條命令,若想輸入多條命令,只需用分號間隔。

shell 接收到一個命令列後,將第一部分作為命令的名稱,搜尋並執行對應的程式,然後 shell 會將整個命令列的一個副本傳送給該程式,由程式來決定如何處理使用者輸入的資訊。如果未找到輸入命令對應的程式,shell 將顯示一個錯誤訊息,提示使用者 Linux 上沒有這條命令。

到目前為止,我們還沒有真正接觸過 Linux 命令。為了能順利地進入下一章,我們來了解一下 Linux 的命令語法。

通常,Linux 命令語法可以表示為:命令名稱,後面是選項(options),最後是引數(arguments)。即:

命令名稱 選項 引數

選項用於設定命令執行任務的方式,而引數指定命令使用的資料。

選項通常由一個連字元加上一個字元組成,例如“-l”,或者兩個連字元加上一個單片語成,例如“--help”。如果命令中有多個選項,那麼它們的前後順序可以隨意指定,組成的命令都是等價的。而且單字元的選項還可以組合在一起,例如“-l -F”可以組合成“-lF”。

典型情況下,引數指定程式執行動作所需要的資料,例如“man date”,命令是 man,date 是希望 man 顯示的內容。

在輸入命令時,必須要確保將每個選項及引數分開,命令的每個部分之間至少有一個空格或製表符。Linux 認為空格是分隔符,所以不能在檔名稱中使用空格。

相關文章