易于处理从其存储库或*.deb
文件安装的包之间的依赖关系。但是,用户从源代码编译并安装而./configure && make && make install
无需先创建.deb
文件的软件又如何呢?有没有可能易于可以删除此类软件所需的软件包吗?从源代码安装软件会有所不同吗 /opt
?/usr/local
答案1
apt
并且dpkg
绝对可以删除本地安装的不在包管理系统范围内的其他软件所需的软件。根本没有办法apt
知道dpkg
这样的软件可能存在。
此类软件的安装位置没有区别:它可以是/opt
或/usr/local
或在用户的主目录中(在这种情况下,甚至系统管理员也可能不知道它的存在),或者任何地方。
从技术上讲apt
,甚至dpkg
可以删除其他软件所需的软件是包管理系统的一部分,如果后一个软件未能声明它依赖于前一个软件。然而,创建 deb 包的过程包括自动化,以帮助防止包维护者忘记声明这样的依赖项。
答案2
APT 对手动安装的软件一无所知。它不知道该软件需要什么库或任何东西。
当 APT 安装一个软件包只是为了满足另一个软件包的依赖关系时,该软件包会被标记为自动安装。如果删除所有依赖于自动安装的软件包的软件包,则该软件包将在您运行时被删除apt-get autoremove
; APT 的更高级别前端通常会在其他维护之后提供此服务。为了避免删除本地安装的软件所需的软件包,请将这些软件包标记为手动安装:或aptitude 中的密钥。apt-mark manual PACKAGE-NAME
m
要查找二进制可执行文件所需的库包,请运行ldd /path/to/executable
.对于包含 的每一行,运行以显示包含该库的包的名称。对于脚本,显示脚本使用的解释器;确保该解释器保持安装状态。查找脚本使用的库可能很困难,没有通用的方法可以做到这一点。/usr/lib/SOMETHING
dpkg -S /usr/lib/SOMETHING
head -n 1 /path/to/script
如果您手动安装了发行版中存在的更新版本的软件包,请查看发行版软件包的依赖项并将它们标记为手动安装。