为什么里面有 deb 文件 /var/cache/apt/archives/
?
在什么情况下 deb 文件会被下载到该目录中?
答案1
背景信息
Ubuntu 中(以及 Ubuntu 所基于的 Debian 中)有两个东西通常被称为“包管理器”:dpkg
和 APT。
dpkg
是一个安装和删除软件包的程序,它维护一个数据库,其中包含已安装的软件包及其版本。它安装软件包时,会从.deb
存档文件中进行安装。这些存档是软件包分发的方式。
dpkg
除了复制(或删除)文件和更新数据库之外,它还会运行安装脚本和删除脚本。它可能被认为相当复杂。但它不会做的是查找并下载包。
APT 查找并下载软件包,并dpkg
适当地运行以安装、升级和删除它们。APT 实际上不是任何单个软件,尽管有一个易于提供其基本部件的包。
APT 包括一个库(libapt-gp) 提供核心功能,可通过各种工具访问。一些此类工具(如apt-get
)也由易于软件包。其他工具单独安装。APT 还提供各种配置文件,用于控制其核心库以及使用它的程序的工作方式。
不仅如此,APT 还是一个系统用于存储和检索有关哪些软件源提供哪些版本的软件包的数据,并根据这些数据自动执行软件包管理任务,如安装和升级软件包。这包括跟踪需要哪些软件包其他软件包来运行,并自动挑选和安装适当的软件包来满足这些依赖关系。
例如,当我告诉apt-get
实用程序安装巧克力厄运包,它会找出必须安装哪些其他包才能工作,并且会自动检索和安装它们:
$ 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 系统——通过结合遵守规则和利用核心库提供的功能——改变安装的软件包,为用户提供他/她(通常)想要的东西,以便事情(通常)继续运转。
/var/cache/apt/archives
文件夹的使用方式和时间
什么时候apt-get
,aptitude
,软件中心,突触,软件更新程序/更新管理器或任何其他包管理实用程序从已配置的软件源并安装它们,下载的软件包(即安装它们的 .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
.deb 软件包文件/var/cache/apt/archives
即使在成功安装后仍会保留在缓存中,以备将来使用。但您可以使用 安全地删除那些较旧的、不太可能再次需要的 .deb 文件,或者使用 彻底sudo apt-get autoclean
清除缓存文件。请参阅.deb
sudo apt-get clean
man apt-get
了解更多信息。
为了说明和类似命令的功能sudo apt-get autoclean
,以及确定是否要运行它们,您可以模拟通过在运行过程中使用标志来控制他们的操作-s
。最好传递此标志前(或任何其他)动作动词。使用 时autoclean
,通常不需要以 root 身份运行实用程序,因为不会进行任何实际更改。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 文件。(实际上,当我运行该命令时,并没有发生任何情况,因为它只是一个模拟。)
其他下载文件
通过(通过 APT 或其他方式)安装的软件dpkg
实际上并不是从提供它的 .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
。存储在那里的副本被赋予了可区分的名称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
软件中心使用沙比安索引信息以便于快速搜索。
其他相关实用程序的下载文件
一些与 APT 系统配合使用的附加实用程序会在运行过程中下载并存储文件。Ubuntuapt-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 上的包管理实用程序下载和存储的数据文件的许多示例,但不应被视为使用和存储此类文件的详尽实例列表。