RPM包管理系統是非常強大和友善的包管理系統,它比源碼包的友善之處就在于可以使用指令查詢、更新和解除安裝。在在查詢的時候,其實是在查詢/var/lib/rpm/這個目錄下的資料庫檔案,那為什麼不直接檢視這些檔案呢?你可以嘗試使用vim檢視這些檔案,會發現都是亂碼。也就是說,這些檔案其實都是二進制檔案,不能直接用編輯器檢視,是以才需要使用指令檢視。
- 查詢指令的格式
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 全包名 | 檢視沒有安裝的軟體包的依賴包; |
- 查詢軟體包是否安裝
可以查詢軟體包是否安裝,指令格式如下:
選項 | 說明 |
---|---|
-q | 查詢 |
例如,想檢視一下apache包是否安裝,可以執行如下指令:
因為apache是已經安裝完成的包,是以隻需要給出“包名”,系統就可以識别。而沒有裝的包就必須使用“絕對路徑+包全名”格式才可以确定包。前面一直強調的包名和包全名不能寫混亂就是這個原因。
- 查詢系統中的所有安裝軟體包
可以查詢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 包名”會把包含包名稱的所有包都列出來。
- 查詢軟體包的詳細資訊
可以查詢已經安裝的某個軟體包的詳細資訊,指令格式如下:
選項 | 說明 |
---|---|
-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光牒中的,而且因為沒有安裝,是以需要使用全包名。
- 查詢軟體包中的檔案清單
可以查詢已經安裝的軟體包中的檔案清單和安裝的完整目錄,指令格式如下:
選項 | 說明 |
---|---|
-l | 列出軟體包中所有的檔案清單和軟體所安裝的目錄(list) |
那麼,可以查詢還沒有安裝的軟體包中的檔案清單和打算安裝的位置嗎?答案是可以的,指令格式如下:
選項 | 說明 |
---|---|
-p | 查詢沒有安裝的軟體包的資訊(package) |
- 查詢系統檔案屬于哪個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
- 查詢軟體包所依賴的軟體包
查詢系統中和已經安裝的軟體包郵依賴關系的軟體包,指令格式如下:
選項 | 說明 |
---|---|
-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軟體包的依賴性,可以執行如下指令: