Linux 命令- yum

        yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。

        基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

        yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

yum 语法

1
yum [options] [command] [package ...]
  • options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为”yes”),-q(不显示安装的过程)等等。
  • command:要进行的操作。
  • package操作的对象。

yum常用命令

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

使用实例

实例1:安装 pam-devel

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@www ~]# yum install pam-devel
Setting up Install Process
Parsing package install arguments
Resolving Dependencies <==先检查软件的属性相依问题
--> Running transaction check
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated
--> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel
--> Running transaction check
---> Package pam.i386 0:0.99.6.2-4.el5 set to be updated
filelists.xml.gz 100% |=========================| 1.6 MB 00:05
filelists.xml.gz 100% |=========================| 138 kB 00:00
-> Finished Dependency Resolution
……(省略)

实例2:移除 pam-devel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@www ~]# yum remove pam-devel
Setting up Remove Process
Resolving Dependencies <==同样的,先解决属性相依的问题
--> Running transaction check
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Removing:
pam-devel i386 0.99.6.2-4.el5 installed 495 k
Transaction Summary
=============================================================================
Install 0 Package(s)
Update 0 Package(s)
Remove 1 Package(s) <==还好,并没有属性相依的问题,单纯移除一个软件
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : pam-devel ######################### [1/1]
Removed: pam-devel.i386 0:0.99.6.2-4.el5
Complete!

实例3:利用 yum 的功能,找出以 pam 为开头的软件名称有哪些?

1
2
3
4
5
6
7
8
9
10
11
12
[root@www ~]# yum list pam*
Installed Packages
pam.i386 0.99.6.2-3.27.el5 installed
pam_ccreds.i386 3-5 installed
pam_krb5.i386 2.2.14-1 installed
pam_passwdqc.i386 1.0.2-1.2.2 installed
pam_pkcs11.i386 0.5.3-23 installed
pam_smb.i386 1.1.7-7.2.1 installed
Available Packages <==底下则是『可升级』的或『未安装』的
pam.i386 0.99.6.2-4.el5 base
pam-devel.i386 0.99.6.2-4.el5 base
pam_krb5.i386 2.2.14-10 base

国内 yum 源

阿里yum源安装

        阿里云与yum源是国内最好的yum源之一。

备份

1
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载新的CentOS-Base.repo 到/etc/yum.repos.d/

CentOS 5
1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

之后运行yum makecache生成缓存

1
2
yum clean all
yum makecache

网易yum源安装

        网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错。

        将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。

安装步骤

首先备份/etc/yum.repos.d/CentOS-Base.repo
1
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)
运行以下命令生成缓存
1
2
yum clean all
yum makecache

        除了阿里和网易之外,国内还有其他不错的yum源,比如中科大和搜狐。

        中科大的yum源,安装方法查看:https://lug.ustc.edu.cn/wiki/mirrors/help/centos

        sohu的yum源安装方法查看: http://mirrors.sohu.com/help/centos.html

配置本地yum仓库

        实现此案例需要按照如下步骤进行。

步骤一:搭建一个本地Yum,将RHEL6光盘手动挂载到/media

        命令操作如下所示:

1
2
3
4
[root@localhost ~]# mount /dev/cdrom /media/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# mount | tail -1
/dev/sr0 on /media type iso9660 (ro)

步骤二:将本地设置为客户端,进行Yum验证

        Yum客户端需编辑配置文件,命令操作如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost ~]# cd /etc/yum.repos.d/ //必须在这个路径下
[root@localhost yum.repos.d]# ls //此路径下事先有配置文件的模板
rhel-source.repo
[root@localhost yum.repos.d]# cp rhel-source.repo rhel6.repo //配置文件必须以.repo结尾
[root@localhost yum.repos.d]# vim rhel6.repo
[rhel-6] //中括号里内容要求唯一,但不要出现特殊字符
name=Red Hat Enterprise Linux 6 //此为描述信息,可以看情况填写
baseurl=file:///media/ //此项为yum软件仓库位置,指向光盘挂载点
enabled=1 //此项为是否开启,1为开启0为不开启
gpgcheck=1 //此项为是否检查签名,1为监测0为不检测
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release //签名认证信息的路径
[root@localhost /]# yum repolist
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel-6 | 3.9 kB 00:00 ...
rhel-6/primary_db | 3.1 MB 00:00 ...
repo id repo name status
rhel-6 Red Hat Enterprise Linux 6 3,690
repolist: 3,690

yum安装“epel”扩展源

        使用yum安装rpm包时,经常遇到一些包没有,这时候你可以尝试安装epel的扩展源,这里有很多系统不自带的rpm包。

1
2
[root@localhost ~]# yum install -y epel-release
[root@localhost ~]# yum list

        你会发现最右侧出现很多epel的rpm包。

阿里云扩展源:

        下载

1
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo

        也可以rpm安装

1
rpm -ivh http://mirrors.zju.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm

Remi源

        安装REMI仓库之前,需要启用EPEL仓库,因为REMI中的一些包依赖于EPEL仓库

        在CentOS 7上:

1
2
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

        在CentOS 6上:

1
2
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

        默认地,REMI是禁用的。要检查REMI是否已经成功安装,使用这个命令。你会看到几个REMI仓库,比如remi、remi-php55和remi-php56。

