详细课程

使用 RPM
RPM 有五个基本的操作 模式(不包括包的编译): 安装,卸载,升级,查询,校验。本节将对它们一一介绍。要了解完整的细节和选项,可以使用 rpm --help, 或转到 the section called 其它 RPM 资源 得到更多关于 RPM 的信息。

1 安装
典型的 RPM 有着类似 foo-1.0-1.i386.rpm这样的名称, 其中指明了包名 (foo), 版本号 (1.0), 发行号 (1), 和硬件平台 (i386)。安装一个软件包只需简单的键入以下命令:

# rpm -ivh foo-1.0-1.i386.rpm
foo                      ####################################
#

正如您所看到的, RPM 将会打印出软件包的名字 ( 并不一定要与文件名相同, 可能是 1.rpm), 而后打印出一连串的 # 号以表示安装进度。

请注意
  尽管通常是使用 rpm -ivh foo-1.0-1.i386.rpm 来安装包, 但也可以用 rpm -Uvh foo-1.0-1.i386.rpm 来替代。 -U 是包升级参数, 也可以用来安装新包。参看 升级 有关RPM 中 -U 参数的详细使用情况。

软件包的安装设计非常简单, 但还是有可能发生以下错误:

软件包已被安装
如果软件包已被安装, 会出现以下信息:

# rpm -ivh foo-1.0-1.i386.rpm
foo                    package foo-1.0-1 is already installed
error: foo-1.0-1.i386.rpm cannot be installed
#

如果仍要安装该包, 可以在命令行中使用 --replacepkgs 选项, 这样 RPM 将忽略该错误信息:

# rpm -ivh --replacepkgs foo-1.0-1.i386.rpm
foo                      ####################################
#

文件冲突
如果要安装的软件包中有一个文件已在安装其它包时被安装,会显示以下信息:

# rpm -ivh foo-1.0-1.i386.rpm
foo          /usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed
#

要想让RPM 忽略该错误信息, 请使用 --replacefiles 命令行选项:

# rpm -ivh --replacefiles foo-1.0-1.i386.rpm
foo                      ####################################
#

未解决依赖关系
一个 RPM 包可能会 "依赖" 其它软件包, 也就是说要求在安装了特定的软件包之后才能安装该软件包。 如果在安装这个软件包时未解决这种存在的依赖关系, 会看到:

# rpm -ivh bar-1.0-1.i386.rpm
failed dependencies:
       foo is needed by bar-1.0-1
#

只有先安装完所依赖的软件包,才能解决这个问题。 如果想强制安装 (这不是个好办法,因为安装后的软件包未必能正常运行), 可以使用 --nodeps 命令行选项。

3.2.2 卸载
卸载软件包就象安装软件包时一样简单:

# rpm -e foo
#

请注意
  注意这里使用软件包的 名字 "foo" , 而不是原始软件包的 文件名 "foo-1.0-1.i386.rpm"。卸载软件包时, 需要用原始包的实际文件名替换 foo 包名。

在卸载某个软件包时,可能会发生依赖关系错误,这说明其它包与此包之间有安装依赖关系。例如:

# rpm -e foo
removing these packages would break dependencies:
       foo is needed by bar-1.0-1
#

要使 RPM 在卸载此包时忽略该错误 (这不是个好办法,因为卸载后,与它有依赖关系的软件包未必能正常运行), 使用 --nodeps 命令行选项。

3.2.3 升级
升级软件包和安装软件包十分类似。

# rpm -Uvh foo-2.0-1.i386.rpm
foo                      ####################################
#

RPM 将自动卸载已安装的老版本的 foo 软件包,用户无法看到有关信息。事实上用户可能总是使用 -U 来安装软件包, 因为即便以往未安装过该软件包,也能正常运行。

因为 RPM 执行智能化的软件包升级,自动处理配置文件,会显示如下信息:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

这表示用户对配置文件的修改,不一定能 "向上兼容" 该软件包中的配置文件。 因此,RPM 会备份原始的文件,再安装新文件。用户应当尽快解决这两个配置文件的不同之处,以便系统能持续正常运行。

因为升级其实就是软件包的卸载与安装的综合,也可能会遇见那些操作中所可能发生的错误。 再有就是: 在使用 旧 版本的 RPM 软件包来升级新版本的软件时,会产生以下信息:

