Yum update和upgrade的区别

Yum update和upgrade的区别

image-20230610080256965

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

image-20230609073351368

image-20230609073429416

  • 查看当前系统版本、内核版本、包版本

image-20230609073535451

image-20230609073429416

  • 查看/etc/yum.conf配置

image-20230609073648087

yum update测试

  • 执行命令
yum update -y

image-20230609073723397

重启机器:

  • 观察

更新了内核(小版本升级),操作系统版本,软件包版本。

image-20230609075115404

  • 修改/etc/yum.conf下的obsoletes值为0后,再测试
[root@docker ~]#vim /etc/yum.conf #1表示更新旧的rpm包的同时会删除旧包,0表示更新的时候不会删除旧包,

image-20230610073848053

  • 再次升级并重启
[root@docker ~]#yum update -y
[root@docker ~]#reboot
  • 观察

更新了内核(小版本升级),操作系统版本,软件包版本。

image-20230610075525720

但是,配置了/etc/yum.conf下的obsoletes值为0,但旧rpm包依旧是被删除了哇。这个就很奇怪了???和理论不符。

yum upgrade测试

  • 执行命令
yum upgrade -y
reboot
  • 观察

更新了内核(小版本升级),操作系统版本,软件包版本。

image-20230610073205679

4、参考文章

https://www.jianshu.com/p/761b24775131

https://blog.csdn.net/bisal/article/details/105061873

猜你喜欢

转载自blog.csdn.net/weixin_39246554/article/details/131185980