Linux中RPM 和 YUM 包管理详解

2019年12月04日 阅读数:147
这篇文章主要向大家介绍Linux中RPM 和 YUM 包管理详解,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

概述

在本教程中,学习如何使用 RPM 和 YUM 工具管理 Linux 系统上的包。学习:html

  • 使用 RPM 和 YUM 安装、从新安装、升级和删除包。
  • 获取 RPM 包的信息,包括版本、状态、依赖项、完整性和签名。
  • 肯定一个包提供了哪些文件,并查找某个特定文件来自哪一个包。

本教程将帮助您针对 Linux Professional Institute 的初级管理 (LPIC-1) 考试 101 的主题 102 中的目标 102.5 进行应考准备。该目标的权重为 3。java

介绍包管理

在过去,许多 Linux 程序以源代码形式发行,用户可将它连同所需的手册页、配置文件等一块儿构建到须要的程序或程序集中。如今,大部分 Linux 发行商都使用预先构建的程序或称为 的程序集,这些包已准备好安装在该发行版上。在本教程,您将学习可帮助安装、更新和删除包的包管理工具。本教程将重点介绍 Red Hat 开发的 Red Hat Package Manager (RPM),以及最初在杜克大学物理系开发的用来管理 Red Hat Linux 系统的 Yellowdog Updater Modified (YUM)。本系列的另外一篇教程 “学习 Linux 101:Debian 包管理” 介绍了 Debian 系统上使用的包管理工具。node

从用户角度讲,基本的包管理功能是经过命令提供的。随着 Linux 开发人员努力让 Linux 变得更容易使用,基本工具已获得了其余工具的补充,包括 GUI 工具,它们为用户隐藏了基本工具的一些复杂性。在本教程和 Debian 包管理 教程中,咱们将重点介绍基本工具,但也会提到其余一些工具,以便您能进一步了解它们。git

前提条件

要从本系列教程中得到最大收获,您应该拥有 Linux 的基本知识和一个正常工做的 Linux 系统,您能够在这个系统上实践本教程中涵盖的命令。有时程序的不一样版本会获得不一样的输出格式,因此您的结果可能并不老是与这里给出的清单和图彻底相同。具体地讲,我展现的许多输出都高度依赖于咱们的系统上已安装的包。您本身的输出可能很是不一样,但您应该可以发现一些重要共性。除非另行说明,本教程中的示例使用的是 Fedora 20 系统。算法

包管理器

RPM、YUM 和 APT(用于 Debian 系统)有许多类似之处。它们都能安装和删除包。有关已安装包的信息保留在数据库中。全部工具都拥有基本的命令行功能,而其余一些工具能够提供对用户更友好的接口。全部工具都能从互联网检索包。shell

安装 Linux 系统时,一般会安装大量包。可针对系统的目标用途而自定义这个包集合,好比用做服务器、桌面或开发人员工做站。有时,可能还须要安装新包来添加新功能,更新已有的包,甚至删除再也不须要的或已被新包淘汰的包。咱们看看如何执行这些任务,并解决一些相关的难题,好比找到哪一个包可能包含某个特定命令。数据库

RPM

Red Hat 于 1995 年引入了 RPM。RPM 如今是 Linux Standard Base (LSB) 中用于打包的包管理系统。rpm命令选项分组为 3 个小组:

  • 查询和验证包
  • 安装、升级和删除包
  • 执行其余功能

本教程将重点介绍前两组命令选项。在 RPM 的手册页中能够找到其余功能的信息。

咱们还应注意到,rpm 是用于 RPM 的主要命令的命令名称,而 .rpm 是用于 RPM 文件的扩展名。因此 “一个 rpm” 或 “xxx rpm” 一般指一个 RPM 文件,而 rpm 一般指该命令。

YUM

YUM 向 RPM 系统添加了自动更新和包管理,包括依赖项管理。除了了解系统上已安装的包以外,YUM 与 Debian Advanced Packaging Tool (APT) 很类似,由于它使用了存储库,存储库是一种包集合,一般可经过链接网络进行访问。

安装 RPM 包

