apt-get update ,upgarde 和dist-upgrade 的区别

1、update和upgrade分别是更新什么呀?

首先说明一下update和upgrade分别是更新的是什么:

    update是下载源里面的metadata的. 包括这个源有什么包, 每个包什么版本之类的.
    upgrade是根据update命令下载的metadata决定要更新什么包(同时获取每个包的位置).

ps:安装软件之前, 可以不upgrade, 但是要update. 因为旧的信息指向了旧版本的包, 但是源的服务器更新了之后旧的包可能被新的替代了, 于是你会遇到404...

作者:James Swineson
链接:https://www.zhihu.com/question/21732981/answer/19143492
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

以下为个人理解,细节可能不准确。

apt-get是某些linux发行版使用的一个“包管理器”(还有别的发行版使用yum等,以及brew等其他平台上的包管理器,工作原理类似)。
包管理器的作用是从 源(Source)服务器那里下载最新的软件包列表,然后在你需要安装某个软件包(apt-get install)的时候从列表里面查询这个软件包的版本信息、系统要求、翻译、依赖项(该软件正常运行必须安装的其它软件)并且添加到同时安装的列表里面,再查询所有安装列表里面的软件包的.deb文件下载地址,最后批量下载,自动分析安装顺序然后安装完成。
但是这个软件包列表是不会被自动下载的,需要用户使用apt-get update更新。这样,apt-get才能知道每个软件包的最新信息,从而正确地下载最新版本的软件。
至于apt-get upgrade,则是对已经安装的软件包本身进行更新的过程。由于确定要更新的软件包需要对本地安装的版本和列表的版本进行比较,所以要在update以后运行这一条。
要求在install操作之前执行update和upgrade,实际上是确保本地软件列表信息和已安装软件均为最新的过程。这样做可以最大限度地确保新安装的软件包正常工作。
一般来说,update和upgrade不需要每次安装软件之前都运行,安装新软件的话一天左右运行一次即可,不安装软件的时候隔十天半个月运行一下来更新软件包,服务器系统如果没有安全性更新就别乱更新了,稳定最重要。
PS:软件源服务器地址可以在/etc/apt/sources.list里面看到。

2、apt-get upgrade和dist-upgrade的差别:

upgrade:系统将现有的Package升级,如果有相依性的问题,而此相依性需要安装其它新的Package或影响到其它Package的相依性时,此Package就不会被升级,会保留下来. 

dist-upgrade:可以聪明的解决相依性的问题,如果有相依性问题,需要安装/移除新的Package,就会试着去安装/移除它. (所以通常这个会被认为是有点风险的升级) 

apt-get upgrade 和 apt-get dist-upgrade 本质上是没有什么不同的。只不过,dist-upgrade 会识别出当依赖关系改变的情形并作出处理,而upgrade对此情形不处理。

例如软件包 a 原先依赖 b c d,但是在源里面可能已经升级了,现在是 a 依赖 b c e。这种情况下,dist-upgrade 会删除 d 安装 e,并把 a 软件包升级,而 upgrade 会认为依赖关系改变而拒绝升级 a 软件包。

reference:
http://www.2cto.com/os/201301/183519.html
https://www.zhihu.com/question/21732981

你可能感兴趣的:(linux)