# rpm -Uvh foo-1.0-1.i386.rpm
foo   package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed
#

要使用 RPM 强行 "升级" , 请使用 --oldpackage 命令行参数:

# rpm -Uvh --oldpackage foo-1.0-1.i386.rpm
foo                      ####################################
#

3.2.4 更新
包的更新与包升级相似:

# rpm -Fvh foo-1.2-1.i386.rpm
foo                      ####################################
#

RPM 更新选项,是检查命令行中指明的包版本与安装在系统中的包版本是否一致。 当 RPM 更新选项处理完已安装包的新版本时,该包会升级到新版本。 但是,RPM 更新选项无法安装系统目前没有的软件包。 这与 RPM 升级不同,升级选项 能够 安装软件包,无论旧版本的包是否已安装。

RPM 更新选项可以很好的更新一个软件包或一组软件包。 如果用户下载了大量的软件包,但只想升级系统中已有的包时,RPM 更新选项会非常有用。 使用 RPM 更新选项意味着你无需从下载的包中挑挑拣拣,也不用事先删除不要的包。

这种情况下, 只需简单的键入:

# rpm -Fvh *.rpm

RPM 工具会自动升级那些已经安装好的包。

3.2.5 查询
使用命令 rpm -q来查询已安装软件包的数据库。简单的使用命令 rpm -q foo 会打印出foo软件包的包名、版本号和发行号:

# rpm -q foo
foo-2.0-1
#

除了指定包名以外,用户还可以使用以下选项与 -q 连用,来指明要查询哪些软件包的信息。这些选项被称之为 软件包指定选项 。

-a 查询所有已安装的软件包。

-f <file> 将查询包含有文件 <file>的软件包。

-p <packagefile> 查询软件包文件名为 <packagefile>的包。

有几种方式来指定查询软件包时所显示的信息。 以下选项可以出选择感兴趣的信息,加以显示。这样的选项被称作 信息选择选项 。

-i 显示软件包信息,如描述、发行号、大小、编译日期、安装日期、硬件平台、以及其它一些各类信息。

-l 列出软件包中包含的文件。

-s 显示软件包中所有文件的状态。

-d 列出被标注为文档的文件 (如,man 手册、 info 信息、README,等等) 。

-c 列出被标注为配置文件的文件。这些文件是需要在安装完毕后加以定制的,如 (sendmail.cf, passwd, inittab, 等) 。

如果要在执行上述选项的同时,显示文件列表, 可以同时使用 -v 命令行选项,就能得出与 ls -l 格式类似的输出。

3.2.6 校验
包校验是比较自软件包中安装的文件信息和软件包中的原始文件的相同信息。 与其它校验相同,包校验将比较文件的长度、MD5校验和、许可、类型、文件属主和群组。

使用 rpm -V 命令进行包校验。用户可以配合使用各个包选择选项 ,来列出校验包的查询结果。 简单地使用 rpm -V foo 可以校验 foo 包中原始安装时的所有文件。例如:

校验包含特定文件的软件包: rpm -Vf /bin/vi

校验所有已安装的软件包: rpm -Va

用 RPM 包文件校验已安装的软件包: rpm -Vp foo-1.0-1.i386.rpm

如果担心RPM数据库被破坏,就可以使用这种方式加以校验。

如果校验结果一切正常,将不会产生任何输出。如果有不一致的地方,会显示出来。 输出格式是8位长字符串, "c" 用以指配置文件,
接着是文件名。8位长字符,每个代表一个文件属性与RPM数据库中记录的属性相比较的结果。"." (点) 表示测试通过。
下面的字符代表某测试的失败:

5 -- MD5 校验和

S -- 文件长度

L -- 符号链接

T -- 文件修改日期

D -- 设备

U -- 用户

G -- 用户组

M -- 模式 (包含许可和文件类型)

? -- 不可读文件

如果有信息输出, 用户应当认真加以考虑,是该删除、重新安装、还是修正出现的问题。
3.2 使用 RPM
RPM 有五个基本的操作 模式(不包括包的编译): 安装,卸载,升级,查询,校验。本节将对它们一一介绍。要了解完整的细节和选项,可以使用 rpm --help, 或转到 the section called 其它 RPM 资源 得到更多关于 RPM 的信息。

