rpm軟件包以及rmp命令


Linux下的軟件包分為源碼包和二進制包

源碼包就是一大堆源代碼程序,是由程序員按照特定的格式和語法編寫出來的。安裝時會進行編譯,比較耗時,容易出錯。

二進制包,也就是源碼包經過成功編譯之后產生的包。由於二進制包在發布之前就已經完成了編譯的工作,因此用戶安裝軟件的速度較快(同 Windows下安裝軟件速度相當),且安裝過程報錯幾率大大減小。

 

二進制包是 Linux 下默認的軟件安裝包,因此二進制包又被稱為默認安裝軟件包。目前主要有以下 2 大主流的二進制包管理系統:

  • RPM 包管理系統:功能強大,安裝、升級、査詢和卸載非常簡單方便,因此很多 Linux 發行版都默認使用此機制作為軟件安裝的管理方式,例如 Fedora、CentOS、SuSE 等。
  • DPKG 包管理系統:由 Debian Linux 所開發的包管理機制,通過 DPKG 包,Debian Linux 就可以進行軟件包管理,主要應用在 Debian 和 Ubuntu 中。

 

以下是使用rpm命令管理apm二進制軟件包的說明。

RPM包默認安裝路徑

通常情況下,RPM 包采用系統默認的安裝路徑,所有安裝文件會按照類別分散安裝到表 1 所示的目錄中。

表 1 RPM 包默認安裝路徑
安裝路徑 含 義
/etc/ 配置文件安裝目錄
/usr/bin/ 可執行的命令安裝目錄
/usr/lib/ 程序所使用的函數庫保存位置
/usr/share/doc/ 基本的軟件使用手冊保存位置
/usr/share/man/ 幫助文件保存位置


RPM 包的默認安裝路徑可以通過命令查詢的。

除此之外,RPM 包也支持手動指定安裝路徑,但此方式並不推薦。因為一旦手動指定安裝路徑,所有的安裝文件會集中安裝到指定位置,且系統中用來查詢安裝路徑的命令也無法使用(需要進行手工配置才能被系統識別),得不償失。

 

RPM 包的安裝

rpm -ivh 包全名

注意一定是包全名。涉及到包全名的命令,一定要注意路徑,可能軟件包在光盤中,因此需提前做好設備的掛載工作。

此命令中各選項參數的含義為:

    • -i:安裝(install);
    • -v:顯示更詳細的信息(verbose);
    • -h:打印 #,顯示安裝進度(hash);

一次性安裝多個軟件包,僅需將包全名用空格分開即可

rpm -ivh a.rpm b.rpm c.rpm

RPM包的升級

rpm -Uvh 包全名

-U(大寫)選項的含義是:如果該軟件沒安裝過則直接安裝;若沒安裝則升級至最新版本。

 rpm -Fvh 包全名

-F(大寫)選項的含義是:如果該軟件沒有安裝,則不會安裝,必須安裝有較低版本才能升級。

 

RPM包的卸載

 rpm -e 包名

RPM 軟件包的卸載要考慮包之間的依賴性。例如,我們先安裝的 httpd 軟件包,后安裝 httpd 的功能模塊 mod_ssl 包,那么在卸載時,就必須先卸載 mod_ssl,然后卸載 httpd,否則會報錯。

 

查詢軟件包是否安裝

rpm -q 包名

-q 表示查詢,是 query 的首字母。

如果已經安裝直接返回包全名, 如果沒有安裝則提示沒有安裝。注意使用此命令 包名必須完全正確

[root@localhost vagrant]# rpm -q httpd 
httpd-2.4.6-89.el7.centos.1.x86_64
[root@localhost vagrant]# rpm -q httpddd 
package httpddd is not installed

查詢系統中所有安裝的軟件包

rpm -qa

此命令列出所有已經安裝的軟件包,通常配合grep一起使用,可以查詢已經安裝的包含某些關鍵字的軟件包。如下

[root@localhost ~]# rpm -qa | grep httpd
httpd-devel-2.2.15-15.el6.centos.1.i686
httpd-tools-2.2.15-15.el6.centos.1.i686
httpd-manual-2.2.15-15.el6.centos.1.noarch
httpd-2.2.15-15.el6.centos.1.i686

 

查詢已經安裝軟件包的詳細信息

rpm -qi 包名

-i 選項表示查詢軟件信息,是 information 的首字母。

只使用 -q 只返回包全名, 使用 -qi 可以返回軟件包的詳細信息。 如果軟件未安裝,則提示未安裝。查詢的包名必須完全正確。

