rpm软件包以及rmp命令

强颜欢笑 提交于 2021-01-02 16:38:44

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 没有硬件限制
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!