Yum update和upgrade的区别
Linux yum中package升级命令有两个分别是 yum upgrade 和 yum update
1、区别
默认情况下,yum update和yum upgrade的功能是完全一样的,都是将需要更新的package(这里的包包括常规的包、软件、系统版本、系统内核)更新至软件源中的最新版。区别是 yum upgrade会删除旧版本的package,而yum update则会保留,但是这个功能是需要额外配置的!!!
yum 的
upgrade
是等价于打开obsoletes
配置的yum update
。
而默认中/etc/yum.conf
配置文件obsoletes是打开的,因此这两个指令针对系统内核来说是完全等价的。效果就是:yum upgrade == yum update 都是将需要更新的package(这里的包包括常规的包、软件、系统版本、系统内核)更新至软件源中的最新版。
若一定要升级,如果软件依赖旧版本的package,
最好
是使用yum update
(需要配置/etc/yum.conf下的obsoletes值为0
),确保不会出现兼容问题。但再正式环境最好不要使用yum更新
,会出现意想不到的问题。–
1表示更新旧的rpm包的同时会删除旧包,0表示更新的时候不会删除旧包
2、升级
升级软件包的时候,如果不需要升级的内核,可以添加 exclude 参数过滤,例如centos的升级
$ yum --exclude=kernel* --exclude=centos-release* -y update
或者直接修改配置文件 /etc/yum.conf
, 在[main]配置添加配置项
exclude=kernel*
exclude=centos-release*
之后执行
$ yum -y update
配置/etc/yum.conf
文件:
这是一个yum缓存配置文件的示例,obsoletes定义了更新时处理软件包的取代关系,简单来讲,1表示更新旧的rpm包的同时会删除旧包,0表示更新的时候不会删除旧包,
[root@k8s-master1 ~]#cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
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
distroverpkg=centos-release
# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
# It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
[root@k8s-master1 ~]#
因此,yum update和yum upgrade的功能都是一样的,都是将需要更新的package更新到源中的最新版。唯一不同的是,yum upgrade会删除旧版本的package,而yum update则会保留(obsoletes=0)。
3、测试过程
测试前
- 通过check-update选项,可以了解系统中哪些已安装的包当前有更新,如下所示,这些包存在可用的更新
yum check-update
- 查看当前系统版本、内核版本、包版本
- 查看
/etc/yum.conf配置
yum update测试
- 执行命令
yum update -y
重启机器:
- 观察
更新了内核(小版本升级),操作系统版本,软件包版本。
- 修改
/etc/yum.conf下的obsoletes值为0
后,再测试
[root@docker ~]#vim /etc/yum.conf #1表示更新旧的rpm包的同时会删除旧包,0表示更新的时候不会删除旧包,
- 再次升级并重启
[root@docker ~]#yum update -y
[root@docker ~]#reboot
- 观察
更新了内核(小版本升级),操作系统版本,软件包版本。
但是,配置了/etc/yum.conf下的obsoletes值为0
,但旧rpm包依旧是被删除了哇。这个就很奇怪了???和理论不符。
yum upgrade测试
- 执行命令
yum upgrade -y
reboot
- 观察
更新了内核(小版本升级),操作系统版本,软件包版本。
4、参考文章
https://www.jianshu.com/p/761b24775131
https://blog.csdn.net/bisal/article/details/105061873