假设您但愿编译一个 Fortran 程序,一位同事告诉您使用 gfortran 命令。您能够尝试使用 gfortran --help,也能够尝试使用 which gfortran,或者尝试使用 type gfortran。可是,若是系统没法找到 gfortran,您可能会看到相似 中所示的输出。

缺乏 gfortran 命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ian@attic-f21 ~]$ gfortran --help
bash: gfortran: command not found
 
[ian@attic-f21 ~]$ gfortran --help
bash: gfortran: command not found...
Install package 'gcc-gfortran' to provide command 'gfortran'? [N/y]
 
 
[ian@attic-f21 ~]$ which gfortran
/usr/bin/which: no gfortran in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:
/home/ian/.local/bin:/home/ian/bin)
 
[ian@attic-f21 ~]$ type gfortran
bash: type: gfortran: not found

若是您没有从 中的第二个输出表单中得到有帮助的建议,能够与您的同事核对一下,肯定要安装哪一个包。不然,能够推测 gfortran 命令在 gfortran 包中。这一般是一种合理的推测,但并不老是对的,至少在本例中是不正确的。咱们稍后会了解如何找到正确的包。假设您知道它实际上在 gcc-gfortran 包中,并且您已下载或获取了该包的副本,您能够尝试使用 rpm 命令和 -i(表示安装)选项来安装它,如 中所示。

使用 rpm - take 1 安装 gcc-gfortran
1
2
3
[root@attic-f21 ~]# rpm -i  gcc-gfortran-4.9.2-6.fc21.x86_64.rpm
error: Failed dependencies:
     libquadmath-devel = 4.9.2-6.fc21 is needed by gcc-gfortran-4.9.2-6.fc21.x86_64

rpm 命令知道该包有一个依赖项,但不幸的是,它不会帮助您解析该依赖项。您须要获取一个或多个依赖包,再次尝试,看看是否有其余依赖项 — 一直这样作,直到已知足全部依赖关系。一个便捷的方法是,您能够向 rpm 命令提供一个要安装的包列表,若是全部依赖关系都获得知足,它会按正确的顺序安装全部这些包。因此您至少不须要按正确的顺序手动安装每一个包。

若是您使用过 Debian 的 APT,如今您可能但愿拥有相似 apt-get 的命令,该命令会查找您须要的资源(包括依赖项)并进行安装。对于基于 RPM 的系统,YUM(或 Yellowdog Updater Modified)提供了这样的功能。 展现了如何使用 yum 命令和 install 选项安装 gcc-gfortran 和所需的必备依赖项。备注:根据您已在系统上安装的工具,您的依赖项可能不一样。

使用 yum 安装 gcc-gfortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[root@attic-f21 ~]# yum install gcc-gfortran
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package gcc-gfortran.x86_64 0:4.9.2-6.fc21 will be installed
--> Processing Dependency: libquadmath-devel = 4.9.2-6.fc21 for package: gcc-gfortran-4.9.2-6.fc21.x86_64
--> Running transaction check
---> Package libquadmath-devel.x86_64 0:4.9.2-6.fc21 will be installed
--> Finished Dependency Resolution
 
Dependencies Resolved
 
================================================================================
  Package                 Arch         Version               Repository     Size
================================================================================
Installing:
  gcc-gfortran            x86_64       4.9.2-6.fc21          updates       7.7 M
Installing for dependencies:
  libquadmath-devel       x86_64       4.9.2-6.fc21          updates        37 k
 
Transaction Summary
================================================================================
Install  1 Package (+1 Dependent package)
 
Total download size: 7.7 M
Installed size: 18 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): libquadmath-devel-4.9.2-6.fc21.x86_64.rpm            |  37 kB  00:00    
(2/2): gcc-gfortran-4.9.2-6.fc21.x86_64.rpm                 | 7.7 MB  00:04    
--------------------------------------------------------------------------------
Total                                              1.6 MB/s | 7.7 MB  00:04    
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction (shutdown inhibited)
   Installing : libquadmath-devel-4.9.2-6.fc21.x86_64                        1/2
   Installing : gcc-gfortran-4.9.2-6.fc21.x86_64                             2/2
   Verifying  : libquadmath-devel-4.9.2-6.fc21.x86_64                        1/2
   Verifying  : gcc-gfortran-4.9.2-6.fc21.x86_64                             2/2
 
