Answers:
在Ubuntu(以及Ubuntu所基于的Debian)中,有两件事通常被称为“程序包管理器”:dpkg
和APT。
dpkg
是一个程序,可以安装和删除软件包,并维护一个数据库,其中包含安装了哪些软件包,安装了哪些版本。安装软件包时,它是从.deb
存档文件中安装的。这些档案是软件包分发的方式。
dpkg
除了复制(或删除)文件并更新其数据库外,它还可以运行安装脚本和删除脚本。它可能被认为是相当复杂的。但是它不会做的就是找到并下载软件包。
APT查找并下载软件包,并dpkg
适当运行以安装,升级和删除它们。尽管有一个apt软件包提供了其必不可少的部分,但APT实际上并不是任何软件。
APT包含一个提供核心功能的库(libapt-pkg),可以通过各种工具进行访问。apt软件包apt-get
还提供了一些此类工具,例如。其他工具是单独安装的。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-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
完成时。
/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-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
也下载许多东西?如果是,他们在哪里?