Linux 中的包、存储库和安装过程

fee*_*ree 2 ubuntu software-installation repository

我在互联网上阅读了许多关于如何在 Linux 上安装程序的文章,例如 Ubuntu,但我仍然感到困惑!

直到现在我的理解是:

  1. 首先,我们应该添加包含我们想要的包的存储库。在 Ubuntu 中,它将通过取消注释/etc/apt/sources.list文件中的相关行来完成。

  2. 然后我们应该通过执行更新我们的存储库的包列表apt-get update

  3. 最后,通过执行安装我们的程序apt install

……可是还是看不懂啊!

  1. 当我们在 中取消注释存储库时sources.list,是否意味着我们告诉操作系统:“在我的计算机上下载此存储库”?是否需要下载存储库?如果不是,那么通过取消对sources.list 中的一行注释在系统中会发生什么?

  2. 究竟是apt-get update做什么的?正如我所读:

     apt-get update downloads the package lists from the repositories and
    "updates" them to get information on the newest versions of packages
     and their dependencies.
    
    Run Code Online (Sandbox Code Playgroud)

这究竟是什么意思?我们有一个包含一些包的存储库;这是否意味着某些存储库可能已过时?那么为什么他们不更新服务器上的存储库,这些存储库将始终是最新的,而且没有人需要这样做 apt-get update

mur*_*uru 5

当我们在 中取消注释存储库时sources.list,是否意味着我们告诉操作系统:“在我的计算机上下载此存储库”?

不。

是否需要下载存储库?

通常不会。除非您想下载数百 GB 的数据。

如果不是,那么通过取消对sources.list 中的一行注释在系统中会发生什么?

没什么,

我们有一个存储库,它有一些包,这是否意味着某些存储库可能已过时?

存储库可能已经过时,是的,但这不是这里讨论的内容。

那么为什么他们不更新服务器上的存储库,这些存储库将始终保持最新并且没有人需要执行 apt-get 更新?

它不是这样工作的。发生的事情是这样的:

  1. 存储库包含包,确实如此,但它们也包含有关这些包的信息(元数据):包名称、版本、包的依赖关系、包包含的文件列表、包的哈希值等。
  2. apt-get update 下载此元数据。
  3. apt-get installupgrade等然后在您告诉它安装包时使用此元数据 - 它检查可用版本,检查是否需要作为依赖项安装其他包,等等。
  4. 当存储库更新时,元数据将更新为,但之前下载的本地副本不会。这是很自然的,如果您的元数据副本已过时,您不希望您的 PC 不断检查服务器。
  5. 现在,下一次你需要安装一个软件包,你可能面临的问题,因为你的系统有过时的元数据,因此它不能找出正确的事情。
  6. 然后您需要运行apt-get update以更新此元数据。
  7. 正如我所说,当您取消注释源代码行时,还没有发生任何事情。下次运行时apt-get update,它也会从该源下载元数据。下次安装、升级或删除软件包时,apt 会在解决问题时考虑额外的元数据。

这就是 apt 的工作原理。另一方面,Yum 会检查更新的元数据并在您添加、删除或升级包时下载它。这两种方法各有优缺点。