和基于Debian的发行版类似,基于Red Hat的系统也有几种不同的可用前端工具。常见的有
以下3种。

  •  yum:在Red Hat和Fedora中使用。
  •  urpm:在Mandriva中使用。
  •  zypper:在openSUSE中使用。

这些前端都是基于rpm命令行工具的。下一节会讨论如何用这些基于rpm的工具来管理软件
包。重点是在yum上,但也会讲到zypper和urpm。

9.3.1 列出已安装包

要找出系统上已安装的包,可在shell提示符下输入如下命令:

yum list installed

输出的信息可能会在屏幕上一闪而过,所以最好是将已安装包的列表重定向到一个文件中。
可以用more或less命令(或一个GUI编辑器)按照需要查看这个列表。

yum list installed > installed_software

要列出openSUSE或Mandriva发行版上的已安装包,可参考表9-1中的命令。遗憾的是,
Mandriva中采用的urpm工具无法生成当前已安装软件列表。因此,你需要转向底层的rpm工具。
image.png
yum擅长找出某个特定软件包的详细信息。它能给出关于包的非常详尽的描述,另外你还可
以通过一条简单的命令查看包是否已安装。

yum list xterm

Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
Available Packages
xterm.i686 253-1.el6

yum list installed xterm

Loaded plugins: refresh-packagekit Error: No matching Packages to list

用urpm和zypper列出详细软件包信息的命令见表9-2。还可用zypper命令的info选项从库
中获得一份更详细的包信息。
image.png

最后,如果需要找出系统上的某个特定文件属于哪个软件包,万能的yum可以做到!只要输
入命令:

yum provides file_name

这里有个查找配置文件/etc/yum.conf归属的例子。

yum provides /etc/yum.conf

Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors

  • base: mirror.web-ster.com
  • extras: centos.chi.host-engine.com
  • updates: mirror.umd.edu
    yum-3.2.29-40.el6.centos.noarch : RPM package installer/updater/manager
    Repo : base
    Matched from:
    Filename : /etc/yum.conf
    yum-3.2.29-43.el6.centos.noarch : RPM package installer/updater/manager
    Repo : updates
    Matched from:
    Filename : /etc/yum.conf
    yum-3.2.29-40.el6.centos.noarch : RPM package installer/updater/manager
    Repo : installed
    Matched from:
    Other : Provides-match: /etc/yum.conf

yum会分别查找三个仓库:base、updates和installed。从其中两个仓库中得到的答案都是:该
文件是yum软件包提供的!

9.3.2 用 yum 安装软件

用yum安装软件包极其简单。下面这个简单的命令会从仓库中安装软件包、所有它需要的库
以及依赖的其他包:

yum install package_name

下面的例子是安装在第2章中讨论过的xterm包。

$ su -
Password:

yum install xterm

Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors

  • base: mirrors.bluehost.com
  • extras: mirror.5ninesolutions.com
  • updates: mirror.san.fastserv.com
    Setting up Install Process
    Resolving Dependencies
    —> Running transaction check
    —-> Package xterm.i686 0:253-1.el6 will be installed
    —> Finished Dependency Resolution
    Dependencies Resolved
    […]
    Installed:
    xterm.i686 0:253-1.el6
    Complete!


说明 在上面的例子中,我们在运行yum命令之前使用了su-命令。这个命令允许你切换到root
用户。在Linux系统上,#表明你是以root用户身份登录的。应该只有在运行管理性的任务
时才临时切换到root用户(比如安装和更新软件)。也可以使用sudo命令。


也可以手动下载rpm安装文件并用yum安装,这叫作本地安装。基本的命令是:

yum localinstall package_name.rpm

你现在应该能发现yum的优点之一就是它的命令富有逻辑性,而且对用户也友好。
表9-3显示了如何用urpm和zypper安装包。注意,如果不是以root用户身份登录,你会在使
用urpm时得到一个“command not found”的错误消息。
image.png

9.3.3 用 yum 更新软件

在大多数Linux发行版上,如果你是在GUI上工作,就会看到一些好看的小通知图标,告诉你
需要更新了。在命令行下的话,就得费点事了。

要列出所有已安装包的可用更新,输入如下命令:

yum list updates

如果这个命令没有输出就太好了,因为它说明你没有任何需要更新的!但如果发现某个特定
软件包需要更新,输入如下命令:

yum update package_name

如果想对更新列表中的所有包进行更新,只要输入如下命令:

yum update

Mandriva和openSUSE上用来更新软件包的命令列在了表9-4中。在使用urpm时,软件仓库数
据库会自动更新,软件包也会更新。
image.png

9.3.4 用 yum 卸载软件

yum工具还提供了一种简单的方法来卸载系统中不再想要的应用。和aptitude一样,你需要
决定是否保留软件包的数据和配置文件。

只删除软件包而保留配置文件和数据文件,就用如下命令:

  1. yum remove package_name

