详细课程

使用 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. Web应用和web.xml文件

    1.构建Web应用 手动构建一个Web应用: 在任意的目录小创建一个文件夹,例如webDemo 在第一步创建的文件夹中创建一个WEB-INF文件夹(注意大写); 随意找到一个Web应用,将其中的web ...

  2. SpringSecurity过滤器顺序

    https://blog.csdn.net/qq_35720307/article/details/97656608 org.springframework.security.config.annot ...

  3. 吴裕雄--天生自然TensorFlow高层封装:Estimator-自定义模型

    # 1. 自定义模型并训练. import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist i ...

  4. ZJNU 1699 - Bits

    可得应当优先寻找最大的2^n-1这个数 如果l的位数不等于r的位数,那么这个数 2^n-1 就是最优解(每一位全为1) 如果l和r的位数相同,先看r是否符合 2^n-1,符合直接返回,不符合的话拆除最 ...

  5. JavaScript学习笔记 - 进阶篇(7)- 浏览器对象

    window对象 window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 注意:在JavaScript基础篇中,已讲解了部分属性,window对象重点讲解计时器. ...

  6. Java8必知必会

    Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包. 流(stream)就如同迭代器(iterator),但附 ...

  7. textField 总结

    /* 通知使用,可以通过接受系统通知来做一些事情 UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用.除了UIControl类的标准事件,你还可 ...

  8. 33)new和delete关键字

    ---------------------------------------------------------------------------------------------------- ...

  9. C语言中“段错误”出现的场景

    1.第一种“段错误”出现的场景 1 /************************************************************************* > Fi ...

  10. 量化投资_轻松实现MATLAB蒙特卡洛方法建模

    1 目录 * MATLAB随机数的产生 - Uniform,Normal & Custom distributions * 蒙特卡洛仿真 * 产生股票价格路径 * 期权定价 - 经典公式 - ...