Page 1

基本 yum 命令和用法

这不是一个 yum 命令的详细列表而是一些基本的,通用的,重要的一些。想要获得详细

列表请查看帮助页面

● yum list [available|installed|extras|updates|obsoletes|all|recent] [pkgspec]

使用这个命令你可以列出任何在你系统上启用或者安装的仓库里的软件包。它还可

以列出指定类型的软件包,还可以用包的名字,架构,版本,发行日期作为软件包的规范重

新定义你的列表。

● yum list

默认情况下无参数的‘yum list‘列出在所有软件仓库里的和系统安装的所有的软件包。

注意:‘yum list' 和‘yum list all'的结果是一样的。

● yum list available

列出在所有可用的软件仓库里可以安装的软件包

● yum list installed

这个命令和 rpm -qa 的功能是一样的,可以列出系统上安装的软件列表

● yum list extra

这个命令获得在系统上安装但是没有出现在激活的软件仓库里的软件包列表。用于

寻找等待升级或者不是从 fedora 更新镜像上安装的软件包。

● yum list obsoletes

这个命令列出系统上安装但是被软件仓库废除的软件包列表

● yum list updates

这个命令列出已安装的可升级的软件包列表

● yum list recent

1

Page 2

这个命令列出最近 7 天加入的软件包列表

● yum list pkgspec

这个命令允许你自定义软件包列表

pkgspec 的例子

? yum list zsh //会列出包 zsh 的详细信息,比如有没有安装,包的架构,软件仓库等。

? yum list joe\*

? yum list \*.i386 //根据通配符列出符合要求的列表

● yum install/remove/update

......

● yum check-update

很像 yum list updates 但是如果有可用更新的话会返回退出代号 100。方便写 shell 脚本

? yum grouplist

? yum groupinfo

? yum groupinstall

? yum groupupdate

? yum groupremove

要想查看上面的命令信息请查看 YumGroups 页面

● yum info

显示已安装或者可获得的软件包详细信息,它可以使用和 yum list 一样的参数但最好

为它指定一个软件包名,例如:

$ yum info yum

Installed Packages

Name : yum

Arch : noarch

Version : 3.2.20

Release : 3.fc10

Size : 2.5 M

Repo : installed

Summary : RPM installer/updater

URL : http://yum.baseurl.org/

License : GPLv2+

Description: Yum is a utility that can check for and automatically download and

: install updated RPM packages. Dependencies are obtained and downloaded

: automatically prompting the user as necessary.

2

Page 3

● yum search

这个命令可以根据各种元数据查找软件包的信息。它可以接受多个参数.它根据提供信息

的最高匹配次数输出符合要求的软件包信息列表.yum search 主要查找以下域:name(名

字),summary(摘要),description(描述),url.如果你想查找什么软件包提供某一个命令,请使用

yum provides.

yum search 的例子:

$ yum search python rsync ssh

========================= Matched: python, rsync, ssh

==========================

rdiff-backup.i386 : Convenient and transparent local/remote incremental

: mirror/backup

============================ Matched: python, rsync

============================

cobbler.noarch : Boot server configurator

============================= Matched: python, ssh

=============================

denyhosts.noarch : A script to help thwart ssh server attacks

pexpect.noarch : Pure Python Expect-like module

python-paramiko.noarch : A SSH2 protocol library for python

python-twisted-conch.i386 : Twisted SSHv2 implementation

============================= Matched: rsync, ssh

==============================

duplicity.i386 : Encrypted bandwidth-efficient backup using rsync algorithm

pssh.noarch : Parallel SSH tools

● yum provides/yum whatprovides

这个命令可以查找哪个软件包提供请求的相关内容,可以使用通配符。例如:

$ yum provides MTA

2ostfix-2.5.5-1.fc10.i386 : Postfix Mail Transport Agent

Matched from:

Other : MTA

exim-4.69-7.fc10.i386 : The exim mail transfer agent

Matched from:

Other : MTA

sendmail-8.14.3-1.fc10.i386 : A widely used Mail Transport Agent (MTA)

3

Page 4

Matched from:

Other : Provides-match: MTA

$ yum provides \*bin/ls

coreutils-6.12-17.fc10.i386 : The GNU core utilities: a set of tools commonly

: used in shell scripts

Matched from:

Filename : /bin/ls

yum shell