要删除软件和它所有的文件,就用erase选项:

  1. yum erase package_name

在表9-5中不难发现,用urpm和zypper删除软件同样简单。这两个工具的作用类似于yum的erase选项。
image.png
有了PMS包的生活尽管安逸了不少,但也不是风平浪静。偶尔也会有一些波澜,好在总有解决的办法。

9.3.5 处理损坏的包依赖关系

有时在安装多个软件包时,某个包的软件依赖关系可能会被另一个包的安装覆盖掉。这叫作
损坏的包依赖关系(broken dependency)。

如果系统出现了这个问题,先试试下面的命令:

  1. yum clean all

然后试着用yum命令的update选项。有时,只要清理了放错位置的文件就可以了。
如果这还解决不了问题,试试下面的命令:

  1. yum deplist package_name

这个命令显示了所有包的库依赖关系以及什么软件可以提供这些库依赖关系。一旦知道某个
包需要的库,你就能安装它们了。下面是确定xterm包依赖关系的例子。

yum deplist xterm

Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile

  • base: mirrors.bluehost.com
  • extras: mirror.5ninesolutions.com
  • updates: mirror.san.fastserv.com
    Finding dependencies:
    package: xterm.i686 253-1.el6
    dependency: libncurses.so.5
    provider: ncurses-libs.i686 5.7-3.20090208.el6
    dependency: libfontconfig.so.1
    provider: fontconfig.i686 2.8.0-3.el6
    dependency: libXft.so.2
    provider: libXft.i686 2.3.1-2.el6
    dependency: libXt.so.6
    provider: libXt.i686 1.1.3-1.el6
    dependency: libX11.so.6
    provider: libX11.i686 1.5.0-4.el6
    dependency: rtld(GNU_HASH)
    provider: glibc.i686 2.12-1.132.el6
    provider: glibc.i686 2.12-1.132.el6_5.1
    provider: glibc.i686 2.12-1.132.el6_5.2
    dependency: libICE.so.6
    provider: libICE.i686 1.0.6-1.el6
    dependency: libXaw.so.7 provider: libXaw.i686 1.0.11-2.el6
    dependency: libtinfo.so.5
    provider: ncurses-libs.i686 5.7-3.20090208.el6
    dependency: libutempter.so.0
    provider: libutempter.i686 1.1.5-4.1.el6
    dependency: /bin/sh
    provider: bash.i686 4.1.2-15.el6_4
    dependency: libc.so.6(GLIBC_2.4)
    provider: glibc.i686 2.12-1.132.el6
    provider: glibc.i686 2.12-1.132.el6_5.1
    provider: glibc.i686 2.12-1.132.el6_5.2
    dependency: libXmu.so.6
    provider: libXmu.i686 1.1.1-2.el6

如果这样仍未解决问题,还有最后一招:

  1. yum update --skip-broken

—skip-broken选项允许你忽略依赖关系损坏的那个包,继续去更新其他软件包。这可能
救不了损坏的包,但至少可以更新系统上的其他包。

表9-6中列出了用urpm和zypper来尝试修复损坏的依赖关系的命令。用zypper时,只有一
个命令能够用来验证和修复损坏的依赖关系。用urpm时,如果clean选项不工作,你可以跳过
更新那些有问题的包。要这么做的话,就必须将有问题包的名字添加到文件/etc/urpmi/skip.list。
image.png

9.3.6 yum 软件仓库

类似于aptitude系统,yum也是在安装发行版的时候设置的软件仓库。这些预设的仓库就
能很好地满足你的大部分需求。但如果需要从其他仓库安装软件,有些事情你得知道。


窍门 聪明的系统管理员会坚持使用通过审核的仓库。通过审核的仓库是指该发行版官方网站
上指定的库。如果你添加了未通过审核的库,就失去了稳定性方面的保证,可能陷入损
坏的依赖关系惨剧中。


要想知道你现在正从哪些仓库中获取软件,输入如下命令:

  1. yum repolist

如果仓库中没有需要的软件,你可以编辑一下配置文件。yum的仓库定义文件位于
/etc/yum.repos.d。你需要添加正确的URL,并获得必要的加密密钥。

像rpmfusion.org这种优秀的仓库站点会列出必要的使用步骤。有时这些仓库网站会提供一个
可下载的rpm文件,可以用yum localinstall命令进行安装。这个rpm文件在安装过程会为你
完成所有的仓库设置工作。现在方便多了!

urpm称它的仓库为媒体。查看urpm媒体和zypper仓库的命令列在了表9-7中。注意,用这
两个前端工具时不需要编辑配置文件。只需要输入命令就可以添加媒体或仓库。
image.png
基于Debian的和基于Red Hat的系统都使用包管理系统来简化管理软件的过程。现在我们就
要离开包管理系统的世界,看看稍微麻烦一点的:直接从源码安装。