安装软件包
rpm-i包全名
删除
rpm-ename(不是包名)
参数
-ivh获得一个详细的安装进程
--nodeps忽略依赖关系
--force强制安装
-U包名:升级安装
-F更新不管是什么直接覆盖
--replacepkgs这样RPM将忽略该错误信息-vih--replacepkgs
-qname:查询
-qa查询所有已安装的RPM
-qiname查询这个软件详细信息
-ql显示列表
-qfpath:查询一个文件属于哪个包
-qp包名:查文件是什么
-qpl包名:针对一个没装过的包
rpm-qc配置文件
效验rpm-Va
rpm-Vf/bin/ls
rpm-Vp包名
5--MD5校验和
S--文件长度
L--符号链接
T--文件修改日期
D--设备
U--用户
G--用户组
M--模式(包含许可和文件类型)
?--不可读文件
详细课程
使用RPM
RPM有五个基本的操作模式(不包括包的编译):安装,卸载,升级,查询,校验。本节将对它们一一介绍。要了解完整的细节和选项,可以使用rpm--help,或转到thesectioncalled其它RPM资源得到更多关于RPM的信息。
1安装
典型的RPM有着类似foo-1.0-1.i386.rpm这样的名称,其中指明了包名(foo),版本号(1.0),发行号(1),和硬件平台(i386)。安装一个软件包只需简单的键入以下命令:
#rpm-ivhfoo-1.0-1.i386.rpm
foo####################################
#
正如您所看到的,RPM将会打印出软件包的名字(并不一定要与文件名相同,可能是1.rpm),而后打印出一连串的#号以表示安装进度。
请注意
尽管通常是使用rpm-ivhfoo-1.0-1.i386.rpm来安装包,但也可以用rpm-Uvhfoo-1.0-1.i386.rpm来替代。-U是包升级参数,也可以用来安装新包。参看升级有关RPM中-U参数的详细使用情况。
软件包的安装设计非常简单,但还是有可能发生以下错误:
软件包已被安装
如果软件包已被安装,会出现以下信息:
#rpm-ivhfoo-1.0-1.i386.rpm
foopackagefoo-1.0-1isalreadyinstalled
error:foo-1.0-1.i386.rpmcannotbeinstalled
#
如果仍要安装该包,可以在命令行中使用--replacepkgs选项,这样RPM将忽略该错误信息:
#rpm-ivh--replacepkgsfoo-1.0-1.i386.rpm
foo####################################
#
文件冲突
如果要安装的软件包中有一个文件已在安装其它包时被安装,会显示以下信息:
#rpm-ivhfoo-1.0-1.i386.rpm
foo/usr/bin/fooconflictswithfilefrombar-1.0-1
error:foo-1.0-1.i386.rpmcannotbeinstalled
#
要想让RPM忽略该错误信息,请使用--replacefiles命令行选项:
#rpm-ivh--replacefilesfoo-1.0-1.i386.rpm
foo####################################
#
未解决依赖关系
一个RPM包可能会"依赖"其它软件包,也就是说要求在安装了特定的软件包之后才能安装该软件包。如果在安装这个软件包时未解决这种存在的依赖关系,会看到:
#rpm-ivhbar-1.0-1.i386.rpm
faileddependencies:
fooisneededbybar-1.0-1
#
只有先安装完所依赖的软件包,才能解决这个问题。如果想强制安装(这不是个好办法,因为安装后的软件包未必能正常运行),可以使用--nodeps命令行选项。
3.2.2卸载
卸载软件包就象安装软件包时一样简单:
#rpm-efoo
#
请注意
注意这里使用软件包的名字"foo",而不是原始软件包的文件名"foo-1.0-1.i386.rpm"。卸载软件包时,需要用原始包的实际文件名替换foo包名。
在卸载某个软件包时,可能会发生依赖关系错误,这说明其它包与此包之间有安装依赖关系。例如:
#rpm-efoo
removingthesepackageswouldbreakdependencies:
fooisneededbybar-1.0-1
#
要使RPM在卸载此包时忽略该错误(这不是个好办法,因为卸载后,与它有依赖关系的软件包未必能正常运行),使用--nodeps命令行选项。
3.2.3升级
升级软件包和安装软件包十分类似。
#rpm-Uvhfoo-2.0-1.i386.rpm
foo####################################
#
RPM将自动卸载已安装的老版本的foo软件包,用户无法看到有关信息。事实上用户可能总是使用-U来安装软件包,因为即便以往未安装过该软件包,也能正常运行。
因为RPM执行智能化的软件包升级,自动处理配置文件,会显示如下信息:
saving/etc/foo.confas/etc/foo.conf.rpmsave
这表示用户对配置文件的修改,不一定能"向上兼容"该软件包中的配置文件。因此,RPM会备份原始的文件,再安装新文件。用户应当尽快解决这两个配置文件的不同之处,以便系统能持续正常运行。
因为升级其实就是软件包的卸载与安装的综合,也可能会遇见那些操作中所可能发生的错误。再有就是:在使用旧版本的RPM软件包来升级新版本的软件时,会产生以下信息:
#rpm-Uvhfoo-1.0-1.i386.rpm
foopackagefoo-2.0-1(whichisnewer)isalreadyinstalled
error:foo-1.0-1.i386.rpmcannotbeinstalled
#
要使用RPM强行"升级",请使用--oldpackage命令行参数:
#rpm-Uvh--oldpackagefoo-1.0-1.i386.rpm
foo####################################
#
3.2.4更新
包的更新与包升级相似:
#rpm-Fvhfoo-1.2-1.i386.rpm
foo####################################
#
RPM更新选项,是检查命令行中指明的包版本与安装在系统中的包版本是否一致。当RPM更新选项处理完已安装包的新版本时,该包会升级到新版本。但是,RPM更新选项无法安装系统目前没有的软件包。这与RPM升级不同,升级选项能够安装软件包,无论旧版本的包是否已安装。
RPM更新选项可以很好的更新一个软件包或一组软件包。如果用户下载了大量的软件包,但只想升级系统中已有的包时,RPM更新选项会非常有用。使用RPM更新选项意味着你无需从下载的包中挑挑拣拣,也不用事先删除不要的包。
这种情况下,只需简单的键入:
#rpm-Fvh*.rpm
RPM工具会自动升级那些已经安装好的包。
3.2.5查询
使用命令rpm-q来查询已安装软件包的数据库。简单的使用命令rpm-qfoo会打印出foo软件包的包名、版本号和发行号:
#rpm-qfoo
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-Vfoo可以校验foo包中原始安装时的所有文件。例如:
校验包含特定文件的软件包:rpm-Vf/bin/vi
校验所有已安装的软件包:rpm-Va
用RPM包文件校验已安装的软件包:rpm-Vpfoo-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,或转到thesectioncalled其它RPM资源得到更多关于RPM的信息。
3.2.1安装
典型的RPM有着类似foo-1.0-1.i386.rpm这样的名称,其中指明了包名(foo),版本号(1.0),发行号(1),和硬件平台(i386)。安装一个软件包只需简单的键入以下命令:
#rpm-ivhfoo-1.0-1.i386.rpm
foo####################################
#
正如您所看到的,RPM将会打印出软件包的名字(并不一定要与文件名相同,可能是1.rpm),而后打印出一连串的#号以表示安装进度。
请注意
尽管通常是使用rpm-ivhfoo-1.0-1.i386.rpm来安装包,但也可以用rpm-Uvhfoo-1.0-1.i386.rpm来替代。-U是包升级参数,也可以用来安装新包。参看升级一节有关RPM中-U参数的详细使用情况。
软件包的安装设计非常简单,但还是有可能发生以下错误:
软件包已被安装
如果软件包已被安装,会出现以下信息:
#rpm-ivhfoo-1.0-1.i386.rpm
foopackagefoo-1.0-1isalreadyinstalled
error:foo-1.0-1.i386.rpmcannotbeinstalled
#
如果仍要安装该包,可以在命令行中使用--replacepkgs选项,这样RPM将忽略该错误信息:
#rpm-ivh--replacepkgsfoo-1.0-1.i386.rpm
foo####################################
#
文件冲突
如果要安装的软件包中有一个文件已在安装其它包时被安装,会显示以下信息:
#rpm-ivhfoo-1.0-1.i386.rpm
foo/usr/bin/fooconflictswithfilefrombar-1.0-1
error:foo-1.0-1.i386.rpmcannotbeinstalled
#
要想让RPM忽略该错误信息,请使用--replacefiles命令行选项:
#rpm-ivh--replacefilesfoo-1.0-1.i386.rpm
foo####################################
#
未解决依赖关系
一个RPM包可能会"依赖"其它软件包,也就是说要求在安装了特定的软件包之后才能安装该软件包。如果在安装这个软件包时未解决这种存在的依赖关系,会看到:
#rpm-ivhbar-1.0-1.i386.rpm
faileddependencies:
fooisneededbybar-1.0-1
#
只有先安装完所依赖的软件包,才能解决这个问题。如果想强制安装(这不是个好办法,因为安装后的软件包未必能正常运行),可以使用--nodeps命令行选项。
3.2.2卸载
卸载软件包就象安装软件包时一样简单:
#rpm-efoo
#
请注意
注意这里使用软件包的名字"foo",而不是原始软件包的文件名"foo-1.0-1.i386.rpm"。卸载软件包时,需要用原始包的实际文件名替换foo包名。
在卸载某个软件包时,可能会发生依赖关系错误,这说明其它包与此包之间有安装依赖关系。例如:
#rpm-efoo
removingthesepackageswouldbreakdependencies:
fooisneededbybar-1.0-1
#
要使RPM在卸载此包时忽略该错误(这不是个好办法,因为卸载后,与它有依赖关系的软件包未必能正常运行),使用--nodeps命令行选项。
3.2.3升级
升级软件包和安装软件包十分类似。
#rpm-Uvhfoo-2.0-1.i386.rpm
foo####################################
#
RPM将自动卸载已安装的老版本的foo软件包,用户无法看到有关信息。事实上用户可能总是使用-U来安装软件包,因为即便以往未安装过该软件包,也能正常运行。
因为RPM执行智能化的软件包升级,自动处理配置文件,会显示如下信息:
saving/etc/foo.confas/etc/foo.conf.rpmsave
这表示用户对配置文件的修改,不一定能"向上兼容"该软件包中的配置文件。因此,RPM会备份原始的文件,再安装新文件。用户应当尽快解决这两个配置文件的不同之处,以便系统能持续正常运行。
因为升级其实就是软件包的卸载与安装的综合,也可能会遇见那些操作中所可能发生的错误。再有就是:在使用旧版本的RPM软件包来升级新版本的软件时,会产生以下信息:
#rpm-Uvhfoo-1.0-1.i386.rpm
foopackagefoo-2.0-1(whichisnewer)isalreadyinstalled
error:foo-1.0-1.i386.rpmcannotbeinstalled
#
要使用RPM强行"升级",请使用--oldpackage命令行参数:
#rpm-Uvh--oldpackagefoo-1.0-1.i386.rpm
foo####################################
#
3.2.4更新
包的更新与包升级相似:
#rpm-Fvhfoo-1.2-1.i386.rpm
foo####################################
#
RPM更新选项,是检查命令行中指明的包版本与安装在系统中的包版本是否一致。当RPM更新选项处理完已安装包的新版本时,该包会升级到新版本。但是,RPM更新选项无法安装系统目前没有的软件包。这与RPM升级不同,升级选项能够安装软件包,无论旧版本的包是否已安装。
RPM更新选项可以很好的更新一个软件包或一组软件包。如果用户下载了大量的软件包,但只想升级系统中已有的包时,RPM更新选项会非常有用。使用RPM更新选项意味着你无需从下载的包中挑挑拣拣,也不用事先删除不要的包。
这种情况下,只需简单的键入:
#rpm-Fvh*.rpm
RPM工具会自动升级那些已经安装好的包。
3.2.5查询
使用命令rpm-q来查询已安装软件包的数据库。简单的使用命令rpm-qfoo会打印出foo软件包的包名、版本号和发行号:
#rpm-qfoo
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-Vfoo可以校验foo包中原始安装时的所有文件。例如:
校验包含特定文件的软件包:rpm-Vf/bin/vi
校验所有已安装的软件包:rpm-Va
用RPM包文件校验已安装的软件包:rpm-Vpfoo-1.0-1.i386.rpm
如果担心RPM数据库被破坏,就可以使用这种方式加以校验。
如果校验结果一切正常,将不会产生任何输出。如果有不一致的地方,会显示出来。输出格式是8位长字符串,"c"用以指配置文件,接着是文件名。8位长字符,每个代表一个文件属性与RPM数据库中记录的属性相比较的结果。"."(点)表示测试通过。下面的字符代表某测试的失败:
5--MD5校验和
S--文件长度
L--符号链接
T--文件修改日期
D--设备
U--用户
G--用户组
M--模式(包含许可和文件类型)
?--不可读文件
如果有信息输出,用户应当认真加以考虑,是该删除、重新安装、还是修正出现的问题。