该命令起什么作用apt-get install ...
?
当我输入apt-get install ...
命令时,屏幕上会出现一些文本,但这些信息对我来说还不够。我想知道是否有任何文件被创建/编辑,是否有任何服务被启动以及其他活动...
运行时是否有任何.sh
文件被执行?如果有,我如何才能看到该文件apt-get install ...
的内容?sh
出现此问题的原因是,最近我尝试使用 安装 tomcat7 apt-get install tomcat7
。一切正常,直到我安装tomcat7-admin
(管理器 Web 应用程序)时,服务器才对任何请求没有响应。我尝试了很多次,但总是发生这种情况。
答案1
主要是apt-get
做以下事情:
- 检查依赖项(并要求安装它们),
- 下载包,验证它,然后指示
dpkg
安装它。
dpkg
将要:
- 解压软件包并将内容复制到正确的位置,并检查其中是否存在预先存在的文件及其修改,
- 跑步软件包维护者脚本:
preinst
,postinst
, (如果软件包正在升级,则在此之前为prerm
)postrm
- 根据执行一些操作触发器
您可能对维护者脚本感兴趣,这些脚本通常位于/var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}
。这些通常是 shell 脚本,但没有硬性规定。例如:
$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm
答案2
简而言之:apt-get install
完成系统成功执行新安装的软件应用程序所需的一切操作。
更长:
准备工作:
来自手册页:
还将检索并安装指定安装的软件包所需的所有软件包。
这些软件包存储在网络存储库中。因此,会将apt-get
所有需要的软件包下载到临时目录 ( /var/cache/apt/archives/
)。它们将从 Web 服务器或 FTP 服务器下载。它们在所谓的sources.list
存储库列表中指定。从那时起,它们将按程序逐一安装。
第一个软件包没有其他依赖项,因此不需要为它们安装其他软件包。这样,其他软件包(以前有依赖项)现在不再有依赖项。系统会不断重复此过程,直到安装指定的软件包。
每个包都要经过一个安装过程。
软件包安装:
在基于 Debian 的 Linux 发行版(如 Ubuntu)中,这些软件包采用指定的标准化格式,称为:deb -Debian 二进制软件包格式。
此类软件包包含要安装在系统上的文件。此外,它们还包含控制文件该文件包含打包系统在特定情况下应执行的脚本;所谓的维护者脚本. 这些脚本分为:
preinst
:在将文件安装到系统文件层次结构之前postinst
:安装后prerm
:卸载之前postrm
:卸载后
有一张有趣的图,展示了安装新包的过程:
还有更多的控制文件,最重要的是以下这些:
答案3
对于实际引擎盖下 你需要获取 Apt 源。如果你启用了源存储库,则相当简单:
apt-get source apt
命令apt-get
本身位于 中cmdline/apt-get.cc
。虽然读起来很麻烦,但apt-get
的大多数操作都在那里详细说明。但是,安装是通过DoInstall
中的函数进行映射的apt-private/private-install.{cc,h}
。
您必须记住,apt-get 只是硬币的一面。
dpkg
正在处理实际安装,但DoInstall
无法dpkg
直接了解。apt-get
实际上令人惊讶的是,它与包管理器无关。所有功能都通过apt-pkg/package-manager.cc
我只是粗略地看了看,但即使这样,我也看不出这实际上与系统有什么关联dpkg
。其中一些似乎是自动配置的,apt-pkg/aptconfiguration.cc
但这是一个很深的坑。你可能要花几天时间才能解开这个谜团。
不过源文档还是不错的。你可以做更糟糕的事情,而不是浏览每个文件并阅读标题来弄清楚实际发生了什么。