Linux使用过程中非常重要的命令——yum。

大学期间刚开始跟着慕课网上的视频学习Linux的时候下载安装软件总是先下载到Windows上然后上传到虚拟机上,解压后安装报什么错解决什么错,缺什么依赖安装什么依赖。2015年实习开始,第一个任务就是搭建Redis,第一次接触了yum命令,从此除了必要的测试、梳理离线安装步骤以外,剩下的东西都通过yum来安装,一条yum -y install命令解决一切问题。

前一段时间,应该说是过去一年都在跟Zookeeper打交道,接下来会系统梳理Zookeeper的部分知识,特别是在配置文件管理,微服务管理方面,在此之前系统的梳理一下yum到底是个什么样的命令,通过什么原理下载安装软件。

YUM的介绍

YUM全称为 Yellow dog Updater Modified,它是一个在线的软件安装命令。YUM是C/S架构,是RPM1的前端工具,依赖于RPM存在的。能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

例如我们需要安装一个软件A,而软件A依赖B,而B可能还继续依赖其他软件,通过yum我们只需要安装A,其他依赖包会自动安装。

那么YUM是如何下载安装RMP包的呢?
yum运行过程
但是上述这种机制,也存在着一些问题,万一服务器上的程序包或者依赖关系发生了变化,就会导致服务器和客户端本地的元数据不一致。想解决这个问题,可以在每次使用YUM的时候,都向服务器请求元数据。但是这种方式浪费带宽和时间,有的时候明明没有变化,但还是需要下载。

如何解决这种问题呢?
YUM服务器上有一个特殊文件,文件中记录了每一个元数据文件的校验码,实际上每次运行YUM的时候,都会向服务器请求这个文件(刚刚配置好YUM源的时候,本地没有这个文件,这时候肯定是要下载元数据的),并和本地元数据中的校验码文件进行对比,如果一致则代表元数据没有变化,本地元数据有效,否则就重新请求元数据。

YUM的安装及配置

我们可以通过yum -y install安装其他软件,如果Linux服务器没有yum,该如何安装。

  1. 首先,通过网址http://yum.baseurl.org/download/3.4/yum-3.4.3.tar.gz下载yum-3.4.3。
  2. 解压压缩包
    tar xvf yum-3.4.3.tar.gz
    
  3. 执行安装命令,更新yum catch
    #依次执行以下命令
    cd yum-3.4.3
    yummain.py install yum
    yum check-update  
    yum update  
    yum clean all  
    
  4. 配置国内镜像源
#安装wget
yum -y install wget

安装wget

#备份之前的仓库文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back

back

#下载阿里云的仓库文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

配置阿里镜像

#清除缓存
yum clean all
yum makecache
  • 主配置文件/etc/yum.conf
    yum.conf是yum的主配置文件,手动安装yum时,需要手动创建改文件。
[root@Centos7 ~]# cat /etc/yum.conf         
##1表示使能,0表示不使能;
##等号左右不要有空格,否则可能出现语法错误;
[main]                                              ##仓库ID
cachedir=/var/cache/yum/$basearch/$releasever       ##缓存文件存放目录
keepcache=0                                         ##缓存文件是否保存下来
debuglevel=2                                        ##debug调试级别,默认为2
logfile=/var/log/yum.log                            ##日志文件路径
exactarch=1                                         ##安装程序包的时候,做精确地平台匹配(例如:配置为0则允许在i386上更新i686的RPM包)
obsoletes=1                                         ##仅在更新的时候生效,允许更新陈旧的RPM包
gpgcheck=1                                          ##安装程序包的时候,检查GPG(GNU Private Guard)
plugins=1                                           ##是否允许使用插件(我们一般会用yum-fastestmirror这个插件)
installonly_limit=5                                 ##同时安装几个程序包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
												    ##追踪BUG的URL
distroverpkg=centos-release                         ##指定基准包,yum会根据这个包判断发行版本
  • 仓库文件
    yum仓库文件指/etc/yum.repos.d/目录下以,repo结尾的配置文件。
    repo文件是Fedora、Redhat和Centos中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用。
  • 文件必须以.repo结尾,否则不会被YUM使用;
  • 一个repo文件可以指向一个仓库,为仓库的指向提供配置信息;
  • 一个repo文件也可以指向多个仓库,只不过为了便于管理切割成了多个repo文件;
##1表示使能,0表示不使能;
##等号左右不要有空格,否则可能出现语法错误;
[repositoryID]##设定仓库ID(main不能作为ID,因为它是公共的);
name=Some name for this repository                      
##设定YUM仓库名;
baseurl=url://server1/path/to/repository/               
##设定YUM仓库访问路径(指向repodata这个目录的上级目录);
            url://server2/path/to/repository/           
            ##第二行及其之后的URL不能顶格写
            url://server3/path/to/repository/
mirrorlist=                                                 
##不能与baseurl同时使用,设定镜像服务器地址URL(指向的是个文本文件,里面存放多个指向仓库的URL,YUM会将这个文件下载到本地然后连接仓库);
enabled={1|0}                                               
##设定是否启用仓库,默认启用;
gpgcheck={1|0}                                              
##设定是否在安装此仓库中的程序包时,进行GPG校验,来RPM包的完整性和来源合法性;
repo_gpgcheck={1|0}                                         
##设置是否检查仓库元数据签名信息;
gpgkey=URL                                                  
##指向GPG密钥文件的访问路径(可能是仓库或权威机构提供);
enablegroups={1|0}                                          
##设置是否在仓库上使用组批量管理程序包;
failovermethod={roundrobin|priority}                        
##故障转移方法(轮询|优先级),默认为roundrobin随机挑选,priority是按顺序选择;
exclude=compiz* *compiz* fusion-icon*                       
##用来禁止这个软件仓库中的某些软件包的安装和更新,可以使用通配符,并以空格分隔,可以视情况需要自行添加;
keepalive={1|0}                                            
##是否当远程服务器是HTTP/1.1时,保持连接功能;
username                                                    
##有些服务器不支持匿名访问,需要指明要访问服务器的用户名;
password                                                    
##有些服务器不支持匿名访问,需要指明要访问服务器的密码;
cost=                                                       
##访问仓库的开销(默认为1000),用数字表示;
group_package_types=default, mandatory, optional            
##安装包组中指定类型的包;

YUM的使用

常用命令

##列出所有可更新的软件清单命令
yum check-update
##更新所有软件命令
yum update
##仅安装指定的软件命令
yum install <package_name>
##仅更新指定的软件命令
yum update <package_name>
##列出所有可安裝的软件清单命令
yum list
##删除软件包命令
yum remove <package_name>
##查找软件包 命令
yum search <keyword>
##清除缓存命令:
yum clean packages 				##清除缓存目录下的软件包
yum clean headers 				##清除缓存目录下的 headers
yum clean oldheaders 			##清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) ##清除缓存目录下的软件包及旧的headers

常用选项

-q, --quiet:静默模式
-v, --verbose:详细模式
-y, --assumeyes:自动回答为yes;
--assumeno:自动回答为no
-R [minutes], --randomwait=[minutes]:最多等待时间
-x [package], --exclude=[package]:通配要排除的包
--noplugins:禁用所有插件;
--color=COLOR:带颜色
--downloadonly:仅下载包,不安装或升级。默认下载在yum的缓存目录中,默认为/var/cache/yum/$basearch/$releasever
--downloaddir=DLDIR:指定下载目录

yum的使用相信大家都不陌生,更详细的命令、选项合集可以从网上获取。


  1. RPM:
    原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL2 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。 ↩︎

  2. GPL:五种常用开源协议之一,Linux就是基于此协议的开源操作系统。 ↩︎

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