安装和删除文件
通常一次只能安装 RPM 的一个 [版本] 或者 [发行版]。
更高版本通常使用“-U”(更新)RPM 函数而不是“-i”RPM 函数安装。
只有一个 RPM 规则的常见例外是内核 RPM。
一个系统通常安装了多个版本的内核; RPM 有一个列表,其中列出了哪些 RPM 可能安装了多个版本。
要在安装多个版本时删除一个版本,我们必须完全指定包名称和版本。
在 x86_64 架构上,通常同时安装 32 位“.i386”和 64 位“.x86_64”RPM 包以支持 32 位和 64 位应用程序。
通常,RPM 不会在查询中显示包的架构,但我们可以手动显示它。
安装和卸载
- rpm -i 或者 -install ###(安装新的 RPM;如果已经安装则出错)
- rpm -U 或者 -upgrade ###(删除现有的 RPM,如果有的话;安装新的)
- rpm -F 或者 -freshen ###(仅当软件包已安装时才更新 RPM)
- rpm -e 或者 -erase ###(移除、删除、清除)
常见选项
- 输出:-v(详细-文件名),-h(哈希)
- 准备工作:-nodeps、-replacefiles、-force(这里要小心!!!)
- 重定位:-excludepath、-prefix、-relocate、-badreloc、-root
- 网址支持:ftp、http
RPM安装,更新或者卸载软件示例:
rpm -ivh binutils-2.11.90.0.8-12.i386.rpm rpm -Uvh finger-0.17-9-i386.rpm rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm rpm -e diffutils rpm -e kernel-enterprise-2.4.9-e.12
技巧和窍门
永远不要使用“-U”选项来安装新的内核 RPM。
“-U”更新功能首先从系统中删除当前的 RPM,然后尝试安装新的 RPM。
任何阻止新 RPM 安装的问题都会导致系统无法启动。
这不是你想要的,所以总是使用“-i”开关来安装内核 RPM。
查询、安装、删除和升级包的 RPM 命令示例
RPM 包的类型
RPM 包分为两类:
- 源代码(source)
- 二进制(binary)
源代码RPM
始终可以识别源 RPM,因为文件名以字符串“.src.rpm”结尾。
在源 RPM 中,不仅有原始程序的源代码文件,还有允许自动重新编译、自动安装和自动删除代码的脚本。
源 RPM 中没有最终用户可执行文件。
通常,只有开发人员对源 RPM 感兴趣。
二进制RPM
二进制 RPM 包含 RPM 的最终用户组件。
二进制 RPM 文件名标识内容的主机架构。
例如,二进制 RPM 文件:
bash-3.1-16.1.x86_64.rpm
包含只能在 64 位 Intel X86 架构 CPU 上使用的文件。
其他常见的体系结构值包括用于 32 位 Intel 主机的“i386”。
一些二进制 RPM 可以安装在任何 CPU 架构上,因为它们的文件可以在任何主机上运行;这些“.noarch.rpm”包的一个例子是“tzdata”RPM,它包含有关世界时区的信息。
要将系统更新到包的最新版本,我们将需要最新的二进制 RPM。
RPM 命名方案
每个 RPM 包都包含在一个文件中。
文件名有几个字段来完全标识包的内容。
虽然 RPM 工具本身不依赖于文件名本身,但我们应该了解文件名约定以识别或者下载正确的包。
这是一个示例 RPM 文件名:
bash-3.1-16.1.x86_64.rpm
此 RPM 用于 BASH shell ("/bin/bash")。
文件名由几部分组成:
[name]-[version]-[release].[arch].rpm
其中:
- [name] 是程序或者包的名称。 [name] 通常由程序的作者指定。在我们的示例中,开发人员出于对他们来说似乎很有趣的原因决定将他们的产品命名为“bash”。
- [version] 标识此 RPM 包含的软件版本。 [版本] 编号由程序作者分配。使用 [version] 编号可以确定作者来源的哪个版本用于生成 RPM。
- [release] 提供的是 RPM 文件本身的版本号,而不是作者源文件的版本。可能会发布更新的 RPM 以提供作者原始软件的修补版本。补丁不一定来自原始开发人员,因此 RPM [release] 增加而不是 [version]。
- [arch] 描述 RPM 的内容,并说明该文件是否包含产品源(“.src.rpm”)、与体系结构无关的文件(“.noarch.rpm”),或者仅可安装在特定的主机类型(“.sh.rpm”仅适用于 STRONGHOLD 嵌入式处理器)。
注意:[版本]由原作者控制,[发布]由构建RPM的任何人控制。
查询 - 验证(包)
下面是一些用于包验证的 RPM 查询。
- rpm -import /mnt/cdrom/RPM-GPG-KEY
- rpm -q gpg-pubkey
- rpm -checksig m4-1.4.1-11.i386.rpm
例子:
rpm -qf /path/filename (what package owns filename) rpm -qf /path/filename -i (what does it do) rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4) rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4) rpm -q --whatprovides glibc.so (what package provides requisite library)
查询(软件包和/或者信息)
使用查询获取有关已安装软件包的信息。
我们可以查询所有已安装的软件包或者单个已安装的软件包。
我们还可以找出哪个 RPM 提供特定文件。
- rpm -q [包] [信息]
- rpm -qa
- rpm -q 包名
- rpm -qf [文件名]
- rpm -qp [包文件名]
信息
默认(包名)
-i : 一般信息
-l : 文件列表
RPM查询示例:
rpm -qa rpm -q kernel -i (information) rpm -q kernel -l (files contained in package) rpm -q kernel --requires (prereqs) rpm -q kernel --provides (capabilities provided by package) rpm -q kernel --scripts (scripts run during installation and removal) rpm -q kernel --changelog (revision history) rpm -q kernel -queryformat format (rpm --querytags for list of options)
技巧和窍门
在不知道确切名称的情况下搜索特定 RPM 包时,命令管道例如:
$ rpm -qa | grep foo
是常用的。
RPM 工具的更高版本允许将其简洁地完成为:
$ rpm -qa '*foo*'
使用 RPM(Red Hat Package Manager)维护软件
RPM ( Red Hat Package Manager 红帽软件包管理器)是一个强大的软件管理器,可用于构建、安装、查询、验证、更新和卸载单个软件包。
RPM 包由文件存档和包信息(如名称、版本、描述和有关其他 RPM 包的依赖关系的信息)组成。
RPM 不仅仅是 Red Hat 特定的工具。
许多其他现代发行版,例如 Ubuntu 和 SuSE,也使用 RPM。
使用 RPM 的好处包括:
- 简化的软件分发、安装、升级和删除
- 保证了:
- 系统上安装了必备软件。
- 必备软件的版本保持兼容。
- 当 RPM 更新时,本地修改的配置文件不会被破坏。
- 如果软件包稍后被删除,本地修改的配置文件将使用“.rpmsave”后缀保存。
- 允许证明安装的软件没有被更改、修改、损坏或者以任何方式更改。
RPM 将有关已安装软件包的信息保存在“/var/lib/rpm”目录下。
RPM 工具的组件是:
- 一个自定义数据库,其中包含有关系统上安装的所有软件的信息,这些信息是从各个 RPM 收集的。
- “/bin/rpm”可执行文件。
- 可用 RPM 包的 Internet 可访问存储库。
查询 - 验证(文件)
RPM 数据库包含有关 RPM 安装的每个文件的许多属性。
我们可以根据安装包时由 RPM 编目的信息来验证文件的当前状态。
- rpm -V 包名
- rpm -Va(验证所有)
- rpm -Vf(文件名)
- rpm -Vp(包文件名)
许多 Linux 发行版都包含一个“预链接”RPM,它试图通过将特殊信息直接添加到应用程序的程序文件中来减少使用共享库(大多数应用程序使用至少一个共享库,可能使用几十个)启动应用程序所需的时间。
添加此信息确实会使应用程序启动更快,但文件更改会使 RPM 数据库中的大多数文件属性无效,例如上次文件修改日期、文件大小和文件的 MD5 校验和。