天天看點

二進制RPM包查詢指令詳解

RPM包管理系統是非常強大和友善的包管理系統,它比源碼包的友善之處就在于可以使用指令查詢、更新和解除安裝。在在查詢的時候,其實是在查詢/var/lib/rpm/這個目錄下的資料庫檔案,那為什麼不直接檢視這些檔案呢?你可以嘗試使用vim檢視這些檔案,會發現都是亂碼。也就是說,這些檔案其實都是二進制檔案,不能直接用編輯器檢視,是以才需要使用指令檢視。

  1. 查詢指令的格式

RPM查詢指令采用如下格式:

選項 說明
-q 查詢query;
-a 所有軟體包all;
-i 軟體包資訊information;
-p 主要指沒有安裝的軟體包package;
-l 軟體封包件清單list;
-f 查詢系統檔案屬于哪個軟體包file;
-R 軟體包依賴性requires;

在查詢中,q選項為必須選項,p為查詢未安裝軟體包選項,可自由進行組合查詢已安裝或未安裝軟體包資訊,常見的組合見下表:

組合選項 說明
-q 包名 查詢是否安裝該軟體包;
-qa 列出已安裝所有軟體包;
-qi 包名 查詢已軟體包的詳細資訊;
-qip 全包名 查詢沒有安裝軟體包詳細資訊;
-ql 包名 列出已安裝軟體封包件清單;
-qlp 全包名 查詢沒有安裝的軟體封包件清單;
-qf 通過系統檔案查詢該檔案屬于哪個軟體包;
-qR 包名 檢視已安裝軟體的依賴軟體包;
-qRP 全包名 檢視沒有安裝的軟體包的依賴包;
  1. 查詢軟體包是否安裝

可以查詢軟體包是否安裝,指令格式如下:

選項 說明
-q 查詢

例如,想檢視一下apache包是否安裝,可以執行如下指令:

因為apache是已經安裝完成的包,是以隻需要給出“包名”,系統就可以識别。而沒有裝的包就必須使用“絕對路徑+包全名”格式才可以确定包。前面一直強調的包名和包全名不能寫混亂就是這個原因。

  1. 查詢系統中的所有安裝軟體包

可以查詢Linux 系統中所有已經安裝的軟體包,指令格式如下:

[[email protected] ~]# rpm -qa
setup-2.8.14-20.el6_4.1.noarch
basesystem-10.0-4.el6.noarch
tzdata-2016c-1.el6.noarch
nss-softokn-freebl-3.14.3-23.el6_7.x86_64
ncurses-libs-5.7-4.20090207.el6.x86_64
libattr-2.4.44-7.el6.x86_64
...省略部分輸出
           

當然,可以使用管道符來檢視所需的内容,比如:

你會發現,使用“rpm -q 包名”隻能檢視這個包是否安裝,但是使用“rpm -qa |grep 包名”會把包含包名稱的所有包都列出來。

  1. 查詢軟體包的詳細資訊

可以查詢已經安裝的某個軟體包的詳細資訊,指令格式如下:

選項 說明
-i 查詢軟體資訊(infomation)

例如,檢視apache包的安裝資訊,可以使用一下指令:

[[email protected] ~]# rpm -qi httpd
Name        : httpd                        Relocations: (not relocatable)
#包名
Version     : 2.2.15                            Vendor: CentOS
#版本和廠商
Release     : 69.el6.centos                 Build Date: Tue 19 Jun 2018 11:45:51 PM CST
#發行版本和建立時間
Install Date: Mon 23 Mar 2020 07:15:07 PM CST      Build Host: x86-01.bsys.centos.org
#安裝時間
Group       : System Environment/Daemons    Source RPM: httpd-2.2.15-69.el6.centos.src.rpm
#組合源RPM封包件名
Size        : 3170514                          License: ASL 2.0
#軟體大小和許可協定
Signature   : RSA/SHA1, Wed 20 Jun 2018 07:36:47 PM CST, Key ID 0946fca2c105b9de
#數字簽名
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://httpd.apache.org/
#廠商網址
Summary     : Apache HTTP Server
#軟體包說明
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
#描述
           

通過這條指令可以看到包名、版本、發行版本、安裝時間、軟體包大小等資訊,也可以查詢還沒有安裝的軟體包的詳細資訊,指令格式如下:

選項 說明
-p 查詢沒有安裝的軟體包(package)
注意:沒有安裝的軟體包是存放在CD光牒中的,而且因為沒有安裝,是以需要使用全包名。
  1. 查詢軟體包中的檔案清單

可以查詢已經安裝的軟體包中的檔案清單和安裝的完整目錄,指令格式如下:

選項 說明
-l 列出軟體包中所有的檔案清單和軟體所安裝的目錄(list)

那麼,可以查詢還沒有安裝的軟體包中的檔案清單和打算安裝的位置嗎?答案是可以的,指令格式如下:

選項 說明
-p 查詢沒有安裝的軟體包的資訊(package)
  1. 查詢系統檔案屬于哪個RPM包

既然可以知道每個RPM包中的檔案的安裝位置,那麼可以查詢系統檔案屬于哪個RPM包嗎?當然可以,不過需要注意的是,手工建立的檔案是不能查詢的,因為這些檔案不是通過RPM包安裝的,當然不能反向查詢它屬于哪個RPM包,指令格式如下:

選項 說明
-f 查詢系統檔案屬于哪個軟體包(file)

例如,我想查詢下ls指令是由哪個軟體包提供的,可以執行如下指令:

[[email protected] ~]# whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
#先使用whereis指令查詢ls指令的二進制檔案位址
[[email protected] ~]# rpm -qf /bin/ls
coreutils-8.4-43.el6.x86_64
           
  1. 查詢軟體包所依賴的軟體包

查詢系統中和已經安裝的軟體包郵依賴關系的軟體包,指令格式如下:

選項 說明
-R 查詢軟體包的依賴性(requires)

例如,想查詢一下apache包的依賴包,可以執行如下指令:

[[email protected] ~]# rpm -qR httpd
/bin/bash  
/bin/sh  
/etc/mime.types  
/usr/sbin/useradd  
apr-util-ldap  
chkconfig  
config(httpd) = 2.2.15-69.el6.centos
...省略部分輸出...
           

可以查詢沒有安裝的軟體包的依賴性嗎?加“-p”選項即可,例如,檢視一下還沒有安裝的bind軟體包的依賴性,可以執行如下指令:

繼續閱讀