
rpm包
-
2023年2月19日发(作者:)RPM五种基本的操作⽅式
RPM有五种基本的操作⽅式(不包括创建软件包):安装,卸载,升级,查询,和验证。下⾯我们就来逐⼀的讲解吧。
⼀、安装RPM包
RPM软件包通常具有类似的⽂件名。其中包括软件包的名称(foo),版本号(1.0),发⾏号(1),和硬件平台(i386)。安装
⼀个软件包只需简单的键⼊以下命令:
$
foo
RPM安装完毕后会打印出软件包的名字(并不⼀定与⽂件名相同),⽽后打印⼀连串的#号以表⽰安装进度。虽然软件包的安装被设计的尽量
简单易⾏,但还是可能会发⽣如下的错误:
1、软件包已被安装
如果您的软件包已被安装,将会出现以下信息:
$
foopackagefoo-1.0-1isalreadyinstalled
error:notbeinstalled
如果您仍旧要安装该软件包,可以在命令⾏上使⽤--replacepkgs选项,RPM将忽略该错误信息强⾏安装。
2、⽂件冲突
如果您要安装的软件包中有⼀个⽂件已在安装其它软件包时安装,会出现以下错误信息:
#
foo/usr/bin/fooconflictswithfilefrombar-1.0-1
error:notbeinstalled
要想让RPM忽略该错误信息,请使⽤--replacefiles命令⾏选项。
3、未解决依赖关系
RPM软件包可能依赖于其它软件包,也就是说要求在安装了特定的软件包之后才能安装该软件包。如果在您安装某个软件包时存在这种未解
决的依赖关系。会产⽣以下信息:
$
faileddependencies:fooisneededbybar-1.0-1
您必须安装完所依赖的软件包,才能解决这个问题。如果您想强制安装(这是个坏主意,因为安装后的软件包未必能正常运⾏),请使⽤--
nodeps命令⾏选项。
⼆、卸载RPM包
卸载软件包就象安装软件包时⼀样简单:
$rpm-efoo
注意这⾥使⽤软件包的名字name``foo,⽽不是软件包⽂件的名字file``。如果其它软件包依赖于您要卸载的软件包,卸载
时则会产⽣错误信息。如:
$rpm-efoo
removingthesepackageswouldbreakdependencies:fooisneededbybar-1.0-1
若让RPM忽略这个错误继续卸载(这可不是⼀个好主意,因为依赖于该软件包的程序可能⽆法运⾏),请使⽤--nodeps命令⾏选项。
三、升级RPM包
升级软件包和安装软件包⼗分类似:.
$
foo
RPM将⾃动卸载已安装的⽼板本的foo软件包,您不会看到有关信息。事实上您可能总是使⽤-U来安装软件包,因为即便以往未安装过该
软件包,也能正常运⾏。因为RPM执⾏智能化的软件包升级,
⾃动处理配置⽂件,您将会看到如下信息:
saving/etc//etc/e
这表⽰您对配置⽂件的修改不⼀定能向上兼容。因此,RPM会先备份⽼⽂件再安装新⽂件。您应当尽快解决这两个配置⽂件的不同之处,
以使系统能持续正常运⾏。
因为升级实际包括软件包的卸载与安装两个过程,所以您可能会碰到由这两个操作引起的错误。另⼀个你可能碰到的问题是:当您使⽤旧版
本的软件包来升级新版本的软件时,RPM会产⽣以下错误信息:
$
foopackagefoo-2.0-1(whichisnewer)isalreadyinstalled
error:notbeinstalled
如果你确有需要将该软件包”降级,加⼊--oldpackage命令选项就可以了。
四、查询已安装的软件包
使⽤命令rpm-q来查询已安装软件包的数据库。简单的使⽤命令rpm-qfoo会打印出foo软件包的包名,
版本号,和发⾏号:
$rpm-qfoo
foo-2.0-1
除了指定软件包名以外,您还可以使⽤以下选项来指明要查询哪些软件包的信息。这些选项被称之为“软件包指定选项“。
·-a查询所有已安装的软件包
·-f将查询包含有⽂件.的软件包
·-p查询软件包⽂件名为的软件包
还可以指定查询软件包时所显⽰的信息。它们被称作信息选择选项:
·-i显⽰软件包信息,如描述,发⾏号,尺⼨,构建⽇期,安装⽇期,平台,以及其它⼀些各类信息。
·-l显⽰软件包中的⽂件列表。
·-s显⽰软件包中所有⽂件的状态。
·-d显⽰被标注为⽂档的⽂件列表(man⼿册,info⼿册,READMEs,etc)。
·-c显⽰被标注为配置⽂件的⽂件列表。这些是您要在安装完毕以后加以定制的⽂件(,
passwd,inittab,etc)。
对于那些要显⽰⽂件列表的⽂件,您可以增加-v命令⾏选项以获得如同ls-l格式的输出。
五、验证软件包
验证软件包是通过⽐较已安装的⽂件和软件包中的原始⽂件信息来进⾏的。验证主要是⽐较⽂件的尺⼨,MD5校验码,⽂件权限,类型,属主和
⽤户组等。
rpm-V命令⽤来验证⼀个软件包。您可以使⽤任何包选择选项来查询您要验证的软件包。命令rpm-Vfoo
将⽤来验证foo软件包。⼜如:
·验证包含特定⽂件的软件包:
rpm-Vf/bin/vi
·验证所有已安装的软件包:
rpm-Va
·根据⼀个RPM包来验证:
如果您担⼼你的RPM数据库已被破坏,就可以使⽤这种⽅式。
如果⼀切均校验正常将不会产⽣任何输出。如果有不⼀致的地⽅,就会显⽰出来。输出格式是8位长字符
串,``c⽤以指配置⽂件,接着是⽂件名.8位字符的每⼀个⽤以表⽰⽂件与RPM数据库中⼀种属性的⽐较
结果。``.(点)表⽰测试通过。.下⾯的字符表⽰对RPM软件包进⾏的某种测试失败:
显⽰字符错误源
5MD5校验码
S⽂件尺⼨
L符号连接
T⽂件修改⽇期
D设备
U⽤户
G⽤户组
M模式e(包括权限和⽂件类型)
如果有错误信息输出,您应当认真加以考虑,是通过删除还是重新安装来解决出现的问题。
六、教你⼀招
RPM不仅是安装/卸载程序的⼯具,它还是系统维护和诊断的⼀把好⼿。看过下⾯⼏个例⼦你就会领教它的
厉害了。
·如果您误删了⼀些⽂件,但您不能肯定到底都删除了那些⽂件,怎么办?您可以键⼊:
rpm-Va
rpm会在屏幕上显⽰出⽂件删除的情况。若你发现⼀些⽂件丢失了或已被损坏,您就可以重新安装或先卸载
再安装该软件包。
·如果您碰到了⼀个⾃⼰不认识的⽂件,要想查处它属于哪个软件包,您可以输⼊以下命令
rpm-qf/usr/X11R6/bin/xjewel
输出的结果会是:
xjewel-1.6-1
·如果发⽣综合以上两个例⼦的情况,如⽂件/usr/bin/paste出了问题。您想知道哪个软件包中包含该⽂
件,您这时可以简单的键⼊:
rpm-Vf/usr/bin/paste
·如果您想了解正在使⽤的程序的详细信息,您可以键⼊如下命令来获得软件包中关于该程序的⽂档信息:
rpm-qdf/usr/bin/ispell
输出结果为:
/usr/man/man4/ispell.4
/usr/man/man4/english.4
/usr/man/man1/unsq.1
/usr/man/man1/tryaffix.1
/usr/man/man1/sq.1
/usr/man/man1/munchlist.1
/usr/man/man1/ispell.1
/usr/man/man1/findaffix.1
/usr/man/man1/buildhash.1
/usr/info/
/usr/doc/ispell-3.1.18-1/README
·您发现了⼀个新的koulesRPM,但您不知道它是做什么的,您可以键⼊如下命令:
·现在您想了解koules的RPM包在系统⾥安装了哪些⽂件,您可以键⼊:
输出结果为:
/usr/man/man6/koules.6
/usr/lib/games/kouleslib/
/usr/lib/games/kouleslib/
/usr/lib/games/kouleslib/
/usr/lib/games/kouleslib/
/usr/lib/games/kouleslib/
/usr/lib/games/kouleslib/
/usr/lib/games/kouleslib/
/usr/lib/games/kouleslib
/usr/games/koules
以上只是⼏个常见例⼦。随着您进⼀步的使⽤RPM,您会发现它的各种功能选项组合可以实现更为强⼤的RPM包管理功能。