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

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

在哪些情况下deb文件下载到该目录?

背景资料

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

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

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

APT查找并下载软件包,并相应地运行dpkg以安装,升级和删除它们。 APT并不是真正的任何单一软件,尽管有一个标准 安装apt 提供其必要部件的包装。

APT包括一个库( libapt-pkg ),它提供了各种工具访问的核心function。 apt-get也提供了一些像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系统 – 通过结合观察其规则利用核心库提供的function – 来改变安装的软件包,为用户提供他/她(通常)想要的东西,以这样的方式(通常)继续工作。

如何以及何时使用/var/cache/apt/archives文件夹

apt-getaptitude , 软件中心 , Synaptic , 软件更新程序/更新管理器或任何其他软件包管理实用程序从配置的软件源下载软件包(以及它们依赖的其他软件包)并安装它们时,下载的软件包(即,安装它们的.deb存档文件存储在/var/cache/apt/archives

如果磁盘上有.deb文件,并且使用dpkg安装它,则不会导致在/var/cache/apt/archives中创建它的副本。 但是当使用或实现自动依赖性解析和包检索的APT系统的程序下载包时,它就是存储它们的地方。

虽然自动下载的软件包的.deb文件存储在/var/cache/apt/archives中并从中安装,但它们实际上并未直接下载到该位置。 相反, /var/cache/apt/archives/partial存在不完整(即正在进行)的.deb文件下载,然后在完成后移动到/var/cache/apt/archives

即使在成功安装之后,.deb包文件仍保留在/var/cache/apt/archives中,以备将来使用时使用。 但是您可以安全地删除已经足够老的.deb文件,使用sudo apt-get autoclean不再需要它们,或者使用sudo apt-get clean完全清除缓存的.deb文件。 有关更多信息,请参阅man apt-get

为了说明sudo apt-get autoclean和类似命令的function,以及确定是否要运行它们,可以通过运行-s标志来模拟它们的动作。 最好在autoclean (或其他任何)动作动词之前传递此标志。 在使用-s ,通常不需要使用sudo以root身份运行实用程序,因为没有进行实际更改。

例如,在我的系统上:

 $ 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 )function无关)时,它将它们存储在/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系统一起使用的一些其他实用程序下载并存储文件作为其操作的一部分。 默认情况下,在Ubuntu中没有安装apt-file ,但可以从apt-file安装 安装apt-file 包。

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上的软件包管理实用程序下载和存储的数据文件示例,但不应将其视为使用和存储此类文件的实例的详尽列表。