📄 doc061.htm
字号:
<HTML>
<HEAD>
<TITLE>Using RPM</TITLE>
</HEAD>
<BODY>
<P><A HREF="doc062.htm"><IMG SRC="next.gif" ALT="Next" HEIGHT=24 WIDTH=37></A>
<A HREF="doc000.htm"><IMG SRC="up.gif" ALT="Up" HEIGHT=24 WIDTH=26></A>
<A HREF="doc060.htm"><IMG SRC="previous.gif" ALT="Previous" HEIGHT=24 WIDTH=63></A>
<A HREF="doc000.htm"><IMG SRC="contents.gif" ALT="Contents" HEIGHT=24 WIDTH=65></A>
<A HREF="doc136.htm"><IMG SRC="index.gif" ALT="Index" HEIGHT=24 WIDTH=43></A>
<HR></P>
<H2><A NAME="s8.2"></A>8.2 使用RPM</H2>
<P><A NAME="i472"></A></P>
<P>RPM 有五种基本的操作方式(不包括创建软件包): 安装, 卸载, 升级, 查询,和验证。
本节简要的描述了这五种操作。使用命令 <TT>rpm --help</TT>, 或查阅第<A HREF="doc063.htm#s8.4">8.4</A>
节以获得更为全面的信息。</P>
<H3><A NAME="s8.2.1"></A>8.2.1 安装</H3>
<P><A NAME="i473"></A><A NAME="i474"></A></P>
<P>RPM 软件包通常具有类似<TT>foo-1.0-1.i386.rpm</TT> 的文件名。其中包括
软件包的名称(<TT>foo</TT>), 版本号(<TT>1.0</TT>), 发行号(<TT>1</TT>), 和
硬件平台(<TT>i386</TT>). 安装一个软件包只需简单的键入以下命令:</P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>$ rpm -ivh foo-1.0-1.i386.rpm
foo ####################################</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>正如您所看到的, RPM 将会打印出软件包的名字(并不一定与文件名相同), 而后
打印一连串的#号以表示安装进度。</P>
<P>软件包的安装被设计的尽量简单易行, 但是可能会发生几个错误:: </P>
<H4><A NAME="s8.2.1.1"></A>8.2.1.1 软件包已被安装</H4>
<P>如果您的软件包已被安装, 将会出现以下信息: </P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>$ 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</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>如果您仍旧要安装该软件包, 您可以在命令行上使用<TT>--replacepkgs</TT>
选项,这将忽略
该错误信息。</P>
<H4><A NAME="s8.2.1.2"></A>8.2.1.2 文件冲突</H4>
<P><A NAME="i475"></A></P>
<P>如果您要安装的软件包中有一个文件已在安装其它软件包时安装,会出现以下错误信息:</P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1># 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</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>要想让RPM 忽略该错误信息, 请使用<TT>--replacefiles</TT> 命令行选项。.
</P>
<H4><A NAME="s8.2.1.3"></A>8.2.1.3 未解决依赖关系</H4>
<P><A NAME="i476"></A><A NAME="i477"></A></P>
<P>RPM软件包可能依赖于其它软件包,也就是说要求在安装了特定的软件包之后才能安装
该软件包。如果在您安装某个软件包时存在这种未解决的依赖关系。会产生以下信息:</P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>$ rpm -ivh bar-1.0-1.i386.rpm
failed dependencies:
foo is needed by bar-1.0-1</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>您必须安装完所依赖的软件包,才能解决这个问题。如果您想强制安装(这是个坏主意,
因为安装后的软件包未必能正常运行), 请使用<TT>--nodeps</TT> 命令行选项。
</P>
<H3><A NAME="s8.2.2"></A>8.2.2 卸载</H3>
<P><A NAME="i478"></A><A NAME="i479"></A></P>
<P>卸载软件包就象安装软件包时一样简单: </P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>$ rpm -e foo</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P><I>注意这里使用软件包的名字name</I> ``<TT>foo</TT>'', 而不是软件包文件的名字<I>file
</I>``<TT>foo-1.0-1.i386.rpm</TT>''. </P>
<P>如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。如:</P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>$ rpm -e foo
removing these packages would break dependencies:
foo is needed by bar-1.0-1</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>要想RPM忽略该错误信息继续卸载的话(这可不是一个好主意 ,因为依赖于该软件包的程序可能无法运行),
请使用<TT>--nodeps</TT> 命令行选项.</P>
<H3><A NAME="s8.2.3"></A>8.2.3 升级</H3>
<P><A NAME="i480"></A><A NAME="i481"></A></P>
<P>升级软件包和安装软件包十分类似:. </P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>$ rpm -Uvh foo-2.0-1.i386.rpm
foo ####################################</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>RPM将自动卸载已安装的老板本的<TT>foo</TT> 软件包,您不会看到有关信息。事实上您可能
总是使用 <TT>-U</TT> 来安装软件包, 因为即便以往未安装过该软件包,也能正常运行。</P>
<P>因为RPM 执行智能化的软件包升级,自动处理配置文件,您将会看到如下信息:<A NAME="i482"></A><A NAME="i483"></A></P>
<BLOCKQUOTE>
<P><TT><FONT SIZE=-1>saving /etc/foo.conf as /etc/foo.conf.rpmsave
</FONT></TT>这表示您对配置文件的修改不一定能向上兼容于该软件包中的配置文件。
因此,RPM 会备份老文件,安装新文件。您应当尽快解决这两个配置文件的不同之处,以使
系统能持续正常运行。</P>
</BLOCKQUOTE>
<P>因为升级其实就是软件包的卸载与安装的综合,您可能会遇见那些操作中所可能发生
的错误。有一处不同,那就是当您使用旧版本的软件包来升级新版本的软件时,会
产生以下错误信息:</P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>$ 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</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>要使RPM 坚持这样“升级”,就使用 <TT>--oldpackage</TT> 命令行参数。</P>
<H3><A NAME="s8.2.4"></A>8.2.4 查询</H3>
<P><A NAME="i484"></A><A NAME="i485"></A></P>
<P>使用命令rpm -q来查询已安装软件包的数据库。简单的使用命令 <TT>rpm -q
foo</TT> 会打印出foo软件包 的包名 ,版本号,和发行号:</P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>$ rpm -q foo
foo-2.0-1</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>除了指定软件包名以外,您还可以连同-q使用以下选项来指明要查询哪些软件包的信息。
这些选项被称之为 “软件包指定选项“: </P>
<UL>
<LI><TT>-a</TT> 查询所有已安装的软件包. </LI>
<LI><TT>-f <file></TT> 将查询包含有文件<file>. 的软件包</LI>
<LI><TT>-p <packagefile></TT> 查询软件包文件名为<packagefile>.
的软件包</LI>
</UL>
<P>有几种方式来指定查询软件包时所显示的信息。以下选项用于选择您感兴趣的信息
进行显示。它们被称作信息选择选项: </P>
<UL>
<LI><TT>-i</TT> 显示软件包信息,如描述, 发行号, 尺寸, 构建日期, 安装日期,
平台, 以及其它一些各类信息。</LI>
<LI><TT>-l</TT> 显示软件包中的文件列表。</LI>
<LI><TT>-s</TT> 显示软件包中所有文件的状态。. </LI>
<LI><TT>-d</TT> 显示被标注为文档的文件列表(man 手册, info 手册, README's,
etc). </LI>
<LI><TT>-c</TT> 显示被标注为配置文件的文件列表。这些是您要在安装完毕以后加以
定制的文件(sendmail.cf, passwd, inittab, etc). </LI>
</UL>
<P>对于那些要显示文件列表的文件, 您可以增加<TT>-v</TT> 命令行选项以获得如同
<TT>ls -l</TT> 格式
的输出。. </P>
<H3><A NAME="s8.2.5"></A>8.2.5 验证</H3>
<P><A NAME="i486"></A><A NAME="i487"></A>验证软件包是通过比较compares从软件包中安装的文件和软件包中的原始
文件信息来进行的。除了其它一些东西,验证主要是比较文件的尺寸, MD5 校验码,
文件权限, 类型, 属主和用户组等。 </P>
<P><TT>rpm-V</TT>命令用来验证一个软件包。您可以使用任何包选择选项来查询您要验证的软件包
<TT>命令rpm -V foo</TT> 将用来验证foo软件包。又如:</P>
<UL>
<LI>验证包含特定文件的软件包: </LI>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>rpm -Vf /bin/vi</FONT></TT>
</PRE>
</BLOCKQUOTE>
<LI>验证所有已安装的软件包: </LI>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>rpm -Va</FONT></TT>
</PRE>
</BLOCKQUOTE>
<LI>根据一个RPM来验证某个软件包: </LI>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>rpm -Vp foo-1.0-1.i386.rpm</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>如果您担心你的RPM数据库已被破坏,就可以使用这种方式。. </P>
</UL>
<P>如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。
输出格式是8位长字符串, ``c'' 用以指配置文件, 接着是文件名. 8位字符的每一个
用以表示文件与RPM数据库中一种属性的比较结果 。``.'' (点) 表示测试通过。.以下字符表示某种测试的失败:</P>
<DL>
<DT><B>5</B></DT>
<DL>
<DT><B>MD5 校验码</B></DT>
</DL>
<DT><B>S</B></DT>
<DD>文件尺寸</DD>
<DT><B>L</B></DT>
<DD>符号连接</DD>
<DT><B>T</B></DT>
<DD>文件修改日期</DD>
<DT><B>D</B></DT>
<DD>设备</DD>
<DT><B>U</B></DT>
<DD>用户</DD>
<DT><B>G</B></DT>
<DD>用户组</DD>
<DT><B>M</B></DT>
<DD>模式e (包括权限和文件类型) </DD>
</DL>
<P>如果有信息输出, 您应当认真加以考虑,是删除,重新安装,还是修正出现的问题。</P>
<P>
<HR><A HREF="doc062.htm"><IMG SRC="next.gif" ALT="Next" HEIGHT=24 WIDTH=37></A>
<A HREF="doc000.htm"><IMG SRC="up.gif" ALT="Up" HEIGHT=24 WIDTH=26></A>
<A HREF="doc060.htm"><IMG SRC="previous.gif" ALT="Previous" HEIGHT=24 WIDTH=63></A>
<A HREF="doc000.htm"><IMG SRC="contents.gif" ALT="Contents" HEIGHT=24 WIDTH=65></A>
<A HREF="doc136.htm"><IMG SRC="index.gif" ALT="Index" HEIGHT=24 WIDTH=43></A>
<HR></P>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -