YUM是什么?
YUM是Yellodog Update Modified的缩写,昵称“黄狗更新器”。
是红帽系列Linux中的一个软件。
其主要作用就是解决RPM软件包安装时的依赖问题。
YUM能够自动查找并解决rpm包之间的依赖关系,无需用户逐个手动的去安装/卸载每一个rpm软件包。
几乎所有红帽系列的Linux系统中 均会默认安装有yum。
yum只是为了解决RPM依赖关系问题的一个工具,而不是一种软件封装模式。
RPM仍然是红帽系列Linux中的默认软件管理器,yum可以视为RPM的一个前台工具。
YUM
· 工作原理
RPM软件包存在一个包头header,header中有该软件的依赖关系。
yum服务器端事先对RPM软件包进行分析,将软件包所有依赖关系记录成一个文件。
并将其依赖的所有软件包囊括到yum服务器中备用。
yum服务器端放着软件源,软件源中有软件仓库。
仓库里放着:所有RPM软件包的目录索引,每个RPM软件包的依赖性关系数据,该软件仓库中所有RPM软件包。
用户需要安装某个软件包时,可通过yum客户端,查询某个yum服务器上有无该软件。
如有则下载软件包的依赖关系数据,根据这些数据一次性的将其所依赖的软件全部下载下来进行安装。
· 使用YUM之前
建议先执行两个步骤
1、使用yum命令的clean参数,清除yum原有的软件包缓存数据
2、使用yum命令的makecache参数,将当前服务器上的软件包相关信息存到本地以提高搜索软件的速度。
[root@hanaii ~]# yum clean all
[root@hanaii ~]# yum makecache
· 软件管理
1、安装
命令:yum install package_names
[root@hanaii ~]# yum install gcc-c++
yum会检查软件的依赖关系,然后询问是否安装。
键入Y开始下载安装。
2、查询
命令:yum list package_names(支持通配符)
当软件在本机上经安装时,会提示Installed Package。
[root@hanaii ~]# yum list gcc-c++
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
gcc-c++.x86_64 4.8.5-28.el7_5.1 @updates
当软件未在本机上安装,且源的软件仓库中存在软件包,会提示Available Packages。
[root@hanaii ~]# yum list bind
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Packages
bind.x86_64 32:9.9.4-61.el7_5.1 updates
当软件不在软件源中,会提示No matching Packages to list
[root@hanaii ~]# yum list xxx
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Error: No matching Packages to list
list后可跟:installed和available两个参数。分别表示本机以安装软件,当前源可用软件包。
由于这两个命令的输出较多,建议用管道结合less命令来进行查看。
3、查看软件包的描述信息和概要信息
命令:rpm info package_names
[root@hanaii ~]# yum info gcc-c++
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
Name : gcc-c++
Arch : x86_64
Version : 4.8.5
Release : 28.el7_5.1
Size : 16 M
Repo : installed
From repo : updates
Summary : C++ support for GCC
URL : http://gcc.gnu.org
License : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
Description : This package adds C++ support to the GNU Compiler Collection.
: It includes support for most of the current C++ specification,
: including templates and exception handling.
4、更新
命令:rpm update package_names
[root@hanaii ~]# rpm update pythron
...
Updated:
python.x86_64 0:2.7.5-69.el7_5
Dependency Updated:
python-libs.x86_64 0:2.7.5-69.el7_5
5、卸载
命令:rpm remove packages_names
[root@hanaii ~]# yum remove gcc-c++
...
Removed:
gcc-c++.x86_64 0:4.8.5-28.el7_5.1
Complete!
相关依赖也会被卸载
· 需要注意的
普通用户只能用yum列出和查看软件,无法用yum安装、卸载软件。
YUM配置第三方软件源
· 默认软件源
CentOS中的yum,默认使用的是CentOS提供的软件源。
CentOS官方源十分审慎,其收录的软件包:
不包括任何有版权争议的软件包,其包里的软件不求新。一般为较旧的稳定版本。
基于此,CentOS官方源中所包含的软件包数量不会很多。
许多有用的软件都不在CentOS的官方源中,如:Eclipse、mplayer等等。
所以需要通过额外的配置第三方软件源,实现对更多软件的管理。
· 推荐的第三方软件源
以下软件源是完全兼容CentOS红帽等Linux系统的第三方源。
补充:阿里云镜像源https://opsx.alibaba.com/mirror
· 安装与配置
以RepoForge源为例。
1、下载安装
下载适用于系统的软件源安装包。使用rpm或yum安装。
[root@hanaii ~]# wget http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
[root@hanaii ~]# yum install rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
2、找到配置文件
进入/etc/yum.repos.d目录,该目录为yum的配置目录,放置的是软件源的配置文件。
找到第三方软件源对应的配置文件。如RepoForge源对应的就是rpmforge.repo。
[root@hanaii yum.repos.d]# ls -al
total 32
...
-rw-r--r-- 1 root root 1128 Jun 12 2014 rpmforge.repo
3、 优先级配置
安装后的第三方源现还无法使用。
因为存在一个官方源,在管理时,yum不知道从哪个源获取软件包。
所以要对源进行优先级的配置。
首先为yum安装一个优先级排序插件:yum-plugin-priorities
[root@hanaii yum.repos.d]# yum install yum-plugin-priorities
...
Installed:
yum-plugin-priorities.noarch 0:1.1.31-46.el7_5
Complete!
安装成功后,进入官方源配置文件和第三方源配置文件,
分别在配置文件的每个软件仓库后,设置priority的值。(值越小,优先级越高)
官方源配置文件CentOS-Base.repo
[base]
...
priority=1
[updates]
...
priority=1
[extras]
...
priority=1
第三方源配置文件
[rpmforge]
...
priority = 10
[rpmforge-extras]
...
priority = 10
...
到此,源的优先级配置完成。yum会先到优先级高的源去获取软件,若不存在,再按优先级从高到低的顺序去获取软件。
[root@hanaii yum.repos.d]# yum install mplayer
Loaded plugins: fastestmirror, priorities
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
Loading mirror speeds from cached hostfile
164 packages excluded due to repository priority protections
No package mplayer available.
Error: Nothing to do