在 Linux(GNU/Linux)操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本。程序包管理器的只要功能是将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作。
RPM软件包分为二进制包(Binary)、源代码包(Source)。二进制包(由二进制文件、库文件、配置文件、帮助文件组成)可以直接安装在计算机中,而源代码包将会由软件包管理器自动编译、安装。
RPM包管理
RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为很多 Linux 系统的既定软件标准,软件包是rpm文件。
RPM包特点
RPM是将你要安装的软件预先编译,打包成为RPM软件包,并把这个软件要安装的时候相关参数信息和依赖关系等记录在软件包里默认的数据库中。当安装时,RPM首先会检查软件安装环境,避免错误安装。然后按照软件包软件包里面的数据查询依赖关系是否满足,满足则安装否则不安装。而且安装的时候就将该软件的信息整个写入系统RPM的数据库中,以便未来的查询、验证与卸载。
RPM包命名格式
rpm包的命名格式:Name-Version-Relase.Arch.rpm (bash-4.2.3-3.centos5.x86_64.rpm)
Name:软件的名称
Version: 源代码版本
Release:发行版本号,通常是编译的次数。与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS
Arch硬件平台:
x86: i386, i486, i586, i686等32位CPU等;
x86_64: 64位的CPU
powerpc: IBM的PPC
noarch:通用的, 没有任何硬件等级上的限制。
RPM包获取途径
1、发行的光盘或站点服务器
2、项目的官网
3、通过搜索引擎搜索很多第三方机构或个人制作并公开发布的许多rpm包(要注意rpm的合法性和安全性)
RPM搜索引擎 :http://pkgs.org、http://rpmfind.net、http://rpm.pbone.net、https://sourceforge.net/
4、可靠的途径:EPEL
rpm命令使用方法
RPM软件包的安装、删除、升级、查看和验证等所有的操作都由rpm这一命令来进行的。
rpm[模式][选项][参数]
模式
安装模式:rpm {-i |--install} [install-options] PACKAGE_File …
升级模式:rpm {-U|--upgrade} [install-options] PACKAGE_File …
卸载模式:rpm {-e|--erase} [erase-options]PACKAGE_Name …
查询模式:rpm {-q |--query } [select-options] [query-options]
验证模式:rpm {-V |--verify} [select-options] [verify-options]
选项
一般选项
选项 | 含义 |
---|---|
-a | 查询所有软件包; |
-h或--hash | 显示进度条; |
-i | 显示软件包的相关信息; |
-l | 显示软件包的文件列表; |
-p (RPM包) | 查询指定的RPM软件包; |
-q | 使用询问模式,当遇到任何问题时,rpm指令会先询问用户; |
-s | 显示文件状态,本参数需配合"-l"参数使用; |
-v | 显示指令执行过程; |
-vv | 详细显示指令执行过程,便于排错。 |
选择选项
select-options,用于查询和验证模式
选项 | 含义 |
---|---|
-a | 查询所有安装的软件包。 |
-f,--file FILE | 查询拥有<文件>的软件包,即是哪一个软件包安装的<解文件>。 |
查询选项
query-options,可用于查询和验证模式
选项 | 含义 |
---|---|
-i,--info | 显示软件包的信息,包括名称、版本、描述信息。 |
-l,--list | 列出这个软件包内所包含的文件。 |
--provides | 显示这个软件包所提供的功能。 |
-R,--requires | 查询安装该软件包所需要的其他软件包。 |
-s,--state | 列出软件包中所有文件的状态。 |
验证选项
verify-options,只能用于验证模式
选项 | 含义 |
---|---|
--nodeps | 不验证依赖的软件包。 |
--nofiles | 不验证软件包文件的属性。 |
安装选项
install-options,用于安装模式和升级模式
选项 | 含义 |
---|---|
--replacepkgs | 替换安装整个软件包 |
--replacefiles | 不同包有相同的文件且在同一个路径下后面安装的包则替换安装相同文件 |
--force | 强制覆盖安装 |
--nodeps | 忽略软件包所依赖的其他软件强制安装 |
--test | 模拟安装,软件包并不会实际安装到系统中,只是检查并显示可能存在的冲突。 |
删除选项
erase-options,只能用于删除模式。
选项 | 含义 |
---|---|
--nodeps | 忽略其他依赖该软件包的软件,强制删除该软件包。 |
--test | 模拟删除 |
数据库管理
通过rpm 命令查询一个rpm 包是否安装了,也是通过rpm 数据库来完成的;有时rpm 系统出了问题,不能安装和查询,可能会是数据库出现问题,可以使用下面命令重建;
RPM包数据库目录:/var/lib/rpm
rpm --initdb:初始化数据库(如果事先没有库,会新建一个;如果有,则不新建;)
rpm --rebuilddb: 重建数据库(直接重建,覆盖原有的数据库)
YUM
YUM 基于 RPM 包管理工具,能够从指定的源空间(服务器,本地目录等)自动下载目标 RPM 包并且安装,可以自动处理依赖性关系并进行下载、安装,无须繁琐地手动下载、安装每一个需要的依赖包。此外,YUM 的另一个功能是进行系统中所有软件的升级。
YUM服务器存储了众多rpm 包,以及包的相关的元数据文件(放置于特定目录repodata 下)
YUM服务器常用文件传输协议:http://、https://、ftp://、file://
YUM命令使用方法
yum命令:yum [options] [command] [package ...]
[command]为所要进行的操作
[package ...]是操作的对象
选项 | 含义 |
---|---|
-h | 显示帮助信息; |
-y | 对所有的提问都回答“yes”; |
-c | 指定配置文件; |
-q | 安静模式; |
-v | 详细模式; |
-d | 设置调试等级(0-10); |
-e | 设置错误等级(0-10); |
-R | 设置yum处理一个命令的最大等待时间; |
-C | 完全从缓存中运行,而不去下载或者更新任何头文件。 |
参数选项
参数 | 含义 |
---|---|
install | 安装rpm软件包; |
update | 更新rpm软件包; |
check-update | 检查是否有可用的更新rpm软件包; |
remove | 删除指定的rpm软件包; |
list | 显示软件包的信息; |
search | 检查软件包的信息; |
info | 显示指定的rpm软件包的描述信息和概要信息; |
clean | 清理yum过期的缓存; |
shell | 进入yum的shell提示符; |
resolvedep | 显示rpm软件包的依赖关系; |
localinstall | 安装本地的rpm软件包; |
localupdate | 显示本地rpm软件包进行更新; |
deplist | 显示rpm软件包的所有依赖关系。 |
示例:
安装
yum install #全部安装
yum install package1 #安装指定的安装包package1
yum groupinsall group1 #安装程序组group1
更新和升级
yum update #全部更新
yum update package1 #更新指定程序包package1
yum check-update #检查可更新的程序
yum upgrade package1 #升级指定程序包package1
yum groupupdate group1 #升级程序组group1
查找和显示
yum info package1 #显示安装包信息package1
yum list #显示所有已经安装和可以安装的程序包
yum list package1 #显示指定程序包安装情况package1
yum groupinfo group1 #显示程序组group1信息yum search string 根据关键字string查找安装包
删除程序
yum remove | erase package1 #删除程序包package1
yum groupremove group1 #删除程序组group1
yum deplist package1 #查看程序package1依赖情况
清除缓存
yum clean packages #清除缓存目录下的软件包
yum clean headers #清除缓存目录下的 headers
yum clean oldheaders #清除缓存目录下旧的 headers
包组管理的相关命令:
yum groupinstall group1 [group2] [...](安装包组)
yum groupupdate group1 [group2] [...](升级包组)
yum grouplist [hidden] [groupwildcard] [...](列出包组)
yum groupremove group1 [group2] [...](卸载包组)
yum groupinfo group1 [...](查看包组信息)
DPKG包管理
DPKG,全称为 Debian Package,最早是由Debian Linux社区所开发的,通过dpkg的机制,debian提供的软件就能简单的安装起来了,同时还能提供安装后的软件升级维护等,主要应用在debian和基于debian的发行版上。软件包是deb文件。
一个 DEB 包包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以 .deb 扩展名结尾的文件,例如 package.deb 。对其操作,需要使用 dpkg 命令。
DPKG 命令常用参数
DPKG 的常规使用方法为 dpkg [options] Package
选项 | 含义 |
---|---|
-i | 安装软件包; |
-r | 删除软件包; |
-P | 删除软件包的同时删除其配置文件; |
-L | 显示于软件包关联的文件; |
-l | 显示已安装软件包列表; |
--unpack | 解开软件包; |
-c | 显示软件包内文件列表; |
--confiugre | 配置软件包。 |
示例:
dpkg -i package.deb 安装包
dpkg -r package删除包
dpkg -P package 删除包(包括配置文件)
dpkg -L package 列出与该包关联的文件
dpkg -l package 显示该包的版本
dpkg --unpack package.deb 解开deb包的内容
dpkg -S keyword #搜索所属的包内容
dpkg -l #列出当前已安装的包
dpkg -c package.deb #列出deb包的内容
dpkg --configure package 配置包
APT
APT 的全称为 Advanced Packaging Tools 。与 YUM 对应,它最早被设计成 DPKG 的前端软件,现在通过 apt-rpm 也支持 rpm 管理。而本节本节将介绍 APT 作为 DPKG 前端的使用。 APT 的主要包管理工具为 APT-GET,通过此工具可满足和上述 YUM 相似的功能要求。
APT 常用命令
apt-get update(更新源索引)
apt-get install package-name(安装指定软件)
apt-get source package-name(下载指定软件的源文件)
apt-get upgrade(将系统中所有软件升级到最新版本)
apt-get dist-upgrade(将操作系统连同所有软件升级到最新版本)
apt-get remove package-name(卸载指定软件)
软件包依赖关系
由于开源的多态性,Linux 操作系统中的软件之间的依赖性关系处理一直很头疼。如果 package_a 依赖于 package_b,那么在一个没有安装 package_b 的系统中,package_a 是不被系统推荐安装的,强制安装很可能会导致软件无法正常工作。而且实际应用中往往最头疼的是 package_a 依赖于 package_b/c/d/e/f 等多个包 , 而 package_b/c/d/e/f 等包又依赖与package_b1,b2,b3/c1,c2/d1,d2/e1,e2/f1,f2 等等 , 为保证软件的正常使用,必须找到所有依赖包以及子依赖包并且安装。过多的依赖关系大大降低了 Linux 软件安装的用户友好性。所以我们应该使用了更高级的包管理策略YUM/APT去解决
RPM↔DEB
Alien 工具可以将 RPM 软件包转换成 DEB 软件包,或把 DEB 软件包转换成 RPM 软件包,以此适应兼容性的需要。注意首先请在系统中安装 alien 。
在 UBUNTU 中使用 alien 将 rpm 转换为 deb 并安装 :
alien -d package.rpm ;dpkg -i package.deb
在 RHEL 中使用 alien 将 deb 转换为 rpm 并安装 :
alien -r package.deb ;rpm -ivh package.rpm