RPM 包的管理

RPM 包的管理

RPM 是 RedHat Package Manager(RedHat 软件包管理工具)类似 Windows 里面的“添加/删除程序”

rpm 执行的安装包有二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由 RPM 自动编译、安装,经常以 src.rpm 作为后缀名。虽然使用源代码进行软件编译可以具有定制化的设置,但对于 Linux distribution 的发行商来说,则有软件管理不完的问题,毕竟不是每个人都会进行源代码编译的。这个问题将会严重的影响 linux 平台上软件的发行与推广。为了解决这个问题,厂商先在他们的系统上面编译好了我们用户所需要的软件,然后将这个编译好并可执行的软件直接发布给用户安装。不同的 Linux 发行版使用不同的打包系统,一般而言,大多数发行版分别属于两大包管理技术阵营:Debian 的 .deb,和 Red Hat 的 .rpm。(这也是 Linux 发行版太多导致没有统一标准的弊端的体现),也有一些重要的例外,比方说 Gentoo,Slackware,和 Foresight,但大多数会使用这两个基本系统中的一个。

介绍

RPM 最大的特点就是需要安装的软件已经编译过,并已经打包成 RPM 机制的安装包,通过里头默认的数据库记录这个软件安装时需要的依赖软件。当安装在你的 Linux 主机时,RPM 会先依照软件里头的数据查询 Linux 主机的依赖属性软件是否满足,若满足则予以安装,若不满足则不予安装。

优点:

缺点:

原理图:

为了解决 RPM 属性依赖的问题,下面也将会为你详细介绍 YUM 的使用方法。

注意点

RPM 包命名的含义

RPM 包的命名格式:软件名称(又称包命)-版本号-发布次数.适合linux系统.硬件平台.rpm

例如:ftp-0.17-74.fc27.i686.rpm

注意:

包全名:rpm 操作没有安装的软件包,软件包使用的是包全名

包名:rpm 操作的已经安装的软件,软件包使用的是包名,你也可以理解为软件名

例如上面的例子,包全名为 ftp-0.17-74.fc27.i686.rpm,包名为 ftp

i686、i386 表示 32 位系统,noarch 表示 32 位 64 位都可以,通用

通过 rpm -qa 查出来的,都是包名(软件名)

RPM 安装软件的默认路径

RPM 操作

查询模式

RPM 在查询的时候,其实查询的地方是 /var/lib/rpm/ 这个目录下的数据库文件。另外,RPM 也可以查询未安装的 RPM 文件内的信息。

这个目录下的都是二进制文件,无法看到其中的内容

查询语法:

rpm {-q|--query} [select-options] [query-options]

注意:在查询的部分,所有的参数之前都要加上 -q 才是所谓的查询。

q 后面的常用参数说明(后面括号内为英文说明):

用法:

rpm -q firefox:查询你的 Linux本地是否有安装某个软件

rpm -qa:查询本地所有的软件,结果都是软件名,在后续 rpm -q 命令的使用中,理应输入完成软件名,但是你可以不使用完整的软件名,只是用前缀即可,比如后文的 firefox

rpm -qa | grep 'firefox':查询是否安装某软件

rpm -ql firefox:查询属于该软件所提供的所有目录与文件,或者说安装后生成了哪些文件,或者说,软件装到哪儿了,可以看到大部分的内容都在 /usr/lib64 文件夹下

rpm -qc firefox:仅列出该软件的所有设置文件

rpm -qd firefox:仅列出该软件的所有帮助文档

rpm -qi firefox:仅列出该软件的相关数据说明

软件组 Group 为空,其中 Source RPM 行连此软件的源码包的名字都显示出来的了。

rpm -qf /bin/sh:找出 /bin/sh 是由哪个软件提供的

bash 也是一个软件包

rpm -qpR wget-1.19.1-3.fc27.aarc64.rpm:查看软件依赖,例如查看包 wget-1.19.1-3.fc27.aarc64.rpm 的依赖项,

rpm -qR wget:如果只知道包名,可以这样查

安装和升级

参数说明(后面括号内为英文说明):

学习了 yum 之后可以直接用 yum 安装,但是现在只能自己手动下载 rpm 包。到 rpmfind 中下载。

手动装软件就是这样苦逼,本机没有软件需要的依赖就无法安装,这就是 yum 出现的意义

没法实践了,直接看例子吧

如你需要安装一个 emac 编辑器,首先要到网上下载一个 emac 的 rpm 包,如 emacs-25.3-1.fc28.aarch64.rpm。其实也可以尝试去 Centos 的 ISO 里面找,Packages 文件夹下有大量的 rpm 包。最简单的安装命令如下:

rpm -i emacs-25.3-1.fc28.aarch64.rpm

不过,这样的参数其实无法显示安装的进度,所以通常我们执行的命令是这样,在 package 所在文件夹执行:rpm -ivh package-name,在本例中:执行

rpm -ivh emacs-25.3-1.fc28.aarch64.rpm

如果想安装多个用空格间隔然后接上要安装的 rpm 包即可,同时也支持通过网址的资源来安装。

软件升级,就是把 i 换成大写 U

rpm –Uvh  emacs-25.3-1.fc28.aarch64.rpm

卸载软件

使用 rpm 的卸载过程一定要由最上层往下卸载,以 rp-pppoe 为例,这个软件主要是依赖 ppp 这个软件来安装的,所以当你要卸载 ppp 的时候,就必须先卸载 rp-pppoe 才行!简而言之就是 A 依赖 B,想要卸载 B,就得先卸载 A。如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息

卸载的命令非常简单,通过 -e 参数(erase)就可以完成。

rpm -e gcc:卸载 gcc