Installed:
   gcc-gfortran.x86_64 0:4.9.2-6.fc21                                           
 
Dependency Installed:
   libquadmath-devel.x86_64 0:4.9.2-6.fc21                                      
 
Complete!

中的输出代表,YUM 在名为 “updates” 的存储库中找到了 gcc-gfortran 和 libquadmath-devel 的 x86_64 版本(稍后会更详细地进行介绍),并肯定了总下载大小。在回复 “Y” 赞成该事务后,它会下载这两个包,而后安装依赖项,最后安装 gcc-gfortran。您会在本教程后面进一步了解依赖项。

备注:在 中,YUM 找到了 gcc-gfortran 包的最新版本,该刚好具备与咱们尝试在 中安装的版本相同的级别 (4.9.2-6)。您一般想安装包的最新版本,但若是须要更早的版本,或者须要 i686 版而不是 x86_64 版,能够提供附加的限定条件。请参阅 yum 命令的手册页中介绍指定包名称的部分。

包位置

在上一节中,您学习了如何安装 RPM 包。不过这些包来自何处?yum 如何知道从何处下载包?可将 /etc/yum.repos.d/ 目录做为起点,它一般包含一些存储库 文件。这是存放存储库信息的默认位置,但也能够在 YUM 配置文件(一般为 /etc/yum.conf)中指定其余位置。 显示了与咱们从中将 gcc-gfortran 安装在 Fedora 21 系统上的位置对应的 fedora-updates.repo。

典型的存储库文件分为 3 个部分,一部分用于正常的包,一部分用于调试包,最后一部分用于源包。一般,会在不一样位置或镜像 提供一个发行版的包的多个副本。因此存储库文件告诉 yum 在何处查找每部分的最新镜像列表。请注意,发行版的版本级别和机器架构已被参数化,因此 yum 会从 https://mirrors.fedoraproject.org/metalink?repo=updates-released-f21&arch=x86_64 下载针对个人 x86_64 Fedora 21 系统的列表。

除了存储库位置以外,存储库文件还会告知某个特定存储库是否已启用,是否应使用 GPG 签名检查下载的包。

