何时以及为何应使用 apt-get update?

Pie*_*ean 16 apt docker

一般问题:

有人可以解释该命令的apt-get update作用以及我何时真正应该使用它吗?


评论

请给出详细的答复。不只是手册页的副本,除非您的版本非常详细(我在下面的手册页中放了一个定义)。

apt-get update:用于从其来源重新同步包索引文件。可用包的索引从 /etc/apt/sources.list(5) 中指定的位置获取。应该始终在升级或 dist-upgrade 之前执行更新。


子问题:

  • 包索引存储在哪里?在数据库上?在文件上?
  • 如果我apt-get install不更新缓存会发生什么?远程包是否有可能不再存在并且链接会断开?
  • 是否有一些关于 deb 存储库的商定政策?例如,存储库是否应该只包含包的最后一个版本,或者相反,它应该包含可用于特定发行版的所有版本?

语境

我问我的问题是因为我正在研究Docker 框架。它的一个功能是Dockerfile,它允许您通过从该文件执行一些指令来构建一种操作系统映像。此图像的一个属性是它应该始终相同,无论上下文是什么(构建时间等)。

恐怕如果我apt-get update在不同的时间启动命令,结果会有所不同,因此我的图像会有所不同。

phe*_*mer 12

apt-get update 下载可用包的列表。

包列表可能会随着时间的推移而改变。添加新包,删除旧包。因此,如果您有一个非常旧的缓存,并且您尝试执行apt-get install,它可能会尝试下载不再存在的包。
旧包在存储库中保留多长时间取决于存储库维护者(您的发行版)。因此,如果您使用 docker 之类的东西,其中缓存可能非常过时,您应该始终apt-get update在安装任何软件包之前运行。

删除和添加软件包的原因主要是错误修复和安全更新。但是,如果您使用像 PPA 这样的 3rd 方存储库,一切都会好起来的。

在企业环境中使用诸如 docker 之类的东西进行容器化时,您应该构建一次容器,然后将该容器移动到您的各种发布环境(开发、暂存、生产)中,而不是每次都重建容器。这将确保您不会得到未经测试的不同容器。

要回答有关缓存文件所在位置的问题,/var/lib/apt/lists.

  • 有点。`apt-get update` 只会影响新安装的软件包。现有包只会在新包需要时升级(这应该是最小的)。使用 apt-get upgrade 可以升级所有软件包,包括现有的软件包,从而产生截然不同的映像。虽然每次从 dockerfile 构建时这可能会导致不同的结果,但我个人认为如果您通过多环境发布,这不是一个严重的问题。我认为如果您将 dockerfile 分发给其他人并让他们构建它,这将是一个更大的问题。 (2认同)