1. 什么是Linux
首先,Linux可以分為以下四部分:
- Linux內核
- GNU工具
- 圖形化桌面環境
- 應用軟件
圖1-1是一個基本結構框圖,展示了各部分是如何協作起來構成整個Linux系統的。
1.1 Linux內核
Linux系統的核心是內核。內核控制著計算機系統上的所有硬件和軟件,在必要時分配硬件,
并根據需要執行軟件。
內核主要負責以下四種功能:
- 系統內存管理
- 軟件程序管理
- 硬件設備管理
- 文件系統管理
系統內存管理
操作系統內核的主要功能之一就是內存管理。內核不僅管理服務器上的可用物理內存,還可以創建和管理虛擬內存(即實際并不存在的內存)。
內核通過硬盤上的存儲空間來實現虛擬內存,這塊區域稱為交換空間(swap space)
。內核不斷地在交換空間和實際的物理內存之間反復交換虛擬內存中的內容。這使得系統以為它擁有比物理內存更多的可用內存(如圖1-2所示)。
軟件程序管理
Linux操作系統將運行中的程序稱為進程
。進程可以在前臺運行,將輸出顯示在屏幕上,也可以在后臺運行,隱藏到幕后。內核控制著Linux系統如何管理運行在系統上的所有進程。
硬件設備管理
內核的另一職責是管理硬件設備。任何Linux系統需要與之通信的設備,都需要在內核代碼中加入其驅動程序代碼。驅動程序代碼相當于應用程序和硬件設備的中間人,允許內核與設備之間交換數據。
Linux系統將硬件設備當成特殊的文件,稱為設備文件。設備文件有3種分類:
- 字符型設備文件
- 塊設備文件
- 網絡設備文件
字符型設備文件是指處理數據時每次只能處理一個字符的設備。大多數類型的調制解調器和終端都是作為字符型設備文件創建的。
塊設備文件是指處理數據時每次能處理大塊數據的設備,比如硬盤。
網絡設備文件是指采用數據包發送和接收數據的設備,包括各種網卡和一個特殊的回環設備。這個回環設備允許Linux系統使用常見的網絡編程協議同自身通信。
Linux為系統上的每個設備都創建一種稱為節點的特殊文件。與設備的所有通信都通過設備節點完成。每個節點都有唯一的數值對供Linux內核標識它。數值對包括一個主設備號和一個次設備號。類似的設備被劃分到同樣的主設備號下。次設備號用于標識主設備組下的某個特定設備。
文件管理系統
不同于其他一些操作系統, Linux內核支持通過不同類型的文件系統從硬盤中讀寫數據。除了自有的諸多文件系統外, Linux還支持從其他操作系統(比如Microsoft Windows)采用的文件系統中讀寫數據。內核必須在編譯時就加入對所有可能用到的文件系統的支持。表1-1列出了Linux系統用來讀寫數據的標準文件系統。
Linux服務器所訪問的所有硬盤都必須格式化成表1-1所列文件系統類型中的一種。
Linux內核采用虛擬文件系統(Virtual File System, VFS)作為和每個文件系統交互的接口。這為Linux內核同任何類型文件系統通信提供了一個標準接口。當每個文件系統都被掛載和使用時, VFS將信息都緩存在內存中。
1.2 GNU工具
除了由內核控制硬件設備外,操作系統還需要工具來執行一些標準功能,比如控制文件和程序。
GNU組織(GNU是GNU’s Not Unix的縮寫)開發了一套完整的Unix工具,但沒有可以運行它們的內核系統。這些工具是在名為開源軟件(open source software, OSS)的軟件理念下開發的。
將Linus的Linux內核和GNU操作系統工具整合起來,就產生了一款完整的、功能豐富的免費操作系統。
盡管通常將Linux內核和GNU工具的結合體稱為Linux,但你也會在互聯網上看到一些Linux純粹主義者將其為GNU/Linux系統,藉此向GNU組織所作的貢獻致意。
核心GNU工具
Linux系統使用的這組核心工具被稱為coreutils(coreutilities)軟件包。
GNU coreutils軟件包由三部分構成:
- 用以處理文件的工具
- 用以操作文本的工具
- 用以管理進程的工具
shell
GNU/Linux shell是一種特殊的交互式工具。它為用戶提供了啟動程序、管理文件系統中的文件以及運行在Linux系統上的進程的途徑。shell的核心是命令行提示符。命令行提示符是shell負責交互的部分。它允許你輸入文本命令,然后解釋命令,并在內核中執行。
shell包含了一組內部命令,用這些命令可以完成諸如復制文件、移動文件、重命名文件、顯示和終止系統中正運行的程序等操作。 shell也允許你在命令行提示符中輸入程序的名稱,它會將程序名傳遞給內核以啟動它。
你也可以將多個shell命令放入文件中作為程序執行。這些文件被稱作shell腳本
。你在命令行上執行的任何命令都可放進一個shell腳本中作為一組命令執行。這為創建那種需要把幾個命令放在一起來工作的工具提供了便利。
所有Linux發行版默認的shell都是bash shell。 bash shell由GNU項目開發,被當作標準Unix shell——Bourne shell(以創建者的名字命名)的替代品。 bash shell的名稱就是針對Bourne shell的拼寫所玩的一個文字游戲,稱為Bourne again shell。
除了bash shell,還有其他幾種常見的shell。表1-2列出了Linux中常見的幾種不同shell。
1.3 Linux桌面環境
完成工作的方式不止一種, Linux一直以來都以此而聞名。在圖形化桌面上更是如此。 Linux有各種圖形化桌面可供選擇。
X Window系統
有兩個基本要素決定了視頻環境:顯卡和顯示器。要在電腦上顯示絢麗的畫面, Linux軟件就得知道如何與這兩者互通。 X Window軟件是圖形顯示的核心部分。
X Window軟件是直接和PC上的顯卡及顯示器打交道的底層程序。它控制著Linux程序如何在電腦上顯示出漂亮的窗口和圖形。
核心的X Window軟件可以產生圖形化顯示環境,但僅此而已。雖然對于運行獨立應用這已經足夠,但在日常PC使用中卻并不是那么有用。它沒有桌面環境供用戶操作文件或是開啟程序。為此,你需要一個建立在X Window系統軟件之上的桌面環境。
KDE桌面
KDE(K Desktop Environment, K桌面環境)最初于1996年作為開源項目發布。它會生成一個類似于Microsoft Windows的圖形化桌面環境。
圖1-3展示了運行在openSuSE Linux發行版上的KDE 4桌面。
GNOME桌面
GNOME(the GNU Network Object Model Environment, GNU網絡對象模型環境)是另一個流行的Linux桌面環境。 GNOME于1999年首次發布,現已成為許多Linux發行版默認的桌面環境(不過用得最多的是Red Hat Linux)。
盡管GNOME決定不再沿用Microsoft Windows的標準觀感(look-and-feel),但它還是集成了
許多Windows用戶習慣的功能:
- 一塊放置圖標的桌面區域
- 兩個面板區域
- 拖放功能
圖1-4展示了CentOS Linux發行版采用的標準GNOME桌面。
Unity桌面
如果你用的是Ubuntu Linux發行版,你會注意到它與KDE和GNOME桌面環境有些不一樣。準確來說,這是因為負責開發Ubuntu的公司決定采用自己的一套叫作Unity的Linux桌面環境。
Unity桌面得名于該項目的目標——為工作站、平板電腦以及移動設備提供一致的桌面體驗。不管你是在工作站還是在手機上使用Ubuntu, Unity桌面的使用方式都是一樣的。圖1-5展示了Ubuntu 14.04 LTS中的Unity桌面。
2. Linux發行版
我們將完整的Linux系統包稱為發行版。
不同的Linux發行版通常歸類為3種:
- 完整的核心Linux發行版
- 特定用途的發行版
- LiveCD測試發行版
2.1 核心Linux發行版
核心Linux發行版含有內核、一個或多個圖形化桌面環境以及預編譯好的幾乎所有能見到的Linux應用。它提供了一站式的完整Linux安裝。表1-4列出了一些較流行的核心Linux發行版。
2.2 特定用途的Linux發行版
Linux發行版的一個新子群已經出現了。它們通常基于某個主流發行版,但僅包含主流發行版中一小部分用于某種特定用途的應用程序。
表1-5列出了一些特定用途的Linux發行版以及它們的專長。
許多特定用途的Linux發行版都是基于Debian Linux。它們使用和Debian一樣的安裝文件,但僅打包了完整Debian系統中的一小部分。
2.3 Linux LiveCD測試發行版
Linux世界中一個相對較新的現象是可引導的Linux CD發行版的出現。它無需安裝就可以看到Linux系統是什么樣的。