......

● yum clean

在正常使用 yum 时,会产生一些元数据和软件包的缓存,这些缓存会占用一定的空

间。yum clean 命令可以清除这些缓存文件。yum clean 处理的文件一般会被存储在/var/cache/

yum.

● yum clean packages

清除软件仓库缓存目录里的缓存软件包

● yum clean metadata

清除来自软件仓库的缓存的 xml 元数据。

● yum clean dbcache

yum 正常运行时会伴随着产生或者下载一些 sqlite 数据库文件,这个命令会清除来自

所有软件仓库的这些缓存文件的拷贝。

● yum clean all

清除来自所有软件仓库的所有的缓存文件。经常使用该命令可以确保不会占用一些

不必要的空间。

4

Page 5

有用的(而且很少人知道的)rpm 命令

这里是一个比较有用而且不是很多人知道的 rpm 命令使用列表.如果你想到使用过的更多

的内容,请随时联系我们以便把它们收录进来.

? rpm -qa --last

这个命令反序列出已安装的软件包和安装时间,因此,最近安装的软件包会被列在前面.

例子:

$ rpm -qa --last | head -14

gnome-python2-gtkhtml2-2.19.1-16.fc9 Thu 17 Jul 2008 11:40:44 PM EDT

gnome-python2-libegg-2.19.1-16.fc9 Thu 17 Jul 2008 11:40:43 PM EDT

gnome-python2-gtkmozembed-2.19.1-16.fc9 Thu 17 Jul 2008 11:40:43 PM EDT

gnome-python2-extras-2.19.1-16.fc9 Thu 17 Jul 2008 11:40:42 PM EDT

kernel-2.6.25.11-93.fc9 Thu 17 Jul 2008 04:01:13 PM EDT

hugin-0.7.0-0.3.20080528svn.fc9 Tue 15 Jul 2008 11:24:37 PM EDT

hugin-base-0.7.0-0.3.20080528svn.fc9 Tue 15 Jul 2008 11:24:35 PM EDT

enblend-3.1-0.5.20080529cvs.fc9 Tue 15 Jul 2008 11:24:34 PM EDT

perl-Image-ExifTool-7.25-2.fc9 Tue 15 Jul 2008 11:24:29 PM EDT

glew-1.5.0-2.fc9 Tue 15 Jul 2008 11:24:28 PM EDT

boost-1.34.1-13.fc9 Tue 15 Jul 2008 11:24:27 PM EDT

libicu-3.8.1-7.fc9 Tue 15 Jul 2008 11:24:25 PM EDT

plotutils-2.5-5.fc9 Tue 15 Jul 2008 11:24:23 PM EDT

libpano13-tools-2.9.12-7.fc9 Tue 15 Jul 2008 11:24:22 PM EDT

? rpm -qa --qf "%{size} %{name}.%{arch}\n" | sort -n

这个命令显示系统上的所有软件包的大小(按字节),名字.架构(显示格式)的列表,并按

软件包的大小从小到大的顺序排列.

这个命令在寻找哪些软件包占用比较大的空间时很有用.谨慎使用可以清除系统中不

必要的占用空间的软件包.

例子:

$ rpm -qa --qf "%{size} %{name}.%{arch}\n" | sort -n

22429792 Miro.i386

22495239 xulrunner.i386

23553254 anthy.i386

27332634 fonts-japanese.noarch

28805881 ghostscript.i386

29475842 foomatic.i386

29613520 selinux-policy-targeted.noarch

32793230 gnumeric.i386

36362111 gnome-games.i386

5

Page 6

38401148 gimp.i386

40969098 evolution.i386

41452165 perl.i386

42001812 mono-core.i386

46827945 samba-common.i386

48317271 libgweather.i386

49798328 gutenprint-foomatic.i386

52051447 kernel.i686

52058430 kernel.i686

52071231 kernel.i686

91610549 glibc-common.i386

? rmp --showrc

这个命令显示 rpm 资源配置状态,如果你在试图找出在指定的文件中能够使用的变量

定义时,它将非常有用.这个命令的输入非常长而且复杂,使用 less 通过管道查看比较好.

? rpm -Va --nofiles --nomd5

这个命令检查你的系统中 rpm 数据库里未解决的包依赖关系,冲突和其他软件包相关

的问题,在一般情况下它不返回任何东西.

