Linux软件安装管理之——RPM与YUM详解

1、序言

上一篇文章《Linux软件安装管理之——源码安装详解》详细介绍了Linux平台下的源码包安装原理,虽然使用源代码进行软件编译能够具备定制化的设置,但对于Linux distribution的发行商来讲,则有软件管理不晚的问题,毕竟不是每一个人都会进行源代码编译的。这个问题将会严重的影响linux平台上软件的发行与推广。linux

为了解决上述的问题,厂商先在他们的系统上面编译好了咱们用户所须要的软件,而后将这个编译好并可执行的软件直接发布给用户安装。不一样的 Linux 发行版使用不一样的打包系统,通常而言,大多数发行版分别属于两大包管理技术阵营: Debian 的”.deb”,和 Red Hat的”.rpm”。也有一些重要的例外,比方说 Gentoo, Slackware,和 Foresight,但大多数会使用这两个基本系统中的一个。数据库

这里将要介绍的是Red Hat系列发行版的RPM与YUM的详细使用方法,如须要了解Debian系列发行版的包管理系统可查看个人另外一篇文章:《Linux软件安装管理之——dpkg与apt-*详解》。segmentfault

2、RPM

一、简介:

RPM命名“RedHat Package Manager”,简称则为RPM。这个机制最先由Red Hat这家公司开发出来的,后来实在很好用,所以不少distributons就使用这个机制来做为软件安装的管理方式,包括Fedora,CentOS,SuSE等知名的开发商都是用它。centos

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

二、RPM优缺点

优势:架构

1)软件已经编译打包,因此传输和安装方便,让用户免除编译编辑器

2)在安装以前,会先检查系统的磁盘、操做系统版本等,避免错误安装ide

3)软件的信息都已经记录在linux主机的数据库上,方便查询、升级和卸载工具

缺点:学习

1)软件包安装的环境必须与打包时的环境一致或至关

2)必须安装了软件的依赖软件

3)卸载时,最底层的软件不能先移除,不然可能形成整个系统不能用
为了解决RPM属性依赖的问题,下面也将会为你详细介绍YUM的使用方法。

三、rpm包命名的含义

RPM包的命名格式:

软件名称-版本号-发布次数.适合linux系统.硬件平台.rpm
例如:ftp-0.17-74.fc27.i686.rpm

注意:

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

包 名:rpm操做的已经安装的软件,软件包使用的是包名

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

四、RPM安装软件的默认路径

/etc 配置文件放置目录

/usr/bin 一些可执行文件

/usr/lib 一些程序使用的动态连接库

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

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

五、RPM安装原理图

clipboard.png

3、RPM使用手册

一、软件安装(install)

如你须要安装一个emac编辑器,首先要到网上下载一个emac的rpm包,如emacs-25.3-1.fc28.aarch64.rpm。最简单的安装命令以下:

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

不过,这样的参数其实没法显示安装的进度,因此一般咱们执行的命令是这样:

rpm -ivh package-name

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

-i:install的意思,安装

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

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

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

若是想安装多个用空格间隔而后接上要安装的rpm包便可,同时也支持经过网址的资源来安装。

二、软件升级

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

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

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

rpm –Uvh  foo-2.0-1.i386.rpm

三、查询模式

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

RPM的查询语法为:

rpm {-q|--query} [select-options] [query-options] 经常使用参数说明(后面括号内为英文说明):

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

-p:package,查询一个RPM文件的信息(Query an (uninstalled) package. )

-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.)

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

使用案例:

1)查询你的Linux是否有安装某个软件

rpm -q yum

2)查询属于该软件所提供的全部目录与文件

rpm -ql yum

rpm -qc yum    #仅列出该软件的全部设置文件

rpm -qd yum    #仅列出该软件的全部帮助文档

3)列出gcc这个软件的相关数听说明

rpm -qi gcc

4)找出/bin/sh是由哪一个软件提供的

rpm -qf /bin/sh

5)假设我有下载一个RPM文件,包名为wget-1.19.1-3.fc27.aarc64.rpm,想要知道该文件的需求文件,该如何办?

rpm -qpR wget-1.19.1-3.fc27.aarc64.rpm

四、卸载软件

使用rpm的卸载过程必定要由最上层往下卸载,以rp-pppoe为例,这个软件主要是依据ppp这个软件来安装的,因此当你要卸载ppp的时候,就必须先卸载rp-pppoe才行!

删除的命令很是简单,经过-e参数就能够完成。不过,很常发生软件属性依赖致使没法山洼某些软件的问题。

例子:

rpm -e gcc

欲了解rpm的更多使用方法,能够自行去查阅rpm的man手册,这里只是列出了一些经常使用的操做。

4、YUM

一、简介:

YUM能够看做是CS架构的软件,YUM的存在很好的解决了RPM的属性依赖问题。

YUM经过依赖rpm软件包管理器, 实现了rpm软件包管理器在功能上的扩展, 所以YUM是不能脱离rpm而独立运行的。

二、YUM的特色

1)能够同时配置多个资源库(Repository)

2)简洁的配置文件(/etc/yum.conf)

3)自动解决增长或删除rpm包时遇到的依赖性问题

4)使用方便

5)保持与RPM数据库的一致性

三、YUM原理说明

Server端先对程序包进行分类后存储到不一样repository容器中; 再经过收集到大量的rpm的数据库文件中程序包之间的依赖关系数据, 生成对应的依赖关系和所需文件在本地的存放位置的说明文件(.xml格式), 存放在本地的repodata目录下供Client端取用