3.2.1 安装
典型的 RPM 有着类似 foo-1.0-1.i386.rpm这样的名称, 其中指明了包名 (foo), 版本号 (1.0), 发行号 (1), 和硬件平台 (i386)。安装一个软件包只需简单的键入以下命令:

# rpm -ivh foo-1.0-1.i386.rpm
foo                      ####################################
#

正如您所看到的, RPM 将会打印出软件包的名字 ( 并不一定要与文件名相同, 可能是 1.rpm), 而后打印出一连串的 # 号以表示安装进度。

请注意
  尽管通常是使用 rpm -ivh foo-1.0-1.i386.rpm 来安装包, 但也可以用 rpm -Uvh foo-1.0-1.i386.rpm 来替代。 -U 是包升级参数, 也可以用来安装新包。参看 升级一节 有关RPM 中 -U 参数的详细使用情况。

软件包的安装设计非常简单, 但还是有可能发生以下错误:

软件包已被安装
如果软件包已被安装, 会出现以下信息:

# rpm -ivh foo-1.0-1.i386.rpm
foo                    package foo-1.0-1 is already installed
error: foo-1.0-1.i386.rpm cannot be installed
#

如果仍要安装该包, 可以在命令行中使用 --replacepkgs 选项, 这样 RPM 将忽略该错误信息:

# rpm -ivh --replacepkgs foo-1.0-1.i386.rpm
foo                      ####################################
#

文件冲突
如果要安装的软件包中有一个文件已在安装其它包时被安装,会显示以下信息:

# rpm -ivh foo-1.0-1.i386.rpm
foo          /usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed
#

要想让RPM 忽略该错误信息, 请使用 --replacefiles 命令行选项:

# rpm -ivh --replacefiles foo-1.0-1.i386.rpm
foo                      ####################################
#

未解决依赖关系
一个 RPM 包可能会 "依赖" 其它软件包, 也就是说要求在安装了特定的软件包之后才能安装该软件包。 如果在安装这个软件包时未解决这种存在的依赖关系, 会看到:

# rpm -ivh bar-1.0-1.i386.rpm
failed dependencies:
       foo is needed by bar-1.0-1
#

只有先安装完所依赖的软件包,才能解决这个问题。 如果想强制安装 (这不是个好办法,因为安装后的软件包未必能正常运行), 可以使用 --nodeps 命令行选项。

3.2.2 卸载
卸载软件包就象安装软件包时一样简单:

# rpm -e foo
#

请注意
  注意这里使用软件包的 名字 "foo" , 而不是原始软件包的 文件名 "foo-1.0-1.i386.rpm"。卸载软件包时, 需要用原始包的实际文件名替换 foo 包名。

在卸载某个软件包时,可能会发生依赖关系错误,这说明其它包与此包之间有安装依赖关系。例如:

# rpm -e foo
removing these packages would break dependencies:
       foo is needed by bar-1.0-1
#

要使 RPM 在卸载此包时忽略该错误 (这不是个好办法,因为卸载后,与它有依赖关系的软件包未必能正常运行), 使用 --nodeps 命令行选项。

3.2.3 升级
升级软件包和安装软件包十分类似。

# rpm -Uvh foo-2.0-1.i386.rpm
foo                      ####################################
#

RPM 将自动卸载已安装的老版本的 foo 软件包,用户无法看到有关信息。事实上用户可能总是使用 -U 来安装软件包, 因为即便以往未安装过该软件包,也能正常运行。

因为 RPM 执行智能化的软件包升级,自动处理配置文件,会显示如下信息:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

这表示用户对配置文件的修改,不一定能 "向上兼容" 该软件包中的配置文件。 因此,RPM 会备份原始的文件,再安装新文件。用户应当尽快解决这两个配置文件的不同之处,以便系统能持续正常运行。

因为升级其实就是软件包的卸载与安装的综合,也可能会遇见那些操作中所可能发生的错误。 再有就是: 在使用 旧 版本的 RPM 软件包来升级新版本的软件时,会产生以下信息:

