RPM包管理系统是非常强大和方便的包管理系统,它比源码包的方便之处就在于可以使用命令查询、升级和卸载。在在查询的时候,其实是在查询/var/lib/rpm/这个目录下的数据库文件,那为什么不直接查看这些文件呢?你可以尝试使用vim查看这些文件,会发现都是乱码。也就是说,这些文件其实都是二进制文件,不能直接用编辑器查看,所以才需要使用命令查看。
- 查询命令的格式
RPM查询命令采用如下格式:
[root@localhost ~]# 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 全包名 | 查看没有安装的软件包的依赖包; |
- 查询软件包是否安装
可以查询软件包是否安装,命令格式如下:
[root@localhost ~]# rpm -q 包名
选项 | 说明 |
-q | 查询 |
例如,想查看一下apache包是否安装,可以执行如下命令:
[root@localhost ~]# rpm -q httpd
因为apache是已经安装完成的包,所以只需要给出“包名”,系统就可以识别。而没有装的包就必须使用“绝对路径+包全名”格式才可以确定包。前面一直强调的包名和包全名不能写混乱就是这个原因。
- 查询系统中的所有安装软件包
可以查询Linux 系统中所有已经安装的软件包,命令格式如下:
[root@localhost ~]# 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
...省略部分输出
当然,可以使用管道符来查看所需的内容,比如:
[root@localhost ~]# rpm -qa | grep httpd
你会发现,使用“rpm -q 包名”只能查看这个包是否安装,但是使用“rpm -qa |grep 包名”会把包含包名称的所有包都列出来。
- 查询软件包的详细信息
可以查询已经安装的某个软件包的详细信息,命令格式如下:
[root@localhost ~]# rpm -qi 包名
选项 | 说明 |
-i | 查询软件信息(infomation) |
例如,查看apache包的安装信息,可以使用一下命令:
[root@localhost ~]# 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.
#描述
通过这条命令可以看到包名、版本、发行版本、安装时间、软件包大小等信息,也可以查询还没有安装的软件包的详细信息,命令格式如下:
[root@localhost ~]# rpm -qip 包全名
选项 | 说明 |
-p | 查询没有安装的软件包(package) |
注意:没有安装的软件包是存放在光盘中的,而且因为没有安装,所以需要使用全包名。
- 查询软件包中的文件列表
可以查询已经安装的软件包中的文件列表和安装的完整目录,命令格式如下:
[root@localhost ~]# rpm -ql 包名
选项 | 说明 |
-l | 列出软件包中所有的文件列表和软件所安装的目录(list) |
那么,可以查询还没有安装的软件包中的文件列表和打算安装的位置吗?答案是可以的,命令格式如下:
[root@localhost ~]# rpm -qlp 全包名
选项 | 说明 |
-p | 查询没有安装的软件包的信息(package) |
- 查询系统文件属于哪个RPM包
既然可以知道每个RPM包中的文件的安装位置,那么可以查询系统文件属于哪个RPM包吗?当然可以,不过需要注意的是,手工建立的文件是不能查询的,因为这些文件不是通过RPM包安装的,当然不能反向查询它属于哪个RPM包,命令格式如下:
[root@localhost ~]# rpm -qf 系统文件名
选项 | 说明 |
-f | 查询系统文件属于哪个软件包(file) |
例如,我想查询下ls命令是由哪个软件包提供的,可以执行如下命令:
[root@localhost ~]# whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
#先使用whereis命令查询ls命令的二进制文件地址
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-43.el6.x86_64
- 查询软件包所依赖的软件包
查询系统中和已经安装的软件包邮依赖关系的软件包,命令格式如下:
[root@localhost ~]# rpm -qR 包名
选项 | 说明 |
-R | 查询软件包的依赖性(requires) |
例如,想查询一下apache包的依赖包,可以执行如下命令:
[root@localhost ~]# 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软件包的依赖性,可以执行如下命令:
[root@localhost ~]# rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.47.rc1.el6.x86_64.rpm