[root@localhost vagrant]# rpm -qi httpd
Name        : httpd
Version     : 2.4.6
Release     : 89.el7.centos.1
Architecture: x86_64
Install Date: Thu 12 Sep 2019 06:17:11 AM UTC
Group       : System Environment/Daemons
Size        : 9817317
License     : ASL 2.0
Signature   : RSA/SHA256, Wed 31 Jul 2019 03:37:23 AM UTC, Key ID 24c6a8a7f4a80eb5
Source RPM  : httpd-2.4.6-89.el7.centos.1.src.rpm
Build Date  : Mon 29 Jul 2019 05:21:18 PM UTC
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
[root@localhost vagrant]# rpm -qi http
package http is not installed

 

查詢已經下載的軟件包的詳細信息

rpm -qip 絕對路徑+包全名

-p 選項表示查詢下載好的軟件包,是 package 的首字母。

如果軟件包已經下載了,但還沒有安裝時,要查詢相關信息,可以使用此命令

注意,這里用的是包全名,且未安裝的軟件包需使用“絕對路徑+包全名”的方式才能確定包。

 

查詢已安裝的軟件包的文件列表

rpm -ql 包名

-l 選項表示列出軟件包所有文件的安裝目錄

 

查詢下載的未安裝軟件包的文件列表

rpm -qlp 絕對路徑+包全名

-p 選項表示查詢未安裝的軟件包信息,是 package 的首字母。

如果想要看一下某個軟件包包含哪些文件,但此軟件包還沒有安裝時可以使用此命令。如果已經安裝了使用-ql會更加簡潔。

由於軟件包還未安裝,因此需要使用“絕對路徑+包全名”的方式才能確定包。

[root@localhost ~]# rpm -qlp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
…省略部分輸出…

 

查詢系統文件屬於哪個RPM包

rpm -ql 命令是通過軟件包查詢所含文件的安裝路徑,rpm 還支持反向查詢,即查詢某系統文件所屬哪個 RPM 軟件包。其命令格式如下

rpm -qf 系統文件名

-f 選項的含義是查詢系統文件所屬哪個軟件包,是 file 的首字母。

注意,只有使用 RPM 包安裝的文件才能使用該命令,手動方式建立的文件無法使用此命令。

[root@localhost etc]# rpm -qf /etc/php.ini
php-common-7.3.9-1.el7.remi.x86_64

查詢已安裝的軟件包的依賴關系

使用 rpm 命令安裝 RPM 包,需考慮與其他 RPM 包的依賴關系。rpm -qR 命令就用來查詢某已安裝軟件包依賴的其他包,該命令的格式為:

rpm -qR 包名

-R(大寫)選項的含義是查詢軟件包的依賴性,是 requires 的首字母。

 

查詢未安裝的軟件包的依賴關系

rpm -qRp 絕對路徑+包全名

如下

rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm

 

p 指的是下載好的軟件包(package),這個軟件包可能已經安裝了,也可能沒有安裝。后面跟的已下載的軟件包的保存路徑

 

注意,前面說的包名和包全名不是一回事。包名是包全名的一部分。

包全名的命名規則

包名-版本號-發布次數-發行商-Linux平台-適合的硬件平台-包擴展名

用戶通過名稱就可以直接獲取這類包的版本、適用平台等信息。

例如,RPM 包的名稱是httpd-2.2.15-15.el6.centos.1.i686.rpm,其中:

    • httped:軟件包名。這里需要注意,httped 是包名,而 httpd-2.2.15-15.el6.centos.1.i686.rpm 通常稱為包全名,包名和包全名是不同的,在某些 Linux 命令中,有些命令(如包的安裝和升級)使用的是包全名,而有些命令(包的查詢和卸載)使用的是包名,一不小心就會弄錯。
    • 2.2.15:包的版本號,版本號的格式通常為主版本號.次版本號.修正號
    • 15:二進制包發布的次數,表示此 RPM 包是第幾次編程生成的。
    • el*:軟件發行商,el6 表示此包是由 Red Hat 公司發布,適合在 RHEL 6.x (Red Hat Enterprise Unux) 和 CentOS 6.x 上使用。
    • centos:表示此包適用於 CentOS 系統。
    • i686:表示此包使用的硬件平台,目前的 RPM 包支持的平台如表 1 所示:

      表 1 RPM 包適用的硬件平台
      平台名稱 適用平台信息
      i386 386 以上的計算機都可以安裝
      i586 686 以上的計算機都可以安裝
      i686 奔騰 II 以上的計算機都可以安裝,目前所有的 CPU 是奔騰 II 以上的,所以這個軟件版本居多
      x86_64 64 位 CPU 可以安裝
      noarch 沒有硬件限制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM