Linux yum客户端的配置及yum命令

一、什么是yum
我们在Linux系统上安装处理软件,一般是使用RPM,它是通过预先编译完成并且把软件打包为RPM文件格式后,再加以安装的一种方式,使用者只要拿到这个打包好的软件,然后将里头的文件放置到应该摆放的目录,这样就完成了安装。但是,由于有些软件是有依赖于其他软件的,当你要安装某个RPM类型的软件时,RPM会检验RPM软件数据库,它所依赖的相关软件包是否都已存在,如果没有检索到,那么这个RPM文件默认就不能安装。甚至是有些包之间还会存在循环依赖,这时RPM就不能快速有效的进行软件安装了。
对于RPM的上述局限性,yum的出现就解决了包之间的依赖性的问题。文章前面提到了,RPM把软件依赖关系储存在本地数据库里,那我们在安装软件的时候,如果先到数据库里找到所有依赖包的列表,再检索哪些已经安装到本地,然后把剩下没安装的一起安装,这样就可以解决包依赖性的问题了,这就是yum机制的由来

二、yum的运作流程

各版本发行商都会释放出软件并放置于yum服务器上,所以yum服务器储存有我们各种所需的软件。参考下图,yum服务器不仅存储了各种RPM包,还有包的相关的元数据文件(放置于特定目录repodata下),前面提到的包的依赖性关系就储存在元数据文件中。這些文件与RPM软件包所在的本地或网络位置就被称为yum仓库(yum repo)。当用户端有软件安装或升级的需求时,用户端会访问yum服务器下载或更新RPM软件列表并存在本机缓存列表中,然后通过缓存列表与本地RPM数据库相比对,筛选出缺少哪些RPM软件包并根据yum仓库储存的路径下载(可以是本地,也可以是网络),最后通过RPM机制一并进行安装

Linux yum客户端的配置及yum命令

三、如何配置yum客户端

yum本身的配置文件,主要指向仓库的位置以及相关的各种配置信息。
1.主配置文件–> /etc/yum.conf:为所有仓库提供公共配置
2.各仓库指向的定义–> /etc/yum.repos.d/*.repo:为仓库的指向提供配置
      * [repositoryID]
        #仓库的名字,具有唯一性,标识repo的指向
      * name=Some name for this repository
        #仓库描述信息
      * baseurl=url://path/to/repository/
        #指明repo的访问路径,通常为一个文件服务器上输出的某repo
        #文件服务器类型
                http://SEVER/PATH/TO/REPOSITORY
                https://SEVER/PATH/TO/REPOSITORY
                ftp://SEVER/PATH/TO/REPOSITORY
                file:///PATH/TO/REPOSITORY
      * enabled={1|0}
        #此仓库是否可被使用
      * gpgcheck={1|0}
        #是否对RPM包做检验
      * gpgkey=url://path/to/keyfile/
        #指明gpgkey文件路径
      * enablegroups={1|0}
        #是否启用包组
      * failovermethod={roundrobin|priority}
        #设置baseurl有多个时的优先级
                  roundrobin:随机挑选,默认值
                   priority:按顺序访问
      * cost= 
        #指明仓库的访问开销,默认为1000

3. 创建新的配置文件

按照以上方式,我们就在/etc/yum.repos.d/目录下创建newbase.repo的配置文件(这里要注意目录下的配置文件只要有一个有问题就会影响yum的使用)

[root@centos7 ~]#vi /etc/yum.repos.d/newbase.repo
[NewBase]
name=NewBase
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/    #使用阿里云CentOS系统yum源
        file:///misc/cd/                                  #使用本地光盘作为yum源
enable=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7       #使用本地文件,也可以使用文件服务器上的,https://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
failovermethod={priority} #按顺序访问baseurl路径 

对于CentOS来说,也支持由Fedora基金会发展的外加软件计划(Extra Packages for Enterprise Linux, EPEL),包含了很多第三方软件。我们可以使用阿里云的Epel的yum源:https://mirrors.aliyun.com/epel/7/x86_64,只需在newbase.repo配置文件中创建另一个yum仓库:
[NewEpel]
name=NewEpel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/rpm-gpg-key-epel-7

4.yum仓库的测试

yum repolist: 列出已经配置的所有yum仓库
用法:yum repolist [all|enabled|disabled]

[root@centos7 ~]#yum repolist all
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * NewBase: 
repo id                                                    repo name                                                 status
!Centos7                                                   Centos7                                                   disabled
NewBase                                                    NewBase                                                   enabled:  9,363
NewEpel                                                    NewEpel                                                   enabled: 11,787
!epel7                                                     epel7                                                     disabled
repolist: 21,150
# NewBase和NewEpel两个yum仓库的status都为enabled,说明已经成功激活

四、yum命令的用法

yum [options] [command] [package …]
Command:
1.显示服务器提供的程序包:
yum list 
yum list [all | glob_exp1] [glob_exp2] […] #默认为all,显示全部RPM包,也支持glob通配符
yum list {available|installed|updates} [glob_exp1][…]

[root@centos7 ~]#yum list|less
Installed Packages                                                               #已安装软件
GConf2.x86_64                           3.2.6-8.el7                    @anaconda #随安装向导安装的
apr.x86_64                              1.4.8-3.el7                    @Centos7  #通过Centos7yum仓库安装
.....中间省略.......
Available Packages                                                               #还可以安装的软件
0ad.x86_64                              0.0.21-1.el7                   NewEpel   #位置
389-ds-base.x86_64                      1.3.5.10-11.el7                NewBase   #位置
.....(底下省略).....

yum list updates 目前服务器上可供本机进行升级的软件有哪些,与yum check-update 类似

2.安装程序包:

-.yum install package1 [package2] […]   (包名)
注意:1.如果一个包在不同仓库中有多个版本,默认会安装最新版本
          2.如果要安装制定版本:install PACKAGE-VERSION…
-.yum reinstall package1 [package2] […] (重新安装)

3.升级程序包:
yum update [package1] [package2] […]
yum downgrade package1 [package2] […] (降级)

4.卸载程序包:
yum remove | erase package1 [package2] […]
此命令默认是不会卸载所依赖的包,但是依赖于正卸载的程序包的程序包会被一并卸载

5.查看程序包information:
yum info […]

6.查看指定的特性(可以是某文件)是由哪个程序包所提供,与RPM -qf 类似
yum provides | whatprovides feature1 [feature2][…]

[root@centos7 ~]#yum provides /usr/bin/bash
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * NewBase: 
bash-4.2.46-20.el7_2.x86_64 : The GNU Bourne Again shell
Repo        : NewBase
Matched from:
Filename    : /usr/bin/bash
#bash的可执行程序文件是由bash-4.2.46-20.el7_2.x86_64这个RPM包提供的

7.缓存管理
-.清理本地缓存:
在yum运作流程中我们提到了客户端存有缓存列表,这些文件默认是存在/var/cache/yum/目录下

[root@centos7 ~]#ls /var/cache/yum/x86_64/7/    #本机yum的缓存位置
base  Centos7  epel7  extras  NewBase  NewEpel  timedhosts  timedhosts.txt  updates

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

[root@centos7 ~]#yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: NewBase NewEpel
Cleaning up everything
Cleaning up list of fastest mirrors

-.构建缓存:
yum makecache #自动连接至每一个可用仓库,下载数据,创建为缓存

[root@centos7 ~]#yum makecache
Loaded plugins: fastestmirror, langpacks
NewBase                                                                                                      | 3.6 kB  00:00:00     
NewEpel                                                                                                      | 4.3 kB  00:00:00     
(1/4): NewBase/other_db                                                                                      | 2.4 MB  00:00:00     
(2/4): NewBase/filelists_db                                                                                  | 6.6 MB  00:00:00     
(3/4): NewEpel/other_db                                                                                      | 2.2 MB  00:00:02     
(4/4): NewEpel/filelists_db                                                                                  | 8.0 MB  00:00:23     
Loading mirror speeds from cached hostfile
 * NewBase: 
Metadata Cache Created

8.搜索:yum search string1 [string2] […]
搜索与以指定的关键字程序包名有关的软件列表

9.查看yum事务历史:
yum history [info|list|packages- list|packages- info|summary|addon- info|redo|undo|rollback|new|sync|stats]

#yum history列出yum的详细操作历史
[root@centos7 ~]#yum history
Loaded plugins: fastestmirror, langpacks
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     6 | root <root>              | 2017-06-11 19:39 | Install        |    1 P<
     5 | root <root>              | 2017-06-11 18:10 | Install        |    1 ><
     4 | root <root>              | 2017-06-11 17:40 | Install        |    1 ><
     3 | root <root>              | 2017-06-10 09:28 | Install        |   53 ><
     2 | System <unset>           | 2017-05-19 14:53 | Install        |    1 > 
     1 | System <unset>           | 2017-05-17 12:55 | Install        | 1319   
history list
#yum history info 6 查看第6条历史的详细操作,从Conmand Lind可以看出是安装了tree软件包
[root@centos7 ~]#yum history info 6   
Loaded plugins: fastestmirror, langpacks
Transaction ID : 6
Begin time     : Sun Jun 11 19:39:02 2017
Begin rpmdb    : 1376:18487d64bcef03c85f0f14dca43701acce15328a
End time       :                           (0 seconds)
End rpmdb      : 1377:8e94811fa592da9c619827c4eb3a265af705bb45
User           : root <root>
Return-Code    : Success
Command Line   : install tree  
Transaction performed with:
    Installed     rpm-4.11.3-21.el7.x86_64                      @anaconda
    Installed     yum-3.4.3-150.el7.centos.noarch               @anaconda
    Installed     yum-plugin-fastestmirror-1.1.31-40.el7.noarch @anaconda
Packages Altered:
    Install tree-1.6.0-10.el7.x86_64 @NewBase
Rpmdb Problems:
    conflicts: ipa-client-4.4.0-12.el7.centos.x86_64 has installed conflicts freeipa-client: ipa-client-4.4.0-12.el7.centos.x86_64
        Installed     ipa-client-4.4.0-12.el7.centos.x86_64 @anaconda
    conflicts: ipa-client-common-4.4.0-12.el7.centos.noarch has installed conflicts freeipa-client-common:
             : ipa-client-common-4.4.0-12.el7.centos.noarch
        Installed     ipa-client-common-4.4.0-12.el7.centos.noarch @anaconda
    conflicts: ipa-common-4.4.0-12.el7.centos.noarch has installed conflicts freeipa-common: ipa-common-4.4.0-12.el7.centos.noarch
        Installed     ipa-common-4.4.0-12.el7.centos.noarch @anaconda
history info
#yum history undo 6 撤消第6条的操作,即卸载tree包
[root@centos7 ~]#yum history undo 6
Loaded plugins: fastestmirror, langpacks
Undoing transaction 6, from Sun Jun 11 19:39:02 2017
    Install tree-1.6.0-10.el7.x86_64 @NewBase
Resolving Dependencies
--> Running transaction check
---> Package tree.x86_64 0:1.6.0-10.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
 Package                    Arch                         Version                               Repository                      Size
====================================================================================================================================
Removing:
 tree                       x86_64                       1.6.0-10.el7                          @NewBase                        87 k

Transaction Summary
====================================================================================================================================
Remove  1 Package

Installed size: 87 k
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : tree-1.6.0-10.el7.x86_64                                                                                         1/1 
  Verifying  : tree-1.6.0-10.el7.x86_64                                                                                         1/1 

Removed:
  tree.x86_64 0:1.6.0-10.el7                                                                                                        

Complete!

这里要注意,在第四个卸载命令里提到了,remove命令是不会把其依赖的包卸载,而通过undo 命令是可以全部卸载的

10.包组管理的相关命令:
-.yum grouplist
列出所有可使用的软件群组,主要分为以下四类:
Installed environment groups: 已经安装的系统环境包组
Available environment groups: 还可以安装的系统环境包组
Installed groups: 已经安装的包组
Available Groups: 还能额外安装的包组
-.yum groupinstall group1 [group2] […]
安装包组
-.yum groupupdate group1 [group2] […]
升级包组
-.yum groupremove group1 [group2] […]
卸载包组
-.yum groupinfo group1 […]
显示指定包组信息

11.yum的命令行选项:
-y: 自动回答为“ yes”
-q:静默模式
— nogpgcheck:禁止进行gpg check
— disablerepo=repoidglob:临时禁用此处指定的repo
— enablerepo=repoidglob:临时启用此处指定的repo
— noplugins:禁用所有插件

yum命令的用法就简单介绍这么多,同时希望本文能让你对yum的使用有所帮助。关于如何把我们的本地RPM包像yum sever一样通过http或ftp网络方式分享出去,请参考另外一篇博客http://www.178linux.com/78133


原创文章,作者:ffu,如若转载,请注明出处:http://www.178linux.com/77910

(4)
上一篇 2017-06-11 20:31
下一篇 2017-06-11 20:35

相关推荐

  • 话说CentOS6的启动流程

    1.按下开机按钮,电脑的主板通电,电脑开始加电自检(POST,Power On and Self Test),测试主机的硬件是否满足开机的要求. 2.加载主板上的BIOS(Base Input/Output System,基本输入输出系统),BIOS会加载用户设定的第一个可开机设备.,这里我们只说硬盘的加载. 可以按下键盘上的Esc或者是F2或者是Del键,…

    Linux干货 2017-05-14
  • 从Code Review 谈如何做技术

    (这篇文章缘由我的微博,我想多说一些,有些杂乱,想到哪写到哪) 这两天,在微博上表达了一下Code Review的重要性。因为翻看了阿里内部的Review Board上的记录,从上面发现Code Review做得好的是一些比较偏技术的团队,而偏业务的技术团队基本上没有看到Code Review的记录。当然,这并不能说没有记录他们就没有做Code Review…

    Linux干货 2016-08-15
  • CentOS 7网络属性配置

    传统命名:以太网eth[0,1,2,…], wlan[0,1,2,…] 可预测功能 udev支持多种不同的命名方案: Firmware, 拓扑结构 (1) 网卡命名机制 systemd对网络设备的命名方式: (a) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如eno1; (b)…

    Linux干货 2015-05-28
  • 磁盘管理初级

    1、lsblk命令:显示系统上所有可用块设备信息 lsblk [options] [device…]          NAME           &nbs…

    Linux干货 2016-08-29
  • 任务计划2

    [root@localhost app]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/root/bin MAILTO=root   # For details see man 4 crontabs   # Example of job defi…

    Linux干货 2017-05-15
  • linux的基本命令

    先安装一个软件SecureFX8.0,作为伪终端来远程控制虚拟机 1.hostname是虚拟机连接的IP地址 下面来介绍一些linux的基本命令 1. useradd xx 创建一个用户   userdel xx 删除一个用户 不删除用户的文件   User -r xx  删除一个用户且删除该用户的…

    2017-07-14