决定 Linux 发行版本质量最重要的因素是软件包系统和支持该发行版本社区的活力。进一步接触 Linux,我们就会发现 Linux 软件的研究现状相当活跃。事物总是在不断变化,许多一流的 Linux 发行版本每 6 个月就有一个新版本问世,而且许多个人程序每天都在更新。要想同步这些日新月异的软件,我们就需要好的工具进行软件包管理。
软件包管理是一种在系统上安装、维护软件的方法。目前,很多人通过安装 Linux 经销商发布的软件包来满足他们所有的软件需求。这与早期的 Linux 形成了鲜明对比。因为在 Linux 早期,想要安装软件必须先下载源代码,然后对其进行编译。这并不是说编译源代码不好,源代码公开恰是 Linux 吸引人的一大亮点。编译源代码赋予用户自主检查、提升系统的能力,只是使用预先编译的软件包会更快,更容易些。
本章会讲解一些用于 Linux 软件包管理的命令行工具。尽管目前所有主流的 Linux 发行版本都提供了强大而复杂的 维持系统运行的图形化界面操作程序,但学习命令行程序同样重要,因为它可以执行许多图形化程序很难甚至无法完成的任务。
一、软件包系统
不同的 Linux 发行版用的是不同的软件包系统,并且原则上适用于一种发行版的软件包与其它版本是不兼容的。
多数 Linux 发行版采用的不外乎两种软件包技术阵营:Debian 的 .deb 技术 和 Red Hat 的 .rpm 技术 。
当然也有一些特例,比如 Gentoo 、Slackware、和 Foresight 等,但大多数版本采取的还是下表中所列的两个基本软件包系统。
1.主流软件包系统类:
软件包系统 | 发行版本(列举少部分) |
---|---|
Debian类( .deb 技术) | Debian、Ubuntu、Xandros、Linspire |
Red Hat类( .rpm 技术) | CentOS、Fedora、Red Hat Enterprise、openSUSE、Mandriva、PCLinuxOS |
二、软件包系统工作方式
在非开源软件产业中,给系统安装一个新应用,通常需先购买 “ 安装光盘 ” 之类的安装介质,然后运行安装向导进行安装。
Linux并不是这样。事实上,Linux 系统的所有软件均可在网上找到,并且多数是以 软件包文件 的形式由发行商提供,其余则以可手动安装的源代码形式存在。
1.软件包文件
(1)包文件是什么?
包文件是组成软件包系统的基本软件单元,它是由组成软件包的文件压缩而成的文件集。
① 包文件的组成
一个包可能包含大量的程序以及支持这些程序的数据文件,包文件既包含了安装文件,又包含了有关包自身及其内容的文本说明之类的软件包元数据。此外,许多软件包中还包含了安装软件包前后执行配置任务的安装脚本。
② 包文件的维护
包文件通常由软件包维护者创建,该维护者通常是(并不总是)发行商的职员。
包维护者从上游供应商(一般是程序的作者)获得软件源代码,然后进行编译,并创建包的元数据及其它必须的安装脚本。
通常,包维护者会在初始源代码上做部分修改,从而提高该软件包与该Linux发行版本其它部分的兼容性。
2.库
虽然一些软件项目选择自己包装和分销,但如今多数软件包均由 发行商 或 感兴趣的第三方创建。
(1)中心库
Linux 用户可以从其所使用的 Linux 版本的中心库中获得软件包。
所谓中心库,一般包含了成千上万个软件包,而且每一个都是专门为该发行版本建立和维护的。
(2)测试库、开发库
在软件开发生命周期的不同阶段,一个发行版本可能会维护多个不同仓库。例如:
① 测试库
通常会有一个测试库,该库里面存放的是刚创建的、用于调试者在软件包正式发布前查找漏洞的软件包。
② 开发库
另外,一个发行版本通常还会有一个开发库,存放的是下一个公开发行的版本中所包含的开发中的软件包。
(3)第三方库
一个发行版本可能还会有相关的第三方库,这些库通常提供因法律原因,如 专利 或 数字版权管理(DRM)等反规避问题而不能包括在发行版本中的软件,著名实例就是加密的 DVD 技术支持,该做法在美国不合法。
第三方库主要用在软件专利 和 反规避法不适用 的国家,这些库通常完全独立于它们所支持的 Linux 版本,用户必须充分了解后手动将其加入到软件包文件管理系统的配置文件中,才能使用它们。
3.依赖关系
几乎没有任何一个程序是独立的。与之相反,程序之间相互依赖彼此完成既定工作。
(1)共享库
一些共有的操作,比如输入/输出操作,就是由多个程序共享的例程执行。这些例程存储在共享库里面,共享库里面的文件为多个程序提供必要的服务。
① 依赖性
如果一个软件包需要共享库之类的共享资源,说明其具有依赖性。
(2)依赖性解决策略
现代软件包管理系统都提供依赖性解决策略,从而确保用户安装了软件包的同时也安装了其所有的依赖关系。
4.高级和低级软件包工具
软件包管理系统通常包含两类工具:高级软件包工具、低级软件包工具。
(1)高级软件包工具
高级工具:进行元数据搜索及提供依赖性解决。
(2)低级软件包工具
低级工具:执行如安装、删除软件包文件等任务。
(3)不同版本的软件包工具
本章将要介绍 Debian 类型的系统(如:Ubuntu 等类似系统)所提供的软件包工具 和 最近的 Red-Hat 系列产品使用的软件包工具。
尽管所有 Red-Hat 系列版本都使用相同的低级工具 rpm,但使用的高级工具却不尽相同。下表将介绍 Red-Hat 系列的高级软件包工具 yum 程序,它为高级 Centos、Fedora、Red Hat Enterprise Linux(红帽企业版Linux) 等系统所用,而其它 Red-Hat 系列的发行版本也提供功能与之相媲美的高级工具。
① 软件包系统工具
发行版本 | 低级工具 | 高级工具 |
---|---|---|
Debian 类(如:Ubuntu) | dpkg | apt-get、aptitude |
Red-Hat 系列(如:Centos、Fedora、Red Hat Enterprise Linux) | rpm | yum |