RPM 包的管理

警告
本文最后更新于 2023-10-30,文中内容可能已过时。

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 主机的依赖属性软件是否满足,若满足则予以安装,若不满足则不予安装。

优点:

  • 软件已经编译打包,所以传输和安装方便,让用户免除编译

  • 在安装之前,会先检查系统的磁盘、操作系统版本等,避免错误安装

  • 软件的信息都已经记录在 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 安装软件的默认路径

  • /etc:配置文件放置目录

  • /usr/bin:一些可执行文件

  • /usr/lib:一些程序使用的动态链接库

  • /usr/share/doc:一些基本的软件使用手册与说明文件

  • /usr/share/man:一些 man page 档案

RPM 操作

查询模式

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

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

查询语法:

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

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

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

  • -a:all,列出已经安装在本机的所有软件(Query all instaled packages.)

  • -p:package,查询一个 RPM 文件的信息(Query an (uninstalled) package. ),带了 p,就要写包全名

  • -f:file,由后面接的文件名称找出该文件属于哪个已安装的软件(Query package owning file.)

  • -i:information,列出该软件的详细信息,包含开发商、版本与说明等(Display package information, including name, version, and description.)

  • -l:list,列出该软件所有的文件与目录所在完整文件名(List file in package)

  • -c:configuration,列出该软件的所有设置文件 (找出在/etc/下面的文件名而已)(List only configuration files)

  • -d:documentation,列出该软件所有的帮助文档(List only documentation files)

  • -R:required,列出与该软件有关的依赖软件所含的文件(List capabilities on which this depends.)

用法:

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:如果只知道包名,可以这样查

安装和升级

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

  • -i:install 的意思,安装

  • -v:查看更详细的安装信息画面(provide more detailed output)

  • -h:以安装信息栏显示安装进度

  • -U:upgrade 的意思,更新软件,若系统中没有该软件则进行安装(upgrade package(s))

  • -F:freshen 的意思,更新系统已安装的某个软件(upgrade package(s) if already instaalled)

学习了 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

0%