第二章 Linux 基本概念
學習一門新的學科往往從基本概念開始,學習一門新的技術也是如此。如果把學習的過程看作是建造一幢大廈,那麼基本概念就是大廈的基石。
本章將簡單地介紹 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,僅有一個鍵盤用於輸入,一大卷紙用於輸出,以及一個紙帶穿孔機和一個紙帶閱讀機用於儲存程式和資料。它沒有螢幕,沒有滑鼠,也沒有聲音。
圖 2-1 Teletype 33-ASR
圖 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 認為空格是分隔符,所以不能在檔名稱中使用空格。
相關文章
- linux 裝置驅動基本概念Linux
- Linux 檔案系統相關的基本概念Linux
- [轉] Linux and the Unix Philosophy第二章部分譯文Linux
- Linux系統程式設計(20)——訊號基本概念Linux程式設計
- 第二章
- 【Linux】《how linux work》第二章 基本命令和目錄層次結構Linux
- RocketMQ基本概念MQ
- Mysql基本概念MySql
- Kafka基本概念Kafka
- mongodb 基本概念MongoDB
- javascript:基本概念JavaScript
- Kafka 基本概念Kafka
- MQ 基本概念MQ
- 機器學習基本概念機器學習
- babel基本概念Babel
- 第二章 - 程式
- linux時鐘基本概念、CST與UTC、以及NTP簡單設定Linux
- RabbitMQ(1)---基本概念MQ
- Spring 基本概念Spring
- GacUI基本概念(一)UI
- redux的基本概念Redux
- Docker的基本概念Docker
- 程式的基本概念
- 基本概念及操作
- MySQL基本概念【一】MySql
- Oracle RAC基本概念Oracle
- lipaper-基本概念
- 微服務基本概念微服務
- 樹的基本概念
- linux網路篇第二章CentOS7網路屬性配置LinuxCentOS
- 第二章 程式管理
- Browser Security-基本概念
- Serverless 基本概念入門Server
- 程式的基本概念-上
- RocketMQ系列(一)基本概念MQ
- C語言之基本概念C語言
- 1-Vue基本概念Vue
- Ability的基本概念(1)