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 主机的依赖属性软件是否满足,若满足则予以安装,若不满足则不予安装。
优点:
-
软件已经编译打包,所以传输和安装方便,让用户免除编译
-
在安装之前,会先检查系统的磁盘、操作系统版本等,避免错误安装
-
软件的信息都已经记录在 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 文件内的信息。
这个目录下的都是二进制文件,无法看到其中的内容
查询语法:
|
|
注意:在查询的部分,所有的参数之前都要加上-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