了解什麼是 Linux ,并介紹指令行和 shell 在 Linux 整體架構中的位置
1.1 什麼是 Linux
- 下圖中的每一部分在 Linux 中各司其職,協同構成一個完整的 Linux 系統
完整的 Linux 系統
1.1.1 深入探究 Linux 核心
- 核心是 Linux 的核心
- 核心控制着計算機系統上所有的硬體和軟體,在必要時配置設定硬體,并根據需要執行軟體
- 第一個版本的 Linux 核心是由 Linus Torvalds 讀大學時編寫的
- 核心主要負責以下四種功能
核心主要功能
1.1.1.1 系統記憶體管理
- 核心的主要功能之一就是記憶體管理
- 核心不僅管理伺服器上的可用實體記憶體,還可以建立和管理虛拟記憶體
- 核心通過硬碟上的存儲空間來實作虛拟記憶體,這個空間稱為 交換空間( Swap Space )
- 核心不斷地在交換空間和實際實體記憶體之間 反複交換虛拟記憶體中的内容 ,讓系統以為自己擁有比實體記憶體更多的可用記憶體
- 交換示意入下圖,可以看出是由核心來統籌三者之間的資料交換 記憶體存儲單元按組劃分為很多塊,這些塊稱為 頁面( Page ) 核心将每個記憶體頁面放在實體記憶體或交換空間 核心同時會維護一個 記憶體頁面表 ,在這個表中指定哪些頁面在實體記憶體中,哪些被換到虛拟記憶體中 核心會記錄哪些記憶體頁面正在被使用,并自動把一段時間沒有被使用的記憶體頁面複制到交換空間中,這個過程被稱為 換出( Swapping Out )
核心工作原理
- 隻要 Linux 在運作,為運作中的程式換出記憶體頁面的過程就不會停止,如下圖 當程式要通路一個已經被換出的記憶體頁面時 核心必須從實體記憶體中換出另外一個記憶體頁面用于讓出空間 然後再從交換空間換入被通路的記憶體頁面
核心工作流程
1.1.1.2 軟體程式管理
- Linux 将運作中的軟體程式稱為 程序
- 程序可以在前台運作,将輸入顯示在螢幕上,也可以在背景運作,隐藏到幕後
- Linux 中所有的程序都是由核心控制和管理
- 核心建立第一個程序 init 程序,用于啟動系統上所有其他程序
- 核心在啟動任何其他程序時,都會在虛拟記憶體中給新程序配置設定一塊專有空間來存儲程序用到的資料和代碼 開機時需要啟動或停止的應用腳本一般放置在 /etc/init.d 中
- init 程序 存在 運作級( Run Level ) 的概念
- Linux 一共有 5 個啟動運作級: 隻啟動基本的系統程序以及一個控制台終端程序,這被稱為 單使用者模式 通常用于在系統出現問題時進行緊急的檔案系統維護,相當于 Windows 的安全模式 還沒提到 标準的運作級,可以運作大多數應用程式,例如網絡支援程式 還沒提到 常見的運作級,可以運作圖形化界面,允許通過圖形化界面登入系統
- Linux 可以通過調整啟動運作級來控制整個系統的功能
1.1.1.3 硬體裝置管理
- 核心可以管理硬體裝置
- Linux 想要和任何裝置通信之前,都需要在核心代碼中加入該裝置的 驅動程式代碼 驅動程式代碼相當于應用程式和硬體裝置的中間人,允許核心與裝置之間交換資料
- 核心中有以下兩種方法用于插入裝置驅動程式代碼 編譯進核心的裝置驅動代碼 每次都需要重新編譯核心,非常低效 可插入核心的裝置驅動子產品 可以友善的實作熱插拔,無需重新編譯核心
- 硬體裝置被 Linux 識别為特殊的檔案,稱為 裝置檔案 ,有以下三種類型 字元型裝置檔案 處理資料時每次隻能處理一個字元,例如數據機 塊裝置檔案 處理資料時每次能處理大塊資料,例如硬碟 網絡裝置檔案 進行資料包發送和接收資料,例如網卡
- Linux 會為每個裝置檔案建立一個 節點 ,用于對這些裝置檔案進行唯一辨別 每個節點都是一個鍵值對,鍵是主裝置号,相當于類别,值是副裝置号,指具體裝置
1.1.1.4 檔案系統管理
- 核心支援通過不同類型的檔案系統從硬碟讀寫資料
- 核心采用 虛拟檔案系統( Virtual File System ,VFS ) 作為與每個檔案系統互動的接口 當每個檔案系統被挂載和使用時,VFS 都會将資訊緩存到記憶體中
- 下圖列出了 Linux 支援用于讀寫資料的标準檔案系統
Linux 支援用于讀寫資料的标準檔案系統
1.1.2 GNU 工具
- GNU( GNU’s Not Unix )組織在開源軟體( Open Source Software ,OSS )的軟體理念下開發了一套完整的 Unix 工具
- 将 Linux 核心和 GNU 作業系統工具整合後,就産生了一款完整的、功能豐富的免費作業系統
1.1.2.1 核心 GNU 工具
- 該工具的主要作用是為 Linux 系統管理者設計出一套類似于 Unix 的環境
- 供 Linux 使用的核心工具被稱為 GNU Core Utilities 軟體包,包含以下三個部分 處理檔案 操作文本 管理程序
1.1.2.2 shell
- GNU / Linux shell 是一種特殊的互動式工具,為使用者提供以下功能 啟動程式 管理檔案系統中的檔案 運作在 Linux 上的程序
- shell 的核心是指令行提示符
- 将多個 shell 指令放入檔案中作為程式執行,這被稱為 shell 腳本
- 所有 Linux 發行版預設的 shell 都是由 GNU 組織開發的 Bash shell Bash 名稱由來是根據 Unix 原生的 Bournce shell 修改而來,名為 Bournce again shell
- 下圖列出了 Linux 支援的 shell 類型
Linux 支援的 shell 類型
1.1.3 Linux 桌面環境
- Linux 之是以提供桌面環境,很大因素是因為受到了 Windows 流行的影響
1.1.3.1 X Windows 系統
- X Windows 是圖形顯示的核心部分
- X Windows 是直接和 PC 上的顯示卡及顯示器打交道的底層程式
- X Windows 控制着 Linux 程式如何在電腦上顯示出視窗和圖形
- X Windows 是底層軟體包,其實作形式有以下幾種: X.org 提供了 X Windows 的開源實作,支援目前市面上很多新顯示卡 Wayland 被 Fedora Linux 發行版采用 Mir 顯示伺服器由 Ubuntu Linux 發行版研發
1.1.3.2 KDE 桌面
- KDE( K Desktop Environment )在 1996 年作為開源項目被釋出
- KDE 會生成一個類似于 Windows 的圖形化桌面環境
1.1.3.3 GNOME 桌面
- GNOME( the GNU Network Object Model Environment )GNU 網絡對象模型環境,在 1999 年釋出
- 現在已經是大部分 Linux 發行版預設的桌面環境
- Red Hat Linux 大量采用該桌面環境
1.1.3.4 Unity 桌面
- 由 Ubuntu 自行研發的桌面環境
- 目标是 為工作站、平闆電腦以及移動裝置提供一緻的桌面體驗 就目前來說,平台電腦和移動裝置這塊已經基本失敗了,主要還是缺乏生态
1.1.3.5 其他桌面
- 圖形化桌面環境的弊端在于,其 需要占用想當一部分的系統資源 來保證運作正常,這和 Linux 誕生的初衷是相違背的
- 下圖是 Linux 上存在的一些其他圖形化桌面
Linux 上存在的一些其他圖形化桌面
1.2 Linux 發行版
- 發行版 —— 完成的 Linux 系統包
1.2.1 核心 Linux 發行版
- 包含核心、一個或多個圖形化桌面環境以及預編譯好的幾乎所有能見到的 Linux 應用
- 目标是提供一站式的完整 Linux 安裝
- 下圖是 Linux 比較流行的核心發行版
Linux 比較流行的核心發行版
1.2.2 特定用途的 Linux 發行版
- 由于核心版體積龐大、配置繁瑣,導緻安裝過程異常複雜,是以出現了針對特性場景使用的 Linux 發行版
- 下圖是 Linux 比較流行的特定用途發行版
Linux 比較流行的特定用途發行版
1.2.3 Linux LiveCD 樣本系統
- 可以在光驅中通過引導直接運作的 Linux 版本,不需要安裝就可以看到 Linux 的具體内容
- 大部分特定使用者的 Linux 發行版都會推出 Linux LiveCD 版本
- 但由于是從光驅讀取的原因,該版本存在以下兩大缺陷: 受制于光驅的讀取速度,應用程式運作起來比較慢 無法從光驅向 CD 寫入資料,是以對系統做的任何修改再下一次加載時都會失效
- 下圖是 Linux 比較流行的 LiveCD 樣本系統
Linux 比較流行的 LiveCD 樣本系統
1.3 小結
- Linux 核心是系統的核心,控制着記憶體、程式和硬體之間的互動
- GNU 工具也是 Linux 系統中的一個重要部分
- 現在的 Linux 可以支援多種圖形化桌面環境
- Linux 發行版就是把 Linux 的不同部分彙集起來組成一個易于安裝的包