# rpm -Uvh foo-1.0-1.i386.rpm
foo   package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed
#

要使用 RPM 强行 "升级" , 请使用 --oldpackage 命令行参数:

# rpm -Uvh --oldpackage foo-1.0-1.i386.rpm
foo                      ####################################
#

3.2.4 更新
包的更新与包升级相似:

# rpm -Fvh foo-1.2-1.i386.rpm
foo                      ####################################
#

RPM 更新选项,是检查命令行中指明的包版本与安装在系统中的包版本是否一致。 当 RPM 更新选项处理完已安装包的新版本时,该包会升级到新版本。 但是,RPM 更新选项无法安装系统目前没有的软件包。 这与 RPM 升级不同,升级选项 能够 安装软件包,无论旧版本的包是否已安装。

RPM 更新选项可以很好的更新一个软件包或一组软件包。 如果用户下载了大量的软件包,但只想升级系统中已有的包时,RPM 更新选项会非常有用。 使用 RPM 更新选项意味着你无需从下载的包中挑挑拣拣,也不用事先删除不要的包。

这种情况下, 只需简单的键入:

# rpm -Fvh *.rpm

RPM 工具会自动升级那些已经安装好的包。

3.2.5 查询
使用命令 rpm -q来查询已安装软件包的数据库。简单的使用命令 rpm -q foo 会打印出foo软件包的包名、版本号和发行号:

# rpm -q foo
foo-2.0-1
#

除了指定包名以外,用户还可以使用以下选项与 -q 连用,来指明要查询哪些软件包的信息。这些选项被称之为 软件包指定选项 。

-a 查询所有已安装的软件包。

-f <file> 将查询包含有文件 <file>的软件包。

-p <packagefile> 查询软件包文件名为 <packagefile>的包。

有几种方式来指定查询软件包时所显示的信息。 以下选项可以出选择感兴趣的信息,加以显示。这样的选项被称作 信息选择选项 。

-i 显示软件包信息,如描述、发行号、大小、编译日期、安装日期、硬件平台、以及其它一些各类信息。

-l 列出软件包中包含的文件。

-s 显示软件包中所有文件的状态。

-d 列出被标注为文档的文件 (如,man 手册、 info 信息、README,等等) 。

-c 列出被标注为配置文件的文件。这些文件是需要在安装完毕后加以定制的,如 (sendmail.cf, passwd, inittab, 等) 。

如果要在执行上述选项的同时,显示文件列表, 可以同时使用 -v 命令行选项,就能得出与 ls -l 格式类似的输出。

3.2.6 校验
包校验是比较自软件包中安装的文件信息和软件包中的原始文件的相同信息。 与其它校验相同,包校验将比较文件的长度、MD5校验和、许可、类型、文件属主和群组。

使用 rpm -V 命令进行包校验。用户可以配合使用各个包选择选项 ,来列出校验包的查询结果。 简单地使用 rpm -V foo 可以校验 foo 包中原始安装时的所有文件。例如:

校验包含特定文件的软件包: rpm -Vf /bin/vi

校验所有已安装的软件包: rpm -Va

用 RPM 包文件校验已安装的软件包: rpm -Vp foo-1.0-1.i386.rpm

如果担心RPM数据库被破坏,就可以使用这种方式加以校验。

如果校验结果一切正常,将不会产生任何输出。如果有不一致的地方,会显示出来。 输出格式是8位长字符串, "c" 用以指配置文件,
接着是文件名。8位长字符,每个代表一个文件属性与RPM数据库中记录的属性相比较的结果。"." (点) 表示测试通过。
下面的字符代表某测试的失败:

5 -- MD5 校验和

S -- 文件长度

L -- 符号链接

T -- 文件修改日期

D -- 设备

U -- 用户

G -- 用户组

M -- 模式 (包含许可和文件类型)

? -- 不可读文件

如果有信息输出, 用户应当认真加以考虑,是该删除、重新安装、还是修正出现的问题。