/etc/yum.repos.d/*.repo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[ian@attic-f21 ~]$ cat /etc/yum.repos.d/fedora-updates.repo
[updates]
name=Fedora $releasever - $basearch - Updates
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$
basearch
enabled=1
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
 
[updates-debuginfo]
name=Fedora $releasever - $basearch - Updates - Debug
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/debug/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-debug-f$releasever&
arch=$basearch
enabled=0
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
 
[updates-source]
name=Fedora $releasever - Updates Source
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/SRPMS/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-source-f$releasever&
arch=$basearch
enabled=0
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

YUM 和 RPM 使用本地数据库来肯定安装了哪些包。存储在本地数据库中的包的元数据是从启用的存储库检索而来的。尽管您不多须要担心本地数据库,但可使用命令 yum clean 清除本地存储的信息的各个部分,使用 yum makecache 在本地数据库中为启用的存储库建立信息。举例而言,若是您更改了存储库配置,则能够这么作。

删除 RPM 包

若是想要删除包,可以使用 yum 的 remove 选项或 rpm 的 -e 选项。一个使用 rpm -e 删除 gcc-gfortran 的测试运行如 所示。若是该包能够删除,则没有输出。

gcc-gfortran 的删除测试
1
2
[root@attic-f21 ~]# rpm -e --test gcc-gfortran
[

不一样于使用 apt-get 对 Debian 包的模拟删除,RPM 系统不会维护自动添加的包信息,因此没法轻松地肯定还删除了哪些依赖项。可是,若是您在单个命令上指定删除多个包,没有依赖项的包会在有依赖项的包以前删除。

使用 rpm 删除包时,在删除包以前没有提示,这与安装包时不一样。可是,若是您尝试删除其余某个包须要的包,该操做不会执行,您会得到一条如 所示的错误消息。

使用 rpm 删除依赖包
1
2
3
[root@attic-f21 ~]# rpm -e libquadmath-devel
error: Failed dependencies:
     libquadmath-devel = 4.9.2-6.fc21 is needed by (installed) gcc-gfortran-4.9.2-6.fc21.x86_64

若是使用 yum remove,在执行事务测试后将提示您。若是尝试删除的包是其余某些已安装包的依赖包,YUM 会建议删除这些包和依赖包,如 所示。

使用 yum 删除依赖包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@attic-f21 ~]# yum remove libquadmath-devel
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package libquadmath-devel.x86_64 0:4.9.2-6.fc21 will be erased
--> Processing Dependency: libquadmath-devel = 4.9.2-6.fc21 for package: gcc-gfortran-4.9.2-6.fc21.x86_64
--> Running transaction check
---> Package gcc-gfortran.x86_64 0:4.9.2-6.fc21 will be erased
--> Finished Dependency Resolution
 
Dependencies Resolved
 
================================================================================
  Package                 Arch         Version              Repository      Size
================================================================================
Removing:
  libquadmath-devel       x86_64       4.9.2-6.fc21         @updates        18 k
Removing for dependencies:
  gcc-gfortran            x86_64       4.9.2-6.fc21         @updates        18 M
 
Transaction Summary
================================================================================
Remove  1 Package (+1 Dependent package)
 
Installed size: 18 M
Is this ok [y/N]: n
Exiting on user command
Your transaction was saved, rerun it with:
  yum load-transaction /tmp/yum_save_tx.2015-07-27.22-01.amzaZh.yumtx

升级 RPM 包

如今您已经知道了如何安装和删除 RPM,让咱们看看如何将 RPM 包升级到更高级别。可使用 yum update 更新整个系统,或者能够指定一个包或一种通配符规范。 展现了如何更新全部名称以 “pop” 开头的包。注意,这里使用了省略符号来阻止 "*" 的 shell 扩展。

使用 yum update 更新
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
[root@attic-f21 ~]# yum update 'pop*'
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package poppler.x86_64 0:0.26.2-3.fc21 will be updated
---> Package poppler.x86_64 0:0.26.2-9.fc21 will be an update
---> Package poppler-data.noarch 0:0.4.7-1.fc21 will be updated
---> Package poppler-data.noarch 0:0.4.7-2.fc21 will be an update
---> Package poppler-glib.x86_64 0:0.26.2-3.fc21 will be updated
---> Package poppler-glib.x86_64 0:0.26.2-9.fc21 will be an update
---> Package poppler-utils.x86_64 0:0.26.2-3.fc21 will be updated
---> Package poppler-utils.x86_64 0:0.26.2-9.fc21 will be an update
--> Finished Dependency Resolution
 
Dependencies Resolved
 
==========================================================================
  Package             Arch         Version             Repository     Size
==========================================================================
Updating:
  poppler             x86_64       0.26.2-9.fc21       updates       798 k
  poppler-data        noarch       0.4.7-2.fc21        updates       2.2 M
  poppler-glib        x86_64       0.26.2-9.fc21       updates       141 k
  poppler-utils       x86_64       0.26.2-9.fc21       updates       171 k
 
Transaction Summary
==========================================================================
Upgrade  4 Packages
 
Total download size: 3.2 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs reduced 3.1 M of updates to 315 k (89% saved)
(1/4): poppler-data-0.4.7-1.fc21_0.4.7-2.fc21.noarch. |  70 kB  00:00    
(2/4): poppler-0.26.2-3.fc21_0.26.2-9.fc21.x86_64.drp | 208 kB  00:00    
(3/4): poppler-glib-0.26.2-3.fc21_0.26.2-9.fc21.x86_6 |  36 kB  00:00    
(4/4): poppler-utils-0.26.2-9.fc21.x86_64.rpm         | 171 kB  00:00    
Finishing delta rebuilds of 3 package(s) (3.1 M)
--------------------------------------------------------------------------
Total                                        142 kB/s | 486 kB  00:03    
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction (shutdown inhibited)
   Updating   : poppler-data-0.4.7-2.fc21.noarch                       1/8
   Updating   : poppler-0.26.2-9.fc21.x86_64                           2/8
   Updating   : poppler-glib-0.26.2-9.fc21.x86_64                      3/8
   Updating   : poppler-utils-0.26.2-9.fc21.x86_64                     4/8
   Cleanup    : poppler-utils-0.26.2-3.fc21.x86_64                     5/8
   Cleanup    : poppler-glib-0.26.2-3.fc21.x86_64                      6/8
   Cleanup    : poppler-0.26.2-3.fc21.x86_64                           7/8
   Cleanup    : poppler-data-0.4.7-1.fc21.noarch                       8/8
   Verifying  : poppler-data-0.4.7-2.fc21.noarch                       1/8
   Verifying  : poppler-glib-0.26.2-9.fc21.x86_64                      2/8
   Verifying  : poppler-0.26.2-9.fc21.x86_64                           3/8
   Verifying  : poppler-utils-0.26.2-9.fc21.x86_64                     4/8
   Verifying  : poppler-data-0.4.7-1.fc21.noarch                       5/8
   Verifying  : poppler-utils-0.26.2-3.fc21.x86_64                     6/8
   Verifying  : poppler-glib-0.26.2-3.fc21.x86_64                      7/8
   Verifying  : poppler-0.26.2-3.fc21.x86_64                           8/8
 
Updated:
   poppler.x86_64 0:0.26.2-9.fc21                                         
   poppler-data.noarch 0:0.4.7-2.fc21                                     
   poppler-glib.x86_64 0:0.26.2-9.fc21                                    
   poppler-utils.x86_64 0:0.26.2-9.fc21                                   
 
Complete!

若是知道 RPM 文件位于何处,或者已下载它们,还可使用 rpm 命令更新它们。更新与安装相似,但使用的是 -U 或 -F 选项,而不是 -i 选项。这两个选项之间的区别在于,-U 选项将升级一个现有包或者在该包未安装时安装它,而 -F 选项仅升级或刷新 一个已安装的包。出于这个缘由,一般会使用 -U 选项,尤为是在命令行包含一组 RPM 时。这样,将安装未安装的包,升级已安装的包。其余两个选项 -v(详细)和 -h(哈希标记)一般用于提供进度指标。 展现了如何使用 rpm 命令更新 cairo 包和它的 cairo-gobject 依赖项。咱们已将 cairo rpm 下载到根用户的主目录,并且须要从一个更新镜像获取 cairo-gobject 包。

使用 rpm 更新包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@attic-f21 ~]# ls *.rpm
cairo-1.14.2-1.fc21.x86_64.rpm
[root@attic-f21 ~]# rpm -Uvh *.rpm \
http://download.fedoraproject.org/pub/fedora/linux/updates/21/\
> x86_64/c/cairo-gobject-1.14.2-1.fc21.x86_64.rpm
Retrieving http://download.fedoraproject.org/pub/fedora/linux/updates/21/x86_64/c/cairo-g
object-1.14.2-1.fc21.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
    1:cairo-1.14.2-1.fc21              ################################# [ 25%]
    2:cairo-gobject-1.14.2-1.fc21      ################################# [ 50%]
Cleaning up / removing...
    3:cairo-gobject-1.13.1-0.4.git337ab################################# [ 75%]
    4:cairo-1.13.1-0.4.git337ab1f.fc21 ################################# [100%]

查询 RPM 包

在咱们的示例中,您能够看到,使用 rpm 命令安装 rpm 须要包文件的完整名称(或 URL),好比 gcc-gfortran-4.9.2-6.fc21.x86_64.rpm。另外一方面,使用 yum 安装或使用任一命令删除 rpm 仅须要包名称,好比 gcc-gfortran。与 APT 同样,RPM 维护着已安装包的内部数据库,容许您使用包名称来处理已安装的包。在本节中,咱们使用 rpm 命令的 -q(表示查询)选项或关联的 yum 查询,查看这个数据库中提供的一些信息。

咱们将从新安装 gcc-gfortran 包来提供咱们的示例。

这个基本查询仅循环查询某个包是否已安装,若是已安装,它的版本是什么。添加 -i 选项,您会得到该包的信息。请注意,您须要拥有根用户权限才能安装、升级或删除包,但非根用户能够对 rpm 数据库执行查询。

显示 gcc-gfortran 的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
[ian@attic-f21 ~]$ yum list gcc-gfortran
Loaded plugins: langpacks
Installed Packages
gcc-gfortran.x86_64                    4.9.2-6.fc21                     @updates
Available Packages
gcc-gfortran.i686                      4.9.2-6.fc21                     updates
 
[ian@attic-f21 ~]$ rpm -q gcc-gfortran
gcc-gfortran-4.9.2-6.fc21.x86_64
 
[ian@attic-f21 ~]$ yum info gcc-gfortran
Loaded plugins: langpacks
Installed Packages
Name        : gcc-gfortran
Arch        : x86_64
Version     : 4.9.2
Release     : 6.fc21
Size        : 18 M
Repo        : installed
From repo   : updates
Summary     : Fortran support
URL         : http://gcc.gnu.org
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and
             : LGPLv2+ and BSD
Description : The gcc-gfortran package provides support for compiling Fortran
             : programs with the GNU Compiler Collection.
 
Available Packages
Name        : gcc-gfortran
Arch        : i686
Version     : 4.9.2
Release     : 6.fc21
Size        : 7.5 M
Repo        : updates/21/x86_64
Summary     : Fortran support
URL         : http://gcc.gnu.org
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and
             : LGPLv2+ and BSD
Description : The gcc-gfortran package provides support for compiling Fortran
             : programs with the GNU Compiler Collection.
 
[ian@attic-f21 ~]$ < strong >rpm -qi gcc-gfortran</ strong >
Name        : gcc-gfortran
Version     : 4.9.2
Release     : 6.fc21
Architecture: x86_64
Install Date: Mon 27 Jul 2015 09:36:14 PM EDT
Group       : Development/Languages
Size        : 19126083
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
Signature   : RSA/SHA256, Fri 13 Feb 2015 09:02:15 PM EST, Key ID 89ad4e8795a43f54
Source RPM  : gcc-4.9.2-6.fc21.src.rpm
Build Date  : Thu 12 Feb 2015 07:40:58 AM EST
Build Host  : buildhw-08.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://gcc.gnu.org
Summary     : Fortran support
Description :
The gcc-gfortran package provides support for compiling Fortran
programs with the GNU Compiler Collection.

更详细的清单能够显示一些可能与某个 RPM 包关联的标签。您会注意到,rpm 和 yum 以稍微不一样的格式显示了稍微不一样的信息。对于本教程,咱们将坚持使用标准命令选项所提供的基本输出。若是想使用 rpm --queryformat 选项构建自定义查询输出,请参阅手册页。若是想知道您的 rpm  版本支持的全部标签,能够尝试运行 rpm--querytags

如 所示,yum 将列出已安装的和可用的包。咱们已安装 x86_64(64 位)版本,但还有一个 i686(32 位)版本可用。也可使用它列出有更新可用的包和具备其余特征的包,好比过期的包或最近添加到存储库的包。甚至可使用 yum 搜索包。在 中,能够看到 texmacs 包未安装,但能够从 fedora 存储库得到它。若是搜索 “texmacs”,则会看到 4 个说起它的包。很容易明白为何找到了 TeXmacs* 包。使用 yum info pydot 查明为何还提到了 pydot 包。

显示 texmacs 的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ian@attic-f21 ~]$ yum list texmacs
Loaded plugins: langpacks
Available Packages
TeXmacs.x86_64                      1.0.7.19-4.fc20                       fedora
[ian@attic-f21 ~]$ yum search texmacs
Loaded plugins: langpacks
============================= N/S matched: texmacs =============================
TeXmacs-devel.i686 : Development files for TeXmacs
TeXmacs-devel.x86_64 : Development files for TeXmacs
sympy-texmacs.noarch : TeXmacs integration for sympy
texmacs-fedora-fonts.noarch : Fonts for TeXmacs
TeXmacs.x86_64 : Structured WYSIWYG scientific text editor
 
   Name and summary matches only, use "search all" for everything.

对于剩余查询示例,咱们主要使用 rpm,由于它拥有更丰富的选项。许多示例还可使用 yum 完成,并且 yum 拥有的一些功能是基本 rpm 选项所没有的。请参阅手册页了解更多信息。

RPM 包和其中的文件

您经常想知道包中的内容或一个特定文件来自哪一个包。要列出 gcc-gfortran 包中的文件,可使用 -ql 选项,如 所示。这个包中有许多文件,因此咱们仅显示了部分输出。

显示 gcc-gfortran 包中的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[ian@attic-f21 ~]$ rpm -ql gcc-gfortran
/usr/bin/f95
/usr/bin/gfortran
/usr/lib/gcc
/usr/lib/gcc/x86_64-redhat-linux
/usr/lib/gcc/x86_64-redhat-linux/4.9.2
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libcaf_single.a
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libgfortran.a
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libgfortran.so
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libgfortranbegin.a
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.f90
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.h
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.mod
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib_kinds.mod
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/libcaf_single.a
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/libgfortran.so
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/libgfortran.spec
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/libgfortranbegin.a
/usr/libexec/gcc
/usr/libexec/gcc/x86_64-redhat-linux
/usr/libexec/gcc/x86_64-redhat-linux/4.9.2
/usr/libexec/gcc/x86_64-redhat-linux/4.9.2/f951
/usr/share/doc/gcc-gfortran
/usr/share/doc/gcc-gfortran/ChangeLog-2002.bz2
/usr/share/doc/gcc-gfortran/ChangeLog-2002.libgfortran.bz2
...
usr/share/doc/gcc-gfortran/ChangeLog.bz2
/usr/share/doc/gcc-gfortran/ChangeLog.libgfortran.bz2
/usr/share/doc/gcc-gfortran/ChangeLog.ptr.bz2
/usr/share/info/gfortran.info.gz
/usr/share/man/man1/gfortran.1.gz

能够经过向查询添加 -c 选项,将列出的文件限制到配置文件。相似地,-d 选项将显示结果限制到文档文件。

查询包文件

上述包命令查询 RPM 数据库中已安装的包。若是您仅下载了一个包并想要一样的信息,能够在查询中使用 -p 选项(表示包文件)并指定(用于安装该包的)包文件 名来得到此信息。 显示了咱们以前下载的两个 vim 包的这些信息。咱们仅以根用户身份运行它,由于这些文件位于根用户的主目录中。能够添加其余查询选项,好比添加 -l 来列出文件或添加 -i 来列出信息。

显示两个 vim 包的包文件信息
1
2
3
4
5
6
7
8
9
[ian@attic-f21 ~]$ # Query vim packages
[ian@attic-f21 ~]$ rpm -qp *.rpm
vim-common-7.4.475-2.fc21.x86_64
vim-enhanced-7.4.475-2.fc21.x86_64
[ian@attic-f21 ~]$ # Query vim configuration files
[ian@attic-f21 ~]$ rpm -qpc *.rpm
/etc/vimrc
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh

查询全部已安装的包

-a 选项将您的查询应用到全部已安装的包。这可能生成大量输出,因此一般应该将它与一个或多个过滤条件结合使用,好比使用 sort 对清单排序,使用 more 或 less 分页显示它,使用 wc 获取包或文件数量,或者在不肯定名称的时候,使用 grep 搜索包。 显示了如下查询:

  1. 系统上全部包的有序列表
  2. 系统上全部包的总数
  3. 系统上全部包中的全部文件总数
  4. 使用 RPM 安装的全部文档文件总数
  5. 搜索名称包含 “fortran”(不区分大小写)的全部包
查询全部包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[ian@attic-f21 ~]$ < strong >rpm -qa | sort | more</ strong >
aaajohan-comfortaa-fonts-2.004-4.fc21.noarch
aalib-libs-1.4.0-0.26.rc5.fc21.x86_64
abattis-cantarell-fonts-0.0.16-2.fc21.noarch
abrt-2.3.0-8.fc21.x86_64
abrt-addon-ccpp-2.3.0-8.fc21.x86_64
abrt-addon-kerneloops-2.3.0-8.fc21.x86_64
abrt-addon-pstoreoops-2.3.0-8.fc21.x86_64
abrt-addon-python-2.3.0-8.fc21.x86_64
abrt-addon-python3-2.3.0-8.fc21.x86_64
abrt-addon-vmcore-2.3.0-8.fc21.x86_64
abrt-addon-xorg-2.3.0-8.fc21.x86_64
abrt-cli-2.3.0-8.fc21.x86_64
abrt-dbus-2.3.0-8.fc21.x86_64
abrt-desktop-2.3.0-8.fc21.x86_64
abrt-gui-2.3.0-8.fc21.x86_64
abrt-gui-libs-2.3.0-8.fc21.x86_64
abrt-java-connector-1.1.0-2.fc21.x86_64
abrt-libs-2.3.0-8.fc21.x86_64
abrt-plugin-bodhi-2.3.0-8.fc21.x86_64
abrt-python-2.3.0-8.fc21.x86_64
abrt-python3-2.3.0-8.fc21.x86_64
abrt-retrace-client-2.3.0-8.fc21.x86_64
abrt-tui-2.3.0-8.fc21.x86_64
--More--
[[ian@attic-f21 ~]$ rpm -qa | wc -l
1540
[ian@attic-f21 ~]$ rpm -qal | wc -l
179111
[ian@attic-f21 ~]$ rpm -qad | wc -l
47711
[ian@attic-f21 ~]$ rpm -qa | grep -i fortran
gcc-gfortran-4.9.2-6.fc21.x86_64
libgfortran-4.9.2-6.fc21.x86_64

使用 rpm -qa 可简化多个系统的管理。若是您将有序输出重定向到一个机器上的一个文件,而后在另外一个机器上执行相同操做,可使用 diff 程序查找区别。

哪一个包拥有一个文件?

因为您能够列出全部包和一个包中的全部文件,您如今拥有查找哪一个包拥有一个文件所需的全部信息。可是,rpm 命令提供了 -f(或 --file)选项来帮助定位拥有一个已安装文件的包。假设您想知道咱们以前看到的哪一个 vim 包实际提供了 vim 命令。您须要提供该文件的完整路径。 展现了如何使用 which 命令获取 vim 命令的完整路径,以及使用此输出做为 rpm -qf 命令的输入的方便提示。请注意,`which vim` 中的刻度标记是反向刻度标记。在 Bash shell 中,使用此命令的另外一种方式是使用 $(which vim)

哪一个包提供了 vim 可执行文件
1
2
3
4
5
6
[ian@attic-f21 ~]$ which vim
/usr/bin/vim
[ian@attic-f21 ~]$ rpm -qf `which vim`
vim-enhanced-7.4.475-2.fc21.x86_64
[ian@attic-f21 ~]$ rpm -qf $(which vim)
vim-enhanced-7.4.475-2.fc21.x86_64

RPM 依赖项

您以前已经了解到,因为存在依赖项,咱们擦除 libquadmath-devel 的尝试失败了。除了文件以外,RPM 包还能够包含其余包可能依赖的任意功能

正如您看到的,这一般没有问题。若是须要一次安装多个包,其中一些包可能会依赖其余包,可使用 yum,或者向 rpm -Uvh 命令提供整个包列表,它将分析依赖项并按正确的顺序执行安装。

除了尝试安装和擦除包并得到错误消息以外,还能够经过一些方式肯定某个包须要或依赖哪些文件或功能。

rpm 命令提供了询问已安装的包或包文件来肯定它们依赖或须要 哪些功能的选项。这是 --requires 选项,能够将它缩写为 -R。 显示了 gcc-gfortran 须要的功能。若是想要查询包文件而不是 RPM 数据库,能够添加 -p 选项并使用完整的 RPM 文件名。

gcc-gfortran 须要哪些功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[ian@attic-f21 ~]$ rpm -qR gcc-gfortran
/bin/sh
/bin/sh
/sbin/install-info
/sbin/install-info
gcc = 4.9.2-6.fc21
ld-linux-x86-64.so.2()(64bit)
ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgfortran = 4.9.2-6.fc21
libgfortran.so.3()(64bit)
libgmp.so.10()(64bit)
libm.so.6()(64bit)
libmpc.so.3()(64bit)
libmpfr.so.4()(64bit)
libquadmath = 4.9.2-6.fc21
libquadmath-devel = 4.9.2-6.fc21
libz.so.1()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
rtld(GNU_HASH)

将功能与提供它们的包匹配可能有点困难。yum 命令和 deplist 选项可在这里派上用场。若是您提供了一个未限定版本的包名称,可能会得到一个包含其余已知版本的清单。 展现了如何获取已安装的 gcc-gfortran 版本的依赖项列表。

使用 yum deplist 查找 gcc-gfortran 所需的功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45