“Linux”不等同于Linux内核:构建Linux系统的8个软件包
Linux发行版并不仅仅是Linux内核。所有的Linux发行版都包含了除内核之外的一些必要的软件包,比如Grub引导程序、Bash shell、GNU shell工具软件、守护进程、X.org图形服务器和桌面环境等等。
所有这些不同的程序均由相互独立的开发小组开发。这些程序被Linux发行版集成到一起从而形成一套完整的“Linux”操作系统。这和Windows操作系统不同,因为整个Windows系统全部由微软公司开发。
引导程序 (Bootloader)
当你打开电脑的时候,电脑的 BIOS或者UEFI固件会从其引导设备中加载软件。任何一个操作系统启动时首先加载的都是引导程序。在Linux操作系统中,通常使用的引导程序是Grub。
如果你在一台电脑上安装了多个操作系统,Grub会提供一个菜单供你选择。例如,如果你装了双系统(Linux和Windows),你可以从Linux和Window中选择任何一项来启动。
如果你的电脑只安装了Linux,或许Grub可以瞬间启动它,但是它提供的选择菜单还在那里。Grub负责启动Linux系统、提供命令行启动选项和允许以其它方式启动Linux以排除故障。没有引导程序的Linux操作系统是无法启动的。
Linux内核
确切地讲,Grub引导的是Linux内核。它是操作系统的一部分,并且通常被称为“Linux”。内核是整个Linux系统的核心。它管理着CPU、内存和输入/输出设备(例如键盘、鼠标和显示器)。由于内核可以直接和硬件交互,很多硬件驱动程序都成为Linux内核的一部分并且在内核中运行。
其它所有的软件都运行在内核之上。内核是最底层的软件,它提供操作硬件的接口。它在硬件之上提供一个抽象层来处理硬件的各种事务,从而把系统的其它部分从硬件中解放出来。Windows操作系统使用的内核是Windows NT,Linux操作系统使用的是Linux内核。
守护进程 (Daemons)
守护进程是不可缺少的后台进程。作为启动进程的一部分,它在Linux内核之后和登录界面显示之前启动。Windows把这些进程成为“服务”,而类Unix系统则称它们为“守护进程”。
例如,管理任务调度的crond就是一个守护进程——最后的字母d即代表守护进程。广泛使用的管理系统日志的syslogd也是守护进程。服务器进程,如sshd,也是以守护进程的形式在后台运行。这种做法可以保证它们一直处在运行状态,从而持续监听远程连接。
守护进程本质上只是在后台运行的进程,但它们是让人很少留意的系统级进程。
Shell
大多数Linux系统的默认shell是Bash shell。Shell提供了命令处理接口,从而可以在命令行窗口中输入命令来控制电脑。Shell也可以以 Shell脚本的方式运行,这种情况下一组Shell命令被写在脚本中并按顺序依次执行。
即使只使用图形桌面,shell也一直在后台运行。当你打开终端窗口的时候就会看到shell提示符。
Shell工具软件
Shell提供了一些最基本的内嵌命令。但大多数用户经常用到的shell命令并没有被内嵌到Shell中。例如,GNU核心工具软件包提供了很多和cp(复制文件)、ls(列出当前目录下的文件)和rm(删除文件)一样重要的命令。
如果没有这些重要的命令,Linux的功能就会受到极大的限制。事实上,Bash shell本身就是GNU项目的一部分。这就是为什么大家一直在争议 应该把Linux叫做“Linux”还是应该叫它“GNU/Linux”。“Linux”的批评者认为Linux系统中包含了大量的通用软件,但“Linux”没有明确指出它们的存在;而“GNU/Linux”的批评者则认为Linux系统中也包含了很多“GNU/Linux”无法代表的重要软件。
并不是所有的shell工具软件和命令行程序都包含在GNU项目中。一些命令和终端程序都有自己特定的项目。
X.org图形服务器
Linux图形桌面不是Linux内核的一部分。它是由一个名叫“X服务器”的工具包提供的,它实现了很早就有的“X视窗系统”。
目前最受欢迎的X服务器——或叫做图形服务器——是X.org。你看到的图形登录窗口和桌面正是X.org体现它的魔力所在。整个图形系统是由X.org控制的,它提供了与显卡、显示器、鼠标和其它一些设备的接口。
X.org只提供了图形系统而不是整个桌面环境。桌面环境和工具包可以构建在X.org提供的图形系统之上。
桌面环境
你真正使用的Linux桌面是一个 桌面环境。例如,Ubuntu采用Utility桌面环境,Fedora采用GNOME,Kubuntu采用KDE,Mint一般使用Cinnamon或MATE。 这些桌面环境提供了一些你看得见的东西——桌面背景、面板、窗口的标题栏和边框。
桌面环境通常包含一些自己开发的工具软件来形成一个整体。例如,GNOME和Unity包含了Nautilus文件管理器;而KDE则包含了Dolphin文件管理器。
桌面程序
并不是每个桌面程序都是桌面环境的一部分。例如,Firefox和Chrome是与桌面环境无关的,它们通常可以在任何桌面环境中运行。同样,OpenOffice套件也与具体桌面环境无关。
你可以在任何桌面环境中运行任意Linux桌面程序。但是为某个特定桌面环境设计的程序在其它桌面环境中运行时会显得不协调或运行速度较慢。例如,如果你在KDE中运行GNOME下的Nautilus文件管理器,它会显得不协调并要求你安装一系列的GNOME库,而且启动时它或许会后在台运行GNOME桌面进程。这种情况下它可以运行起来并且可以被使用的。
Linux发行版执行最后的步骤:把上述的所有软件集成到一起使它们很好的工作,并添加其它一些必要的软件。例如,Linux发行版通常都包含自己特定的系统安装软件。通过这个软件,你可以安装Linux系统和软件包管理器(用来安装其它软件或更新现有的软件)。