瞭解什麼是 Linux ,並介紹命令行和 shell 在 Linux 整體架構中的位置
1.1 什麼是 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 支持用於讀寫數據的標準文件系統
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 類型
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 上存在的一些其他圖形化桌面
1.2 Linux 發行版
- 發行版 —— 完成的 Linux 系統包
1.2.1 核心 Linux 發行版
- 包含內核、一個或多個圖形化桌面環境以及預編譯好的幾乎所有能見到的 Linux 應用
- 目標是提供一站式的完整 Linux 安裝
- 下圖是 Linux 比較流行的核心發行版
1.2.2 特定用途的 Linux 發行版
- 由於核心版體積龐大、配置繁瑣,導致安裝過程異常複雜,所以出現了針對特性場景使用的 Linux 發行版
- 下圖是 Linux 比較流行的特定用途發行版
1.2.3 Linux LiveCD 樣本系統
- 可以在光驅中通過引導直接運行的 Linux 版本,不需要安裝就可以看到 Linux 的具體內容
- 大部分特定用戶的 Linux 發行版都會推出 Linux LiveCD 版本
- 但由於是從光驅讀取的原因,該版本存在以下兩大缺陷: 受制於光驅的讀取速度,應用程序運行起來比較慢 無法從光驅向 CD 寫入數據,所以對系統做的任何修改再下一次加載時都會失效
- 下圖是 Linux 比較流行的 LiveCD 樣本系統
1.3 小結
- Linux 內核是系統的核心,控制著內存、程序和硬件之間的交互
- GNU 工具也是 Linux 系統中的一個重要部分
- 現在的 Linux 可以支持多種圖形化桌面環境
- Linux 發行版就是把 Linux 的不同部分彙集起來組成一個易於安裝的包
後臺私信【架構】獲取c/c++ Linux後臺服務器開發相關學習視頻
閱讀更多 Hu先生Linux後臺開發 的文章