为什么/ var / cache / apt / archives /中有deb文件?


Answers:


21

背景资料

在Ubuntu(以及Ubuntu所基于的Debian)中,有两件事通常被称为“程序包管理器”:dpkg和APT。

dpkg是一个程序,可以安装和删除软件包,并维护一个数据库,其中包含安装了哪些软件包,安装了哪些版本。安装软件包时,它是从.deb存档文件中安装的。这些档案是软件包分发的方式。

dpkg除了复制(或删除)文件并更新其数据库外,它还可以运行安装脚本和删除脚本。它可能被认为是相当复杂的。但是它不会做的就是找到并下载软件包。

APT查找并下载软件包,并dpkg适当运行以安装,升级和删除它们。尽管有一个apt安装apt软件包提供了其必不可少的部分,但APT实际上并不是任何软件。

APT包含一个提供核心功能的库(libapt-pkg),可以通过各种工具进行访问。apt软件包apt-get还提供了一些此类工具,例如。其他工具是单独安装的。APT还提供各种配置文件,这些文件控制其核心库以及使用它的程序的工作方式。安装apt

不仅如此,APT是一个系统,用于存储和检索有关哪些软件源提供了哪些软件包的哪个版本的数据,并根据这些数据进行操作以自动执行软件包管理任务(如安装和升级软件包)。这包括跟踪工作其他软件包所需的软件包,并自动选择并安装适当的软件包来满足这些依赖性。

例如,当我告诉该apt-get实用程序安装Chocolate-Doom安装巧克力布丁软件包时,它会指出还需要安装哪些其他软件包才能起作用,并且也会自动检索并安装它们:

$ sudo apt-get install chocolate-doom
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  doom-wad-shareware libmikmod3 libsdl-mixer1.2 libsdl-net1.2 libsdl1.2debian
Recommended packages:
  doom-engine
The following NEW packages will be installed:
  chocolate-doom doom-wad-shareware libmikmod3 libsdl-mixer1.2 libsdl-net1.2
  libsdl1.2debian
0 upgraded, 6 newly installed, 0 to remove and 1 not upgraded.
Need to get 0 B/2,846 kB of archives.
After this operation, 8,626 kB of additional disk space will be used.

诸如软件中心,软件更新程序/更新管理器和Synaptic之类的图形工具执行类似于的功能apt-get。他们还通过观察 APT系统的规则利用核心库提供的功能来结合使用APT系统,以更改安装的软件包,向用户(通常)提供所需的东西,以这种方式(通常)继续工作。

使用/var/cache/apt/archives文件夹的方式和时间

apt-getaptitude软件中心立得软件更新/更新管理器,或任何其它软件包管理工具的下载包(另包,他们依赖于)从配置的软件源并进行安装,下载包(即,.deb文件归档文件安装它们的位置)存储在中/var/cache/apt/archives

如果磁盘上有.deb文件并随同安装了该文件dpkg,则不会导致在其中复制该文件/var/cache/apt/archives。但是,当使用或实现自动依赖关系解析和程序包检索的APT系统的程序下载程序包时,即在其中存储程序包。

自动下载的软件包的.deb文件存储在其中并从中安装时/var/cache/apt/archives,实际上并没有直接下载到该位置。而是,存在不完整(即进行中)的.deb文件下载/var/cache/apt/archives/partial,然后将其下载到/var/cache/apt/archives完成时。

/var/cache/apt/archives即使成功安装后,.deb程序包文件仍会保留在其中,以备将来使用。但是,你可以安全地删除.deb文件是足够老就不可能再有需要他们的文件sudo apt-get autoclean,或者清除缓存.deb完全用文件sudo apt-get clean。请参阅man apt-get以获取更多信息。

为了说明sudo apt-get autoclean和类似命令的功能,以及确定是否要运行它们,可以通过运行带有标志的then 模拟它们的动作-s。最好在(或任何其他)动作动词之前传递此标志autoclean。这不是通常需要运行一个实用程序,根与sudo使用的时候-s,因为没有实际的改变正在取得进展。

例如,在我的系统上:

$ apt-get -s autoclean
NOTE: This is only a simulation!
      apt-get needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Del libubsan0 4.9.1-15ubuntu1 [83.7 kB]
Del cups-server-common 1.7.5-3 [519 kB]
Del python2.7 2.7.8-9 [205 kB]
Del g++-4.9 4.9.1-15ubuntu1 [17.4 MB]
Del libstdc++-4.9-dev 4.9.1-15ubuntu1 [1,121 kB]
    ....

列出的软件包不会被卸载;而是仅删除缓存的.deb文件。(实际上,当我运行该命令时,这都没有发生,因为它只是一个模拟。)

其他下载文件

通过dpkg(通过APT或其他方式)安装的软件实际上不是从提供它的.deb文件中运行的。如背景信息部分所述,.deb文件被提取。这就是为什么可以将它们删除并且已安装的软件包继续运行的原因。

从.deb软件包安装的整个系统中的文件不会下载到其当前位置-而是从提供它们的.deb文件中提取到它们(或者可能是在安装过程中或之后专门创建的)对于某些配置文件)。

但是,.deb文件不是软件包管理实用程序下载的唯一文件。通常会下载其他文件,这些文件提供有关软件包存在位置的信息。

例如,当我运行时sudo apt-get update,输出包括如下行:

Get:13 http://us.archive.ubuntu.com utopic/main i386 Packages [1,341 kB]

这意味着已下载并检查了一个文件,例如http://us.archive.ubuntu.com/ubuntu/dists/utopic/main/binary-amd64/Packages.bz2,以帮助更新APT数据库以及可用软件包的信息(以及使用哪个版本)。您可以在/var/lib/apt/list目录中找到Packages文件以及其他此类文件。存储在那里的副本具有不同的名称,例如us.archive.ubuntu.com_ubuntu_dists_utopic_main_binary-amd64_Packages,因为可能有很多这样的文件。

apt-cache具体询问过。它查询软件包数据库,但不对系统进行任何更改或下载任何文件。

软件中心专用的已下载文件

当Ubuntu软件中心下载专用于它的,与通用APT(或dpkg)功能无关的数据供自己使用时,会将其存储在中/var/cache/software-center

例如,在我的系统(和大多数系统)上,该文件夹包含一个xapian子文件夹:

ek@Ilex:/var/cache/software-center/xapian$ ls
flintlock       postlist.baseB  record.baseB    spelling.baseB  termlist.baseB
iamchert        postlist.DB     record.DB       spelling.DB     termlist.DB
postlist.baseA  record.baseA    spelling.baseA  termlist.baseA

软件中心使用Xapian对信息进行索引以进行快速搜索。

其他相关实用程序的下载文件

一些与APT系统配合使用的实用程序会在操作过程中下载并存储文件。apt-file在Ubuntu中默认未安装,但可以从apt-file安装apt文件软件包中安装。

apt-file存储有关哪些软件包(包括未在本地安装的软件包)提供哪些文件的信息。它通过下载压缩Contents文件来获得有关软件包内容的以下信息:

$ sudo apt-file update
Downloading complete file http://us.archive.ubuntu.com/ubuntu/dists/utopic/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 29.6M  100 29.6M    0     0   856k      0  0:00:35  0:00:35 --:--:--  832k

apt-file update以root身份运行时(如上所述),这些文件将下载到/var/cache/apt/apt-file目录中。为了发现这一点,我跑了:

$ sudo updatedb
$ locate Contents-amd64
/var/cache/apt/apt-file/us.archive.ubuntu.com_ubuntu_dists_utopic-proposed_Contents-amd64.gz
/var/cache/apt/apt-file/us.archive.ubuntu.com_ubuntu_dists_utopic_Contents-amd64.gz

请注意,本文中提供的信息提供了许多由Ubuntu上的软件包管理实用程序下载和存储的数据文件的示例,但不应视为使用和存储这些文件的实例的详尽列表。


谢谢。做apt-cache 或/并且apt-file也下载许多东西?如果是,他们在哪里?
2014年

什么是“但是当使用或实现自动依赖关系解析和程序包检索的APT系统的程序下载程序包时,它将在其中存储程序包。” 意思?
2014年

@Tim我已经在很大程度上扩展了我的答案,希望我能正确回答这些问题(以及更多)。与往常一样,我们非常欢迎您提供反馈意见,尤其是如果不清楚的话。
伊利亚·卡根

感谢“ apt-cache查询程序包数据库”,该数据库是联机的还是在本地计算机上?apt-cache是​​否需要访问互联网?
2014年

1
@Orian(很高兴这个答案有所帮助!)您可以单击问题上的星号。它仅在问题的分数和投票箭头下方。然后问题出现在个人资料的“ 收藏夹”选项卡中。只能收藏问题。就此答案而言,它是目前唯一的问题。可能会发布其他内容-尽管您可能也想看看这些内容,因为有时新的答案包含有关主题中新进展的信息。您可以使用浏览器的书签,甚至可以为答案使用书签。使用答案下方的共享链接以特定答案打开页面。
伊利亚·卡根
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.