查询 - 验证(包)

# 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)
on  it road.com

安装和删除文件

注意:通常一次只能安装一个或者一个 RPM。

更高版本通常使用“-U”(更新)RPM 函数而不是“-i”RPM 函数安装。
只有一个 RPM 规则的常见例外是内核 RPM。
一个系统通常安装了多个版本的内核; RPM 有一个列表,其中列出了哪些 RPM 可能安装了多个版本。
要在安装多个版本时删除一个版本,我们必须完全指定包名称和版本。

在 x86_64 架构上,通常安装 32 位“.i386”和 64 位“.x86_64”RPM 包以支持 32 位和 64 位应用程序。
通常,RPM 不会在查询中显示包的架构,但我们可以手动显示它。

安装和拆卸

# rpm -i --install (install new RPM; error if already installed)
# rpm -U --upgrade (delete existing RPM, if any; install new)
# rpm -F --freshen (update RPM only if package already installed)
# rpm -e --erase (remove, delete, expunge)

常见选项
输出:-v(详细文件名),-h(哈希)
准备工作:-nodeps、-replacefiles、-force(这里要小心!!!)
重定位:-excludepath、-prefix、-relocate、-badreloc、-root
网址支持:ftp、http

例子:

# 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,因为文件名以字符串“.src.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 -q [packages] [information]
# rpm -qa (all installed packages)
# rpm -q package_name
# rpm -qf (filename)
# rpm -qp (package filename)

信息
默认(包名)
-i : 一般信息
-l : 文件列表

例子:

# 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 数据库

RPM 工具使用其自己的自定义数据库实现来包含其信息。
有时该数据库可能会损坏;症状包括声称缺少已安装的 RPM 包;或者尝试更新 RPM 只是挂起。
如果 RPM 数据库挂起或者损坏,我们可以尝试使用这些命令修复它。
不保证此过程有效。

对于这些步骤,我们必须以超级用户权限(又名“root”)登录。
这些命令可以直接复制并粘贴到根终端窗口中。

  1. 确保系统上没有剩余的 RPM 进程在运行。
    使用 ps 命令来识别它们。
    使用 kill 命令终止我们找到的任何“rpm”进程;可能需要“kill -9”。

  2. 删除RPM使用的锁文件:

# rm -f /var/lib/rpm/__db*
  1. 如果我们遇到挂起的“rpm”命令,请再试一次。
    如果它有效,你就完成了。
    如果没有,请再次执行步骤 #1 和 #2.
    然后继续下一步。

  2. 备份 RPM 数据库:

# cd /var/lib
# mkdir rpm-backup
# rsync -av ./rpm/. ./rpm-backup/.
  1. 重建你的 RPM 数据库:
# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1
  1. 重试失败的 RPM 命令。

查询 - 验证(文件)

RPM 数据库包含有关 RPM 安装的每个文件的许多属性。
我们可以根据安装包时由 RPM 编目的信息来验证文件的当前状态。

# rpm -V package_name
# rpm -Va (verify all)
# rpm -Vf (filename)
# rpm -Vp (package filename)

注意:许多 Linux 发行版都包含一个“预链接”RPM,它试图通过将特殊信息直接添加到应用程序的程序文件中来减少使用共享库(大多数应用程序使用至少一个共享库,可能有几十个)启动应用程序所需的时间。

添加此信息确实会使应用程序启动更快,但文件更改会使 RPM 数据库中的大多数文件属性无效,例如上次文件修改日期、文件大小和文件的 MD5 校验和。

使用 RPM(Red Hat Package Manager - 红帽软件包管理器)维护软件

RPM 是一个强大的软件管理器,可用于构建、安装、查询、验证、更新和卸载单个软件包。
RPM 包由文件存档和包信息(如名称、版本、描述和有关其他 RPM 包的依赖关系的信息)组成。

RPM 不仅仅是 Red Hat 特定的工具。
许多其他现代发行版,例如 Ubuntu 和 SuSE,也使用 RPM。
使用 RPM 的好处包括:

  • 简化的软件分发、安装、升级和删除
  • 保证:
  • 系统上安装了必备软件。
  • 必备软件的版本保持兼容。
  • 当 RPM 更新时,本地修改的配置文件不会被破坏。
  • 如果软件包稍后被删除,本地修改的配置文件将使用“.rpmsave”后缀保存。
  • 允许证明已安装的软件未被更改、修改、损坏或者以任何方式更改。

RPM 将有关已安装软件包的信息保存在“/var/lib/rpm”目录下。

RPM 工具的组件是:

  • 一个自定义数据库,其中包含有关系统上安装的所有软件的信息,这些信息是从各个 RPM 收集的。
  • “/bin/rpm”可执行文件。
  • 可用 RPM 包的 Internet 可访问存储库。

了解 RPM 版本

RPM [version] 和 [release] 字段并不总是严格的数字,可能包含除普通数字之外的其他字符。
通常会同时看到同一包的“10”和“10a”版本。
有时选择最新版本可能会很棘手。
以下是 RPM 本身如何在内部比较版本和发布编号:

  1. 删除 [name] 前缀和“.[arch].rpm”后缀。
    例如,:
    “bash-3.1-16.1.x86_64.rpm”变为“3.1-16.1”,“bash-3.1-16.5a.1.x86_64.rpm”变为“3.1-16.5a.1”

  2. 从左到右逐个字符比较剩余的字符串,直到遇到一个数字。
    如果字符不同,则整理序列中较晚出现的字符是较新的 RPM。

  3. 遇到数字时,将整个数字序列转换为单个二进制数。
    在我们的示例中,两个字符“16”组合为十六 (16) 值。
    比较结果二进制值,较大的值是最近的 RPM。
    因此,[版本] 为“0010”的 RPM 比 [版本] 为“9”的 RPM 更新。

根据需要重复步骤 2 和 3,直到出现差异。

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 包含的软件版本。 [版本] 编号由程序作者分配。使用该数字可以确定作者来源的哪个版本用于生成 RPM。
  • [release] 提供的是 RPM 文件本身的版本号,而不是作者源文件的版本。可能会发布更新的 RPM 以提供作者原始软件的修补版本。补丁不一定来自原始开发人员,因此 RPM [release] 增加而不是 [version]。
  • [arch] 描述 RPM 的内容,并说明该文件是否包含产品源(“.src.rpm”)、与体系结构无关的文件(“.noarch.rpm”),或者仅可安装在特定的主机类型(“.sh.rpm”仅适用于 STRONGHOLD 嵌入式处理器)。

注意:[版本]由原作者控制,[发布]由构建RPM的任何人控制。

如何在 Linux 中安装/删除/查询/更新 RPM 包
日期:2020-09-17 00:12:34 来源:oir作者:oir