? rpm --eval <an rpm macro>

这个命令根据你指定的宏或者命令输出 rpm 的返回值.

例子:

$ rpm --eval "%{_arch} %{_bindir}"

i386 /usr/bin

6

Page 7

怎样设置你的软件仓库

概述:

有时你会发现你需要搜集一些 rpm 格式的软件包,把他们放到一个地方,并且能够通过运

行系统的 yum 工具去使用它们.这样做其实很简单.

yum 使用的软件仓库其实就是一个目录.这个目录包含有很多 rpm 软件包和 yum 用来获

得软件包信息(相关性,文件列表等)的"元信息".yum 就可以通过 ftp/http 或者文件的 URI(包括

通过 NFS)获取它.

步骤:

1.搜集一些软件包放到一个目录里.你可以创建任意多个子目录,但是必须有一个存放所有

子目录的顶层目录.我们就在这里创建我们的软件仓库.

2.yum 使用存储在每一个 rpm 包里的信息摘要去完成它的工作.这个摘要信息

由'createrepo'程序创建,如果你没有'createrepo'可以通过以下方式安装:

yum install createrepo

如果你在不使用 rpm 的机器上组建软件仓库,可以从下面的地址下载'createrepo'

http://createrepo.baseurl.org/ 然后手动安装.

安装完'createrepo'之后就可以运行它,它只有一个参数,就是你想创建软件仓库的那个顶层

目录.假如第一步我们创建的目录是/srv/my/repo,我们只需运行:

createrepo /srv/my/repo

你会看到很多内容飞过但是最后应该会以无错结束。最后你应该会有一个叫

做/srv/my/repo/repodata 的目录,该目录至少含有 4 个文件。

3. 为了让 yum 知道你的这个软件仓库,你需要把一个.repo 文件加入到你的 yum 的配置

文件中。在你需要使用这个软件仓库的系统上,在以下目录下创建一个新的文

件:'''/etc/yum.repos.d/'''。文件名可以是任意合法文件名但是文件扩展名必须是以.repo 结尾。

这里是我们将其命名为: 'myrepo.repo'.

在该文件中我们只需要包含以下内容即可:

[myrepo]

name = This is my repo

baseurl = url://to/get/to/srv/my/repo/

这就是在次文件中的所有内容. 其中 'baseurl' 行的内容是机器用来获取软件仓库的路径名。

7

Page 8

如果机器可以直接访问它或者把它作为一个文件系统挂载的话你还可以使用如下的 baseurl:

baseurl = file:///srv/my/repo/

''注意:上面的路径中 file 后是三个反斜杠 (/)而不是两个,上面的写法是正确的。

如果你通过 http 或者 https 服务器访问该文件,你可以使用如下的 baseurl:

baseurl = http://servername/my/repo

更多的关于客户端 repo 配置细节可以在 yum.conf 的帮助页面中找到。

4. 现在当你每次修改诶,删除或者添加一个新的 RPM 包到/srv/my/repo 时你只需要

重新创建一下软件仓库的 metadata 就可以了。步骤和第二步中的一样。

== 更多高级选项==

1. createrepo --update: 有时候你的软件仓库中含有很多的软件包,虽然只是其中的一小

部分有所改动但是你却不必为每个软件包重新产生元数据,这样做明显太浪费时间了。

这就是 re --update 选项诞生的原因。你像之前一样运行 createrepo 命令但是添加了--

update 选项.

例如:

createrepo --update /srv/my/repo

现在 createrepo 只更新那些在上次产生元数据之后被改变,添加或者删除 u 了的项目。

2. createrepo -x package_file_name: 假设你有几个软件包在你的软件仓库目录中,但是你

确实不想被人随便看到,你可以使用 createrepo 命令轻松的运行软件包:

createrepo -x filename -x filename2 -x filename* /srv/my/repo

如果你像知道更多关于使用 createrepo 来创建和维护你自己的软件包仓库的方法请访问

8

Page 9

createrepo 的帮助文件或者本集中的其他文档。

Yum 组和软件仓库

Yum 支持组命令

* grouplist

* groupinfo

* groupinstall

* groupremove

* groupupdate

组从“group”xml 元数据中读取数据,每个软件仓库可选支持组功能。如果 yum 没有一个软

件仓库支持组功能那么所有的组操作都不能工作。

