Linux下的软件包分为源码包和二进制包
源码包就是一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的。安装时会进行编译,比较耗时,容易出错。
二进制包,也就是源码包经过成功编译之后产生的包。由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快(同 Windows下安装软件速度相当),且安装过程报错几率大大减小。
二进制包是 Linux 下默认的软件安装包,因此二进制包又被称为默认安装软件包。目前主要有以下 2 大主流的二进制包管理系统:
- RPM 包管理系统:功能强大,安装、升级、査询和卸载非常简单方便,因此很多 Linux 发行版都默认使用此机制作为软件安装的管理方式,例如 Fedora、CentOS、SuSE 等。
- DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。
以下是使用rpm命令管理apm二进制软件包的说明。
RPM包默认安装路径
通常情况下,RPM 包采用系统默认的安装路径,所有安装文件会按照类别分散安装到表 1 所示的目录中。
安装路径 | 含 义 |
---|---|
/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 没有硬件限制