Cilent端经过yum命令安装软件时发现缺乏某些依赖性程序包, Client会根据本地的配置文件(/etc/yum.repos.d/*.repo)找到指定的Server端, 从Server端repo目录下获取说明文件xxx.xml后存储在本地/var/cache/yum中方便之后读取, 经过xxx.xml文件查找到须要安装的依赖性程序包在Server端的存放位置, 再进入Server端yum库中的指定repository容器中获取所需程序包, 下载完成后在本地实现安装。

clipboard.png

注意:YUM是一个在线软件管理工具,因此使用YUM进行的操做大都是须要在联网的条件下才能正常使用。

5、YUM的配置文件

一、容器说明

虽然yum是你在联网后就能直接使用,不过,因为你系统的站点镜像没选择好,会致使链接速度很是慢!因此,这时候就须要咱们去手动修改yum的设置文档了。

如你链接到CentOS的镜像站点(http://ftp.twaren.net/Linux/C...)后,就会发现里面有一堆连接,那些连接就是这个yum服务器所提供的容器了,包括centosplus、extras、fasttrack、os、updates等容器,最好认的就是os(系统默认的软件)与updates(软件升级版本)。

在yum服务器的容器里面,最重要的一个目录就是那个“repodata”,该目录是分析RPM软件后所产生的软件依赖数据放置处。所以,当你找到容器所在网址时,最重要的就是该网址下面必定要有一个名为“repodata”的目录存在,那就是容器的网址了。

下面都是以个人主机为例:CentOS 7.4.1708

二、容器查询

首先,能够先查询一下目录yum server所使用的容器有哪些。

使用命令:yum repolist all,查询结果以下:

clipboard.png

如上图,只有当最右边的status为enabled该容器才算激活,

/etc/yum.repos.d/里面会有多个配置文件(文件名以.repo结尾),yum会从里面逐个查找,因此里面的容器名称不能有重复。

三、配置文件修改

打开配置文件:vi /etc/yum.repos.d/CenOS-Base.repo,内容以下

clipboard.png

如上只是部分容器的截图,该配置文件的说明以下:

[base]:表明容器的名字。中括号必定要存在,里面的名称能够随意起,但不能有两个相同的容器名称,不然yum会不知道去哪里找容器相关软件列表文件。

name:只是说明一下这个容器的意义而已,重要性不高。

mirrorlist:列出这个容器可使用的镜像站点,若是不想使用能够批注掉这一行。

baseurl:这个最重要,由于后面接的就是容器的实际网址。mirrorlist是由yum程序自行去找镜像站点,
baseurl则是指定固定的一个容器网址。

enable=1:启动这个容器,默认值也为1。关闭这个容器能够设置enable=0。

gpgcheck=1:指定是否须要查阅RPM文件内的数字证书。

gpgkey:数字证书的公钥文件所在位置,使用默认值便可。

注意:

1)yum会自动识别/etc/yum.repos.d/目录以.repo结尾的文件。

2)当咱们修改了配置文件的网址却没有修改容器名称,能够会形成本机的列表与yum服务器的列表不一样步,这时就须要手动来清除容器的数据了:

语法:yum clean [packages|headers|all]

参数:

packages:将已下载的软件文件删除

headers:将下载的软件文件头删除

all:将全部容器数据都删除

例:删除已下载过的全部容器相关数据(含软件自己与列表)

yum clean all

6、YUM使用手册

一、查询

查询相关的命令:

search:搜索某个软件名称或者是描述的重要关键字;

list:列出目前yum所管理的全部的软件名称与版本,有点相似于rpm -qa

info:同上,不过有点相似于rpm -qai

provides:从文件去搜索软件!相似于rpm -qf

1)查询与ftp相关的软件有哪些

yum search ftp

2)查询gcc这个软件的功能

yum info gcc

能够查询到该软件的版本号、描述信息、是否已安装等信息。

3)列出yum服务器上所提供的全部软件名称

yum list

4)列出目前服务器上可供本机进行升级的软件有哪些

yum list updates

5)列出提供passwd这个文件的软件有哪些

yum provides passwd

6)查找以pam开头的软件名称有哪些

yum list pam*

二、安装与升级

相关的命令:

install:后面接要安装的软件。

update:后面接要升级的软件。若要整个系统都升级,就直接update便可。

例:安装一个emacs编辑器软件

yum install emacs

小技巧:
使用参数-y,当遇到须要等待用户输入时,这个选项会提供yes的响应,如上面的例子能够写成:yum -y install emacs

四、卸载

相关命令:
remove

例:卸载上面例子安装的emacs

yum remove emacs

五、软件组管理

还记得全新安装CentOS时,不是能够选择所需的软件么?而那些软件不是利用GNOME/KDE/X Window之类的名称存在吗?其实这就是软件组。软件级的存在,对于大量的一系列软件安装是很是有用的一个功能。

相关命令说明:

grouplist:列出全部可用的组列表

groupinfo:后面接group name,则能够了解该组内含的全部组名称

groupstall:安装一整级的软件

groupremove:删除某个组

1)查询目前容器与本机上面的可用与安装过的软件组有哪些

yum grouplist

2)查看一个软件组的信息

yum groupinfo GNOME

3)安装桌面环境GNOME

yum groupstall GNOME

欲了解yum的更多使用方法,也能够自行去查阅yum的man手册。

学完了yum的操做,是否是忽然以为Linux上的软件管理变得简单多了,彷佛前面学的rpm也能够不须要了!虽然是如此,可是yum毕竟是架构在rpm上面的,因此关于rpm的相关知识也仍是要掌握的。

参考文献:

《鸟哥的Linux私房菜——基础学习篇》鸟哥

《The Linux Command Line》William E. Shotts, Jr.

相关文章
相关标签/搜索