linux系统下rpm包的安装、删除、效验、查询的更多相关文章

  1. Linux系统下(x64)安装jdk 1.6(jdk-6u45-linux-x64.bin)

    Linux系统下(x64)安装jdk 1.6(jdk-6u45-linux-x64.bin) 一,查看是否安装jdk: # rpm -qa | grep jdk 或者 #rpm -q jdk 或者 # ...

  2. Linux系统下RPM命令和yum的使用

    Linux系统下RPM命令和yum的使用 RPM:Redhat Packages Manager (红帽系列软件包的管理),主要用于安装.卸载.升级和管理软件. 一个包由下面几个部分构成: 例如:ht ...

  3. Linux系统下MongoDB的简单安装与基本操作

    这篇文章主要介绍了Linux系统下MongoDB的简单安装与基本操作,需要的朋友可以参考下   Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备 ...

  4. Linux系统下Redis单机版的安装详细教程

    Linux系统下Redis单机版的安装详细教程 1.下载软件安装包并上传到root目录 这里以旧版本的3.0进行安装,比较成熟稳定,具体软件可以通过qq群534073451文件下载

  5. Linux下RPM包的安装

    Linux下RPM包安装 二进制包(RPM包.系统默认包) RPM安装 rpm -ivh 包全名(查询依赖网址:http://www.rpmfind.net) -i(install):安装 -v(ve ...

  6. 常见linux系统中RPM包的通用命名规则

    本文重点说一下在常见的linux系统中,RPM包通用的命名规则. RPM包的一般格式为:name-version-arch.rpmname-version-arch.src.rpm 例:httpd-2 ...

  7. redis在windows和Linux系统下的下载、安装、配置

    1.下载redis安装包 在redis的官网只有Linux系统下的安装包,微软的GitHub上有提供windows版本的redis安装包 redis中文网:http://www.redis.cn/ 微 ...

  8. linux 系统下IntelliJ IDEA的安装及使用

    由于刚刚进入研究生阶段,通过几个月对大数据的学习,从java到hadoop,再到scala到spark.在这我写一下我在ubuntu系统下intelliJ IDEA的安装和配置.首先我的ubuntu系 ...

  9. CentOS6.5系统下RPM包安装MySQL5.6(转)

    1.查看操作系统相关信息. [root@linuxidc ~]# cat /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m [root@ ...

随机推荐

  1. 1.pycharm使用

    太白金星的文档: https://www.cnblogs.com/jin-xin/articles/9811379.html 下载专业版,找破解码 一个python文件的开头如果有注视,必须是双引号的 ...

  2. TensorFlow中的Session、Graph、operation、tensor

    TensorFlow中的Session.Graph.operation.tensor

  3. JavaScript学习笔记 - 入门篇(1)- 准备

    为什么学习JavaScript 一.你知道,为什么JavaScript非常值得我们学习吗? 所有主流浏览器都支持JavaScript. 目前,全世界大部分网页都使用JavaScript. 它可以让网页 ...

  4. swoole使用异步redis

    1.lnmp安装redis拓展 wget http://download.redis.io/releases/redis-4.0.9.tar.gz chmod 755 redis-4.0.9.tar. ...

  5. python获取当前时间戳

    import time # 获取当前时间戳print(int(time.time()))

  6. PyTorch基础——迁移学习

    一.介绍 内容 使机器能够"举一反三"的能力 知识点 使用 PyTorch 的数据集套件从本地加载数据的方法 迁移训练好的大型神经网络模型到自己模型中的方法 迁移学习与普通深度学习 ...

  7. 论文翻译——Dynamic Pooling and Unfolding Recursive Autoencoders for Paraphrase Detection

    Dynamic Pooling and Unfolding Recursive Autoencoders for Paraphrase Detection 动态池和展开递归自动编码器的意译检测 论文地 ...

  8. BSC交流

    深圳建筑科学研究院 IT规划咨询项目 1999-2000年 平衡计分卡项目少 绩效管理 财务指标 考核 定量 考核国企 客户 产品 双重 市场 路径.方向的设计战略地图的工具,思维地图是怎么, 战略解 ...

  9. java数据库执行迁移报错Error creating bean with name 'flywayInitializer' defined in class path resource

    报错原因 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayI ...

  10. linux下用firefox打开csdn故障解决办法

    问题:浏览器打开csdn时博客浏览不全,没有了排版 解决办法: 1.下载一个安装包 命令:epel-release-7-11.noarch.rpm: epel-release-7-11.noarch ...