一、打包系统
不同的Linux发行版使用不同的打包系统,一般而言,大多数发行版分别属于两大包管理技术阵营:Debian的“.deb“,和红帽的“rpm"。也有重要的例外,例如Gentoo,Slackware和Foresight,但大多数会使用这两个基本系统中的一个。
![image.png](https://ucc.alicdn.com/pic/developer-ecology/y53t27ieobnpw_ac4c58b565074e4b8d2c1dc4287c4a72.png)
二、包文件
在包管理系统中软件的基本单元是包文件。包文件是一个构成软件包的文件压缩集合。一个软件包可能由大量程序及支持这些程序的数据文件组成。除了安装文件之外,软件包文件也包括关于这个包的元数据,如软件包及其内容的文本说明。另外,许多软件包还包括预安装和安装后脚本,这些脚本用来在软件安装之前和之后执行配置任务。
三、资源库
虽然某些软件项目选择执行他们自己的打包和发布策略,但是现在大多数软件包是由发行商和感兴趣的第三方创建的。系统发行版的用户可以在一个中心资源库中得到这些软件包,这个资源库可能包含了成千上万个软件包,每个软件包都是专门为这个系统发行版建立和维护的。
根据软件开发周期不同阶段需要,一个系统发行版可能维护着几个不同的资源库。例如,“测试“资源库,其中包含刚刚建立的软件包,这些需要勇敢的用户来使用,在这些软件正式发布之前,让用户查找错误。系统发行版经常会有一个”开发“资源库,这个资源库中保存着注定要包含到下一个主要版本中的半成品软件包。
一个系统发行版可能也会拥有相关第三方的资源库。这些资源库需要支持一些因法律原因,而不能被包含到发行版中的软件,比方说专利或者是DRM反规避问题。
四、依赖性
程序很少独立工作,他们需要依靠其他程序的组件来完成他们的工作。程序所共有的活动,输入/输出,就是由一个被多个程序调用的子例程处理的。这些子例程序存储在动态链接库中。动态链接库为多个程序提供基本服务。如果一个软件包需要一些共享的资源,如一个动态链接库,它就被称作有一个依赖。现代的软件包管理系统都提供了一些依赖解析方法, 以确保安装软件包时,其所有的依赖也被安装。
五、上层和底层软件包工具
软件包管理系统通常由两种工具类型组成,底层工具用来处理这些任务,比方说安装和删除软件包文件,和 上层工具,完成元数据搜索和依赖解析。有如下风格的系统:
六、常见软件包管理任务
通过命令行软件包管理工具可以完成许多操作。涉及两个概念:“package_name“这个术语是指软件包实际名称,而不是指"package_file", 它是包含在软件包中的文件名。
七、查找资源库中的软件包
使用上层工具来搜索资源库元数据,可以根据软件包的名字和说明来定位它。
例如:搜索一个yum资源库来查找emacs文本编辑器,使用如下命令:
<root@localhost ~># yum search emacs
八、从资源库中安装一个软件包
上层工具允许从一个资源库中下载一个软件包,并经过完全依赖解析来安装它。
例如:从一个apt资源库来安装emacs文本编辑器:
<root@localhost ~>#apt-get update; apt-get install emacs
九、通过软件包文件来安装软件
如果从某处而不是从资源库中下载了一个软件包文件,可以使用底层工具来直接(没有经过依赖解析)安装它。
例如:如果已经从一个并非资源库的网站下载了软件包文件 emacs-22.1-7.fc7-i386.rpm,则可以通过这种方法来安装它:
<root@localhost ~>#rpm -i emacs-22.1-7.fc7-i386.rpm
注意:因为这样安装使用底层工具rpm程序来执行安装任务,所以没有运行依赖解析。如果rpm程序发现缺少一个依赖,则会报错并退出。
十、卸载软件
可以使用上层或者底层工具来卸载软件。如下是可用的上层工具:
例如:从Debian风格的系统中卸载emacs软件包:
<root@localhost ~>#apt-get remove emacs
十一、 经过资源库来更新软件包
最常见的软件包管理任务是保持系统中的软件包都是最新的。上层工具仅需要一步就能完成这个重要的任务:
例如:更新安装在Debian风格系统中的软件包:
<root@localhost ~>#apt-get update; apt-get upgrade
十二、经过软件包文件来升级软件
如果已经从一个非资源库网站下载了一个软件包的最新版本,可以安装这个版本,用它来替代先前的版本:
例如:把Red Hat 系统中所安装的emacs的版本更新到软件包文件emacs-22.1-7.fc7-i386.rpmz所包含的emacs版本。
<root@localhost ~>#rpm -U emacs-22.1-7.fc7-i386.rpm
注意:rpm程序安装一个软件包和升级一个软件包所用的选项是不同的,而dpkg程序所用的选项是相同的。
十三、列出所安装的软件包
以下命令可以用来显示安装到系统中的所有软件包列表:
十四、确定是否安装了一个软件包
这些底层工具可以用来显示是否安装了一个指定的软件包:
例如:确定是否Debian风格的系统中安装了这个emacs软件包:
<root@localhost ~>#dpkg --status emacs
十五、显示所安装软件包的信息
如果知道了所安装的软件包的名字, 使用以下命令可以显示这个软件包的说明信息:
例如:查看Debian风格的系统中emacs软件包的说明信息:
<root@localhost ~>#apt-cache show emacs
十六、查找安装了某个文件的软件包
确定哪个软件包对所安装的某个特殊文件负责,使用下表中的命令:
例如:在Red Hat系统中,查看哪个软件包安装了/usr/bin/vim这个文件
<root@localhost ~>#rpm -qf /usr/bin/vim