1
yum repolist disabled|grep remi

从REMI仓库中安装一个包

        如上所述,最好保持禁用REMI仓库,只有在需要的时候再启用。
要搜索或安装REMI仓库中的包,使用这些命令:

1
2
yum --enablerepo=remi search <keyword>
yum --enablerepo=remi install <package-name>

        Remi下载地址

  • 列出可用: yum repolist enabled
  • 列出禁用: yum repolist disabled
  • 列出所有(默认): yum repolist all
  • 列出一个 repo 源(remi) 中可用的包
1
yum --disablerepo="*" --enablerepo="ksplice-uptrack" list available

yum保留下载个rpm包

        可以设置使yum保留已经下载的rpm包,供以后升级或重新安装时使用。

        修改/etc/yum.conf即可

1
2
3
4
[main]
cachedir=/home/soft1/yumcache
keepcache=1
debuglevel=2

        chchedir是放置下载的包的地方,可以修改为自己想放置的位置。

        keepcache为1时表示保存已经下载的rpm包。

yum如何下载rpm包到本地

        首先要安装一个小插件,yum-plugin-downloadonly.noarch ,不知道包名用 yum -list |grep download搜索

1
yum install -y yum-plugin-downloadonly.noarch

        然后就可以下载了:

1
yum install vte --downloadonly --downloaddir=/tmp
1
2
3
4
5
6
7
8
9
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;下载vte到指定/tmp下
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果已安装过的包这个小插件默认是不能下载的,我们可以用 reinstall 下载,如下图例:
![](https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-yum/01.png?raw=true)
```bash
yum reinstall vim --downloadonly --downloaddir=/tmp

yum配置

/etc/yum.conf配置详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
cachedir=/var/cache/yum #yum下载的RPM包的缓存目录
keepcache=0 #缓存是否保存,1保存,0不保存。
debuglevel=2 #调试级别(0-10),默认为2(具体调试级别的应用,我也不了解)。
logfile=/var/log/yum.log #yum的日志文件所在的位置
exactarch=1 #在更新的时候,是否允许更新不同版本的RPM包,比如是否在i386上更新i686
的RPM包。
obsoletes=1 #这是一个update的参数,具体请参阅yum(8),简单的说就是相当于upgrade, 允许更新陈旧的RPM包。
gpgcheck=1 #是否检查GPG(GNU Private Guard),一种密钥方式签名。
plugins=1 #是否允许使用插件,默认是0不允许,但是我们一般会用yum-fastestmirror这
个插件。
installonly_limit=3 #允许保留多少个内核包。
exclude=selinux* #屏蔽不想更新的RPM包,可用通配符,多个RPM包之间使用空格分离。
/etc/yum.repos.d/ *.repo
[fedora] #方括号里面的是软件源的名称,将被yum取得并识别
name=Fedora $releasever - $basearch #这里也定义了软件 仓库的名称,通常是为了方便阅读配置文件,一般没什么作用,$releasever变量定义了发行版本,通常是8,9,10等数字,$basearch变 量定义了系统的架构,可以是i386、x86_64、ppc等值,这两个变量根据当前系统的版本架构不同而有不同的取值,这可以方便yum升级的时候选择 适合当前系统的软件包,以下同……
failovermethod=priority #failovermethod 有两个值可以选择,priority是默认值,表示从列出的baseurl中顺序选择镜像服务器地址,roundrobin表示在列出的服务器中随机选择
exclude=compiz* *compiz* fusion-icon* #exclude这个选项是后来我自己加上去的,用来禁止这个软件仓库中的某些软件包的安装和更新,可以使用通配符,并以空格分隔,可以视情况需要自行添加
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
#上面的一行baseurl第一个字符是'#'表示该行已经被注释,将不会被读取,这一行的意思是指定一个baseurl(源的镜像服务器地址)
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
#上面的这一行是指定一个镜像服务器的地址列表,通常是开启的,本例中加了注释符号禁用了,我们可以试试,将$releasever和$basearch替换成自己对应的版本和架构,例如10和i386,在浏览器中打开,我们就能看到一长串镜可用的镜像服务器地址列表。
选择自己访问速度较快的镜像服务器地址复制并粘贴到repo文件中,我们就能获得较快的更新速度了,格式如下baseurl所示:
baseurl=
ftp://ftp.sfc.wide.ad.jp/pub/Linux/Fedora/releases/10/Everything/i386/os
http://ftp.chg.ru/pub/Linux/fedora/linux/releases/10/Everything/i386/os
http://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora/linux/releases/10/Everything/i386/os
http://mirror.nus.edu.sg/fedora/releases/10/Everything/i386/os
http://mirror.yandex.ru/fedora/linux/releases/10/Everything/i386/os
http://ftp.twaren.net/Linux/Fedora/linux/releases/10/Everything/i386/os
http://ftp.itu.edu.tr/Mirror/Fedora/linux/releases/10/Everything/i386/os
enabled=1 #这个选项表示这个repo中定义的源是启用的,0为禁用
gpgcheck=1 #这个选项表示这个repo中下载的rpm将进行gpg的校验,已确定rpm包的来源是有效和安全的
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch #定义用于校验的gpg密钥