在本教程中,学习如何使用 RPM 和 YUM 工具管理 Linux 系统上的包。学习:
本教程将帮助您针对 Linux Professional Institute 的初级管理 (LPIC-1) 考试 101 的主题 102 中的目标 102.5 进行应考准备。该目标的权重为 3。
在过去,许多 Linux 程序以源代码形式发行,用户可将它连同所需的手册页、配置文件等一起构建到需要的程序或程序集中。现在,大部分 Linux 发行商都使用预先构建的程序或称为包 的程序集,这些包已准备好安装在该发行版上。在本教程,您将学习可帮助安装、更新和删除包的包管理工具。本教程将重点介绍 Red Hat 开发的 Red Hat Package Manager (RPM),以及最初在杜克大学物理系开发的用来管理 Red Hat Linux 系统的 Yellowdog Updater Modified (YUM)。本系列的另一篇教程 “学习 Linux 101:Debian 包管理” 介绍了 Debian 系统上使用的包管理工具。
从用户角度讲,基本的包管理功能是通过命令提供的。随着 Linux 开发人员努力让 Linux 变得更容易使用,基本工具已得到了其他工具的补充,包括 GUI 工具,它们为用户隐藏了基本工具的一些复杂性。在本教程和 Debian 包管理 教程中,我们将重点介绍基本工具,但也会提到其他一些工具,以便您能进一步了解它们。
要从本系列教程中获得最大收获,您应该拥有 Linux 的基本知识和一个正常工作的 Linux 系统,您可以在这个系统上实践本教程中涵盖的命令。有时程序的不同版本会得到不同的输出格式,所以您的结果可能并不总是与这里给出的清单和图完全相同。具体地讲,我展示的许多输出都高度依赖于我们的系统上已安装的包。您自己的输出可能非常不同,但您应该能够发现一些重要共性。除非另行说明,本教程中的示例使用的是 Fedora 20 系统。
RPM、YUM 和 APT(用于 Debian 系统)有许多相似之处。它们都能安装和删除包。有关已安装包的信息保留在数据库中。所有工具都拥有基本的命令行功能,而其他一些工具可以提供对用户更友好的接口。所有工具都能从互联网检索包。
安装 Linux 系统时,通常会安装大量包。可针对系统的目标用途而自定义这个包集合,比如用作服务器、桌面或开发人员工作站。有时,可能还需要安装新包来添加新功能,更新已有的包,甚至删除不再需要的或已被新包淘汰的包。我们看看如何执行这些任务,并解决一些相关的难题,比如找到哪个包可能包含某个特定命令。
Red Hat 于 1995 年引入了 RPM。RPM 现在是 Linux Standard Base (LSB) 中用于打包的包管理系统。rpm
命令选项分组为 3 个小组:
本教程将重点介绍前两组命令选项。在 RPM 的手册页中可以找到其他功能的信息。
我们还应注意到,rpm
是用于 RPM 的主要命令的命令名称,而 .rpm 是用于 RPM 文件的扩展名。所以 “一个 rpm” 或 “xxx rpm” 通常指一个 RPM 文件,而 rpm
通常指该命令。
YUM 向 RPM 系统添加了自动更新和包管理,包括依赖项管理。除了了解系统上已安装的包之外,YUM 与 Debian Advanced Packaging Tool (APT) 很相似,因为它使用了存储库,存储库是一种包集合,通常可通过连接网络进行访问。
假设您希望编译一个 Fortran 程序,一位同事告诉您使用 gfortran
命令。您可以尝试使用 gfortran --help
,也可以尝试使用 which gfortran
,或者尝试使用 type 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
(表示安装)选项来安装它,如 中所示。
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 和所需的必备依赖项。备注:根据您已在系统上安装的工具,您的依赖项可能不同。
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 签名检查下载的包。
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
在本地数据库中为启用的存储库创建信息。举例而言,如果您更改了存储库配置,则可以这么做。
如果想要删除包,可使用 yum
的 remove
选项或 rpm
的 -e
选项。一个使用 rpm -e
删除 gcc-gfortran 的测试运行如 所示。如果该包可以删除,则没有输出。
1
2
|
[root@attic-f21 ~]#
rpm -e --test gcc-gfortran
[
|
不同于使用 apt-get
对 Debian 包的模拟删除,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 会建议删除这些包和依赖包,如 所示。
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 包升级到更高级别。可以使用 yum update
更新整个系统,或者可以指定一个包或一种通配符规范。 展示了如何更新所有名称以 “pop” 开头的包。注意,这里使用了省略符号来阻止 "*" 的 shell 扩展。
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 包。
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 需要包文件的完整名称(或 URL),比如 gcc-gfortran-4.9.2-6.fc21.x86_64.rpm。另一方面,使用 yum
安装或使用任一命令删除 rpm 仅需要包名称,比如 gcc-gfortran。与 APT 一样,RPM 维护着已安装包的内部数据库,允许您使用包名称来处理已安装的包。在本节中,我们使用 rpm
命令的 -q
(表示查询)选项或关联的 yum
查询,查看这个数据库中提供的一些信息。
我们将重新安装 gcc-gfortran 包来提供我们的示例。
这个基本查询仅循环查询某个包是否已安装,如果已安装,它的版本是什么。添加 -i
选项,您会获得该包的信息。请注意,您需要拥有根用户权限才能安装、升级或删除包,但非根用户可以对 rpm 数据库执行查询。
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 包。
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
选项所没有的。请参阅手册页了解更多信息。
您常常想知道包中的内容或一个特定文件来自哪个包。要列出 gcc-gfortran 包中的文件,可以使用 -ql
选项,如 所示。这个包中有许多文件,所以我们仅显示了部分输出。
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
来列出信息。
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
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)
。
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
|
您之前已经了解到,由于存在依赖项,我们擦除 libquadmath-devel 的尝试失败了。除了文件之外,RPM 包还可以包含其他包可能依赖的任意功能。
正如您看到的,这通常没有问题。如果需要一次安装多个包,其中一些包可能会依赖其他包,可以使用 yum
,或者向 rpm -Uvh
命令提供整个包列表,它将分析依赖项并按正确的顺序执行安装。
除了尝试安装和擦除包并获得错误消息之外,还可以通过一些方式确定某个包需要或依赖哪些文件或功能。
rpm
命令提供了询问已安装的包或包文件来确定它们依赖或需要 哪些功能的选项。这是 --requires
选项,可以将它缩写为 -R
。 显示了 gcc-gfortran 需要的功能。如果想要查询包文件而不是 RPM 数据库,可以添加 -p
选项并使用完整的 RPM 文件名。