yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器。起初是由yellow dog 这一发行版的开发者Terra Soft 研发,用python 写成,那时还叫做yup(yellow dog updater),后经杜克大学的Linux@Duke 开发团队进行改进,遂有此名。yum 的宗旨是自动化地升级,安装/移除rpm 包,收集rpm 包的相关信息,检查依赖性并自动提示用户解决。yum 的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http 或ftp 站点,也可以是本地软件池,但必须包含rpm 的header,header 包括了rpm 包的各种信息,包括描述,功能,提供的文件,依赖性等。正是收集了这些header 并加以分析,才能自动化地完成余下的任务。
yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级、安装、删除等等操作,减少了Linux 用户一直头痛的dependencies 的问题。这一点上,yum 和apt 相同。apt 原为debian 的deb 类型软件管理所使用,但是现在也能用到RedHat 门下的rpm 了。
yum 主要功能是更方便的添加/删除/更新RPM 包,自动解决包的倚赖性问题,便于管理大量系统的更新问题。
yum 可以同时配置多个资源库(Repository),简洁的配置文件(/etc/yum.conf),自动解决增加或删除rpm包时遇到的依赖性问题,保持与RPM 数据库的一致性。
ftp://
http://
nfs://
file://
[root@Linux_11 ~]# rpm -qc yum
/etc/logrotate.d/yum # yum日志滚动相关设置
/etc/yum.conf # yum全局配置选项,为所有仓库提供公共配置
/etc/yum/version-groups.conf #创建软件包组的相关设置
[main] # 公共主配置段,对所有yum源生效
cachedir=/var/cache/yum/$basearch/$releasever # yum在此存储下载的rpm包和数据库,一般是/var/cache/yum。
keepcache=1 # 是否保存从服务器下载下来的rpm包,是否保持yum缓存,默认为0。
debuglevel=2 # 调试级别,0-10,默认是2。
logfile=/var/log/yum.log #yum存放yum日志文件的路径
exactarch=1 # 是否精确匹配平台
obsoletes=1 #简单的说就是相当于upgrade,允许更新陈旧的RPM包。
gpgcheck=1 # 是否进行来源合法性和包的吉完整性
plugins=1 # 是否支持插件机制,默认是0不允许。
installonly_limit=5 #允许保留多少个内核包。
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release #指定一个软件包,yum会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包。
如何查看yum配置文件说明:
[root@Linux_11 ~]# whatis yum.conf
yum.conf [yum] (5) - Configuration file for yum(8)
[root@Linux_11 ~]# man 5 yum.conf # 5可以省略
注意:
默认情况下yum在安装完了软件包之后,会将软件包自动删除,但是元数据不会删除
查看CentOS下面默认的yum源
[root@Linux_11 ~]# cd /etc/yum.repos.d/
[root@Linux_11 yum.repos.d]# ls
CentOS-Base.repo CentOS-Media.repo
CentOS-Debuginfo.repo CentOS-Vault.repo
注意:其中CentOS-Media.repo是本地源
[root@Linux_11 yum.repos.d]# pwd
/etc/yum.repos.d
[repositoryID] # yum的ID
name=Somenameforthisrepository #yum源的名称,功能性的描述
mirrorlist=http:// # baseurl列表文件的地址,里面保存的是baseurl地址,要使用此项,yum必须支持插件功能
baseurl=url://path/to/repository/
url://path/to/repository/
url://path/to/repository/ # yum源的url地址,baseurl可以有多个URL地址
enabled={1|0} # 是否启用此yum源,默认启用
gpgcheck={1|0} # 是否进行gpg检验
gpgkey=URL # gpg的URL地址
enablegroups={1|0} # 是否支持在此仓库上使用组批量管理程序包,默认为1,是启用的
failovermethod={roundrobin|priority} # 指定使用什么算法来确定baseurl,默认为:roundrobin,意为随机挑选,后者是优先级,即自上而下的。但是默认是随机挑选,并不是自上而下。
cost # 定义了cost的,且数字较小的,会被优先访问,默认为1000
注意:
baseurl可以有多个url
且等号两边不能有空格
配置网络yum源
primary_db元数据
repolist[all|enabled|disabled]
yum repolist all #显示所有yum源
yum repolist enabled #显示可用的yum源
yum repolist disabled #显示不可用的yum源
示例:显示所有yum源
提示:
status表示此yum源是否可用
示例:显示不能使用的yum源
[root@Linux_1 yum.repos.d]# yum repolist disabled
Loaded plugins: fastestmirror, refresh-packagekit, security
repo id repo name
C6.0-base CentOS-6.0 - Base
C6.0-centosplus CentOS-6.0- CentOSPlus
C6.0-contrib CentOS-6.0 - Contrib
C6.0-extras CentOS-6.0 -Extras
C6.0-updates CentOS-6.0 - Updates
C6.1-base CentOS-6.1 - Base
C6.1-centosplus CentOS-6.1- CentOSPlus
C6.1-contrib CentOS-6.1 - Contrib
C6.1-extras CentOS-6.1 - Extras
C6.1-updates CentOS-6.1 - Updates
C6.2-base CentOS-6.2 - Base
C6.2-centosplus CentOS-6.2- CentOSPlus
C6.2-contrib CentOS-6.2 -Contrib
C6.2-extras CentOS-6.2 - Extras
list子命令
yumlist{available|installed|updates}[glob_exp1][...]
yum list all #显示所有软件包
yum list available #显示可用的软件包,但是尚未安装的软件包
yum list installed #显示已经安装的软件包
yum list updates #显示可供更新的软件包
yum list php* #可以使用通配符
yum list extras
yum list obsoletes #查看废弃的软件包,列出所有已安�b但不在Yum Repository �鹊娜砑�包
yum list recent #查看最近添加到yum仓库中的软件包
示例:显示所有软件包
yum list 默认是all,即显示所有软件包
说明:
显示为@anaconda表示是安装操作系统时安装的软件包
install子命令
install package1[package2][...]
reinstall package1[package2][...](重新安装)
yum install #安装软件包
yum reinstall #重新安装
提示:
C yum install可以一次安装多个包。
C 默认不输入“Y”是不会安装的
C 一个软件包有多个版本,则可以使用yum install 版本号来指定要安装的软件的版本。例如yum install gcc4.5.5,默认是安装最新版本
update [package1][package2][...]
downgrade package1[package2][...](降级)
yum update #升级指定的程序包,同样可以一次升级多个包
yum downgrade #降级指定程序包
yum check-update #显示可供升级的软件包
yum upgrade #显示可升级的软件包
提示:
两者作用一样
remove|erase package1[package2][...]
yum remove #卸载指定程序包
yum erase #卸载指定程序包
提示:
卸载包的时候连同它的依赖软件也会一同卸载
两个命令使用相同
info[...]:information:
yum info #查看软件包的相关信息
(可以是某文件)是由哪个程序包所提供:
provides|whatprovides feature1[feature2][...]
yum provides #查看某个文件由属于哪个软件包,后面可以跟多个文件一起查看
yum whatisprovides
提示:
两者作用一样
clean [packages|metadata|expire-cache|rpmdb|plugins|all]
yum clean packages
yum clean metadata
yum clean expire-cache
yum clean rpmdb
yum clean plugins
yum clean all
yum makecache
说明:将服务器上的软件包信息先在本地缓存以提高搜索安装软件的速度,不用执行也可以的。配合yum -C search xxx使用不用上网检索就能查找软件信息执行完 yum makecache之后,你可以用yum search subversion和yum -C search subversion
search string1[string2][...]
以指定的关键字搜索程序包名及summary信息;
yum search #搜索程序包
示例:
yum search bash
提示:
" 并不是精确匹配,而是模糊匹配
" 不光匹配软件包名中包含的查找字符串,还会匹配summary中包括的信息
deplist package1[package2][...]
yum deplist #查看某软软件包依赖什么软件包
versioin
history子命令
history[info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
yum history info
yum history list
yum history packages-list 包名
yum history packages-info 包名
yum history summary
yum history addon-info
yum history redo
yum history undo
yum history rollback
yum history new
yum history sync
yum history stats
示例:查看事务历史
[root@Linux_1 ~]# yum history
Loaded plugins: fastestmirror, refresh-packagekit, security
ID | Login user | Date and time | Action(s) |Altered
-------------------------------------------------------------------------------
7 | root<root> | 2015-12-3110:00 | Install | 104
6 | root<root> | 2015-12-3109:58 | Install | 10
5 | root<root> | 2015-12-3109:55 | Install | 132
4 | root<root> | 2015-12-3109:48 | Install | 36 <
3 | root<root> | 2015-12-3013:12 | Install | 23 >
2 | root <root> | 2015-11-18 13:44 | Install | 15 <
1 | System<unset> | 2015-11-1423:50 | Install | 1107 >
[root@Linux_1 ~]# yum history summary
Loaded plugins: fastestmirror, refresh-packagekit, security
Login user | Time | Action(s) | Altered
-------------------------------------------------------------------------------
root <root> | Last day |Install | 305
System <unset> | Last 3 months |Install | 1107
root <root> | Last 3 months |Install | 15
history summary
注意:
第一次yum的执行都启动了一次yum事务,查询不是事务,只有安装、升级、卸载才是事务
localinstall rpmfile1[rpmfile2][...]
(maintainedforlegacyreasonsonly-useinstall)
localupdate rpmfile1[rpmfile2][...]
(maintainedforlegacyreasonsonly-useupdate)
yum localinstall
yum locateupdate
提示:
以两命令是为了兼容,CentOS5之前的系统只能使用localinstall,现在已经被install代替。
groupinstall group1[group2][...]
groupupdate group1[group2][...]
grouplist [hidden][groupwildcard][...]
groupremove group1[group2][...]
groupinfo group1[...]
yum groupinstall #安装软件包组
yum groupupdate #更新软件包组
yum grouplist #查看所有的软件包组
yum groupremove #删除软件包组
yum groupinfo #查看某一个软件包组的相关信息
--nogpgcheck:禁止进行gpgcheck;
�Cy:自动回答为“yes”
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;
$releasever #当前OS的发行版的主版本号,如6、7
$arch #平台
$basearch #基础平台,如i386、x86_64
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
例如:
http://mirror.centos.org/centos/6/i386/os
http://mirror.centos.org/centos/6/x86_64/os
提示:
如上使用变量的好处是当客户端发生变化的时候,不用更改baseurl的url,因为会主动取得当前客户端的相关信息。
createrepo[options]<directory>
--basedir
第一步:下载并安装createrepo命令
[root@Linux_1 ~]# yum install createrepo#由python研发
第二步:建立元数据
createrepo ./ #把所有需要作成yum源的软件包放在./目录下
第一步:挂载光盘
[root@Linux_11 yum.repos.d]# mount /dev/cdrom /mnt/
第二步:创建并修改本地yum源
#
# To use this repo, put in your DVD and use it with the other repostoo:
# yum --enablerepo=c6-media[command]
#
# or for ONLY the media repo, do this:
#
# yum --disablerepo=\*--enablerepo=c6-media [command]
[c6-media]
name=本地yum源CentOS-$releasever - Media
baseurl=file:///mnt/ # 此处baseurl必须指向repodata目录
file:///media/
file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
注意:
" baseurl必须指向repodata目录
" 必须使用file://协议
" 第三个“/”指的是文件系统的根路径
如果配置文件中指明作版本精确匹配,yum源只能升级,不能降级。例如:CentOS6.1的yum源可以指向6.2的yum源,只能升不能降。
yum的安装是会启动事务的,事务又有隔离概念,也就是说不能在两个终端同时使用yum安装,这是不允许的,因此产生阻塞。
本文出自 “静心&清心” 博客,谢绝转载!