update 是下载源里面的metadata(包括这个源有什么包, 每个包什么版本之类的)
同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引(更新软件包索引),告诉包管理器最新的一份源里面的软件包版本信息这样才能获取到最新的软件包
upgrade 是对已经安装的软件包本身进行更新升级的过程,升级之后的版本就是本地索引里的,
upgrade是根据update命令下载的metadata决定要更新什么包(同时获取每个包的位置).
因此,在执行 upgrade 之前一定要执行 update, 这样才能是最新的
可简单的理解为前者是更新整个仓库的版本信息,后者是升级软件包
安装软件之前, 可以不upgrade, 但是要update. 因为旧的信息指向了旧版本的包, 但是源的服务器更新了之后旧的包可能被新的替代了, 于是你会遇到404...
Linux 和 Windows 不一样,同一发行版(比如 Ubuntu) 的不同版本(比如 14.04, 14.10 )用的软件仓库是不一样的,所以有仓库 (repository ) 这样的概念,自然就有了要更新仓库信息的逻辑。
你如果不更新仓库信息, upgrade 就在本地的旧仓库转悠一圈发现并没有要更新的,但实际上本地仓库已经过时了。
这也是为什么用 apt 查找某个包的命令是 apt-cache search xxx 的原因,用的是本地 cache 了仓库信息。
包管理器
作用是从源(Source)服务器那里下载最新的软件包列表,然后在你需要安装某个软件包(apt-get install)的时候从列表里面查询这个软件包的版本信息、系统要求、翻译、依赖项(该软件正常运行必须安装的其它软件)并且添加到同时安装的列表里面,再查询所有安装列表里面的软件包的.deb文件下载地址,最后批量下载,自动分析安装顺序然后安装完成。
但是这个软件包列表是不会被自动下载的,需要用户使用apt-get update更新。这样,apt-get才能知道每个软件包的最新信息,从而正确地下载最新版本的软件。
一般来说,update和upgrade不需要每次安装软件之前都运行,安装新软件的话一天左右运行一次即可,不安装软件的时候隔十天半个月运行一下来更新软件包,服务器系统如果没有安全性更新就别乱更新了,稳定最重要。
PS:软件源服务器地址可以在/etc/apt/sources.list里面看到。