* grouplist

yum grouplist [hidden]

这个操作将为你的系统在两个单独的列表中列出所有已经安装的和可用的组。如果你

使用了 hidden 参数那么所有被设置的组在 xml <uservisible> 标记文件中将被设置为“No”。

* groupinfo

yum groupinfo groupname

该操作将显示每个组的详细信息,包括:描述信息,是必须安装还是默认或者可选安

装包。

* groupinstall, groupupdate

yum groupinstall groupname

9

Page 10

yum groupupdate groupname

尽管以上两个命令有所不同,但是他们执行同样的功能。他们将尝试安装/升级所有

在组中类型为“defalut”或者“mandatory”的包 (默认做此操作)。 (要改变这种类型的包,请

修改 yum.conf 配置文件中的 group_package_types 选项)并且此操作会安装任何安装或升级所

需要的额外依赖关系包。

* groupremove

yum groupremove groupname

这个操作将删除在命名组中的任何类型的所有包,并且所有依赖于该组中的包也会被

删除。

在你的软件仓库中设置属于自己的组

这个过程相当的简单,你只需要做以下两步工作即可::

1. 在组中创建一个 yum 所使用的格式的组文件。

2. 告诉 createrepo 包含你的软件仓库中的该组文件。

第一步

你可以打开一个文本编辑器并且手动创建一个组 xml 文件或者你也可以用 yum-utils 中的

yum-groups-manager 命令来完成。

像下面这样使用 groups-create 命令

yum-groups-manager -n "My Group" --id=mygroup --save=mygroups.xml --mandatory

yum glibc rpm

之后你将看到一个如下文件:

<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">

10

Page 11

<comps>

<group>

<id>mygroup</id>

<default>False</default>

<uservisible>True</uservisible>

<display_order>1024</display_order>

<name>My group</name>

<description></description>

<packagelist>

<packagereq type="mandatory">glibc</packagereq>

<packagereq type="mandatory">rpm</packagereq>

<packagereq type="mandatory">yum</packagereq>

</packagelist>

</group>

</comps>

第二步

要把这个文件包含进软件仓库,只需要告诉 cretaerepo 在创建或者重新创建你自己的软

件仓库的时候使用该文件就可以了。

createrepo -g /path/to/mygroups.xml /srv/my/repo

========================================

========================================

========================================

怎样管理软件仓库

? repomanage

这个工具允许你为新的或旧的软件包创建列表以传递给其他的命令。如果你想从一个目

录结构中标记一个指定的软件包集的话,那么该命令很有用。它直接爱软件包上操作,通过

他们的 rpm epoch,版本和发布信息比较软件包。

11

Page 12

例如:

repomanage -k2 --old /some/dir | xargs rm -f

这个操作将列出/some/dir 目录内的陈旧的软件包,同时-k2 命令告诉要抑制版本为 2

的软件包。

? reposync

这个工具允许你下载整个远程 yum 软件仓库或者远程软件仓库的一部分。它还将使用一

个本地目录来与远程的软件仓库同步。

示例:

从’updates’软件仓库同步所有软件包到当前目录:

reposync --repoid=updates

仅从 ’updates’软件仓库同步最新的软件包到当前目录:

reposync -n --repoid=updates

同步软件包从 ’updates’和 ’extras’软件仓库到当前目录:

reposync --repoid=updates --repoid=extras

同步所有软件包从 ’updates’软件仓库到 repos 目录:

reposync -p repos --repoid=updates

同步所有的软件仓库至 'localcache' 目录( 每个软件仓库对应自己的路径):

reposync -p localcache

允许插件的软件包同步 (当插件要求访问软件仓库时很有用):

12

Page 13

reposync -l

? verifytree

如果你刚刚做了一个 repo 并且你想要验证在你的 repo 中的所有东西都是正确且可以完成

其功能的话,你可以运行 erifytree 命令来检查所有的 repodata 和软件包。

示例:

$ verifytree /home/skvidal/tmp/empty-repoverifytree /home/skvidal/tmp/empty-repo/

Checking repodata:

verifying repomd.xml with yum

verifying filelists checksum

verifying primary checksum

verifying primary_db checksum

verifying other_db checksum

verifying other checksum

verifying filelists_db checksum

Checking groups (comps.xml):

verifying comps.xml with yum

comps file missing or unparseable

13