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
相關文章
相關標籤/搜索