« RPM命令手册 | 首 页 | 「Rio」结束销售、从全球市场撤退 »

2005 年 08 月 26 日

RPM 操作 -- Tutorials, Tips & Tricks by and for Mandrake Linux users

| 分类: 服务器技术 Server Tech. |

RPM 操作 -- Tutorials, Tips & Tricks by and for Mandrake Linux users
http://people.linux.net.cn/xgwu/cmuo/basics/index.html

  • 一般操作

  • RPM有许多可选参数,幸好很容易从名称中联想到相应的用途。
    大多数参数都有两种名称(flavor):长名和短名。长名是两个连字符(hyphen),后跟参数的全名;短名只有一个连字符,后带一个字符(一般是全名的首字母)。当然,应用时您只需一种格式就够了,比如:rpm --install package或rpm -i package。


    如果RPM参数是文件名,您可以用 匹配模式 ,来指定多个文件,例如:

    rpm -i bla*

    该命令将安装所有当前目录下以字符串‘bla’开头的包。模糊格式对要求归档名作参数的操作无效,例如:

    rpm -e *gtk*
    error: package *gtk* is not installed

    有一点请记住,RPM 并不介意将要安装的包是在本地文件系统,还是在远程 web 或 FTP 服务器上。只要给出完整的 URL,就能对安装包进行远程操作,比如:

    rpm -qpi ftp://ftp.server.com/RPMS/bla*

    将获取在 ftp.server.com 的目录‘RPMS’中,以‘bla’开头的包的内容描述。

  • 安装,升级,卸载

  • 所有的这些命令需要‘root’权限。

    rpm -i package :安装(install)一个包,
    rpm -e archive :卸载(erase),
    rpm -U package :升级(upgrades)到新版本(包括安装新的包),
    rpm -F packages :更新(freshen)若干个包。先检查指定的包中哪些已安装,然后以合理的顺序更新这些包。
    有两个特殊的修正(modifier)可以和上述参数连用:‘--test’ 、‘--verbose’(或‘-v’)。

    ‘--test’ 只是以模拟(as if)的方式执行命令:您可以获得 RPM 执行时产生的所有信息,但是实际上命令没有真正执行,这个修正没有缩写形式。

    ‘--verbose’(-v) 会输出 RPM 运行时的冗余(verbose)信息。这一参数在检查错误或与‘--test’连用时特别有用。添加另一个‘-v’(‘-vv’)能输出更多的冗余信息。

  • 查询
  • 该命令不需要‘root’权限。请注意,当您查询一个未安装的包时,您需要将‘-p’参数与‘-q’连用。

    rpm -q archive :查询(query)包名和已安装包的版本号,
    rpm -q mc
    mc-4.5.51-7mdk

    rpm -qp package :同样是查询,但只针对未安装的包,
    rpm -qi archive :告知(inform)包的用途,由谁打包,何时、何地打包,这个包是什么时候安装的,包的大小,等等。要查询未安装的包,可运行 rpm -qpi package ,
    rpm -ql archive :列出(list)已安装包中的所有文件,
    rpm -qd archive :列出所有已安装包中的所有文档(documentation)文件,
    rpm -qa :列出所有( all)已安装的包,经常与‘grep’连用,
    rpm -qa --last :以安装日期为顺序列出所有包,最近安装的包在前,
    rpm -q --changelog archive :显示维护者对包的所有修改记录,
    rpm -qf file :显示该文件(file)属于哪个已安装的包。
    rpm -q up2date --requires : 查找up2date需要什么相关包

  • 高级查询

  • 再配合使用一些其他的小工具,及有些笨拙的‘--queryformat’可选项,您几乎可以在一个包,或本地 RPM 资料库中,查到所有可能的信息。

    找匹配的已安装包
    常见的问题:您想知道某个包是否已安装,但却记不清包的确切名称(或者是懒得敲入),可用:

    rpm -qa | grep -i pattern

    这里用了所谓的 管道(pipe) 和 grep 命令(‘i’可选项使得搜索不区分大小写)。所以,这样的命令

    rpm -qa | grep -i xfree

    将列出含有字符串‘xfree’的已安装包,并且不区分大小写。

    在未安装的包中找一个文件
    另一个常见问题是:哪个包里有这个文件?将 Mandrake CD 放到光驱中(我们假设在‘mnt/cdrom’目录下),键入

    for i in /mnt/cdrom/Mandrake/RPMS/*.rpm ; do rpm -qpli $i | grep filename && echo $i ; done

    如果这个指定文件(filename)在其中的某个包中,这个 for-do 循环将返回其名称。这样做可能有些乏味,没关系,在下一篇中,我们将介绍的 Mandrake Linux 中的‘urpm’,能漂亮地完成这一任务。

    将已安装的包按顺序列出
    如果您仔细阅读过第一篇中的介绍,就已经知道 RPM 工作要靠其说明文件。可选项‘--queryformat’使您可以在给定的 RPM 中,根据说明文件中单独的某个域(field),按任何顺序进行查询。键入

    rpm --querytags

    将列出所有可用的域,这种格式有些复杂,所以最好用例子来演示。
    假设您的硬盘空间紧张,想将已安装的包按大小列出,这样您就可以找出最好卸载哪个包,命令如下(在一行中):

    rpm -qa --queryformat '%{name} %{size}\n' | sort -n +1 | column -t

    是不是有点迷糊?;) 第一部分完成了所有工作:只按查询标签(querytags)‘name’和‘size’,对所有包进行查找,其中的标签格式是‘%{[tag]}’。由于查询标签字符串中包含空格,所以要用单引号括起来。其中‘\n’在每行添加一个回车(line break)。
    ‘sort’命令将输出排序结果(大的在后),‘column’将每行分成漂亮的两列:名称在左,比特为单位的大小在右。只要您记得这种特殊的查询标签格式,使用起来还是很不错的。

  • 参考链接:
    http://rpm.pbone.net/
  • (END)

    发表评论

    (如果您还为在此成功留言,也许是因为需要管理员逐一审核留言内容后放可看到您的评论。请稍后并感谢您的耐心等待。)

    阅览更多文章请访问 首页过去的存档