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系统是什么样的。