在这个问题描述了如何apt-get
使用选项remove
和来删除一个应用程序purge
。
有没有办法在有效执行之前列出要删除的文件?
我看到有一个-s --simulate
选项,但是执行该命令后并没有显示文件将被删除。
答案1
如果不执行删除操作,就无法完全确定软件包删除或清除的影响,因为软件包中的维护脚本可能会删除比列出的属于该软件包的文件更多的文件。
不过,您可以通过列出每个将被删除的软件包的注册文件来确定至少部分影响。运行 时apt -s
,您会看到以Remv
或为前缀的行Purg
,具体取决于软件包是将被删除还是清除。被清除的软件包将删除 列出的所有文件dpkg -L
;被删除的软件包将删除这些文件,除了列出的文件dpkg-query -W -f='${binary:Package}\n${Conffiles}\n'
。在许多情况下,这将涵盖要删除的所有内容。
答案2
一般来说,无法列出哪些文件可能被删除。软件包包含维护者脚本,这些文件可能会创建或删除文件。这些脚本可能是 shell 脚本、Perl、Python 等 - 因此,如果不实际运行脚本,就无法确定哪些文件将被删除。
此外,普通的删除remove
操作不会删除配置文件(通常是 中的文件)/etc
,但可能包括其他文件(具体取决于哪些文件被标记为 )conffiles
,但purge
也会删除这些文件。
答案3
检查 shell 文件中的清除部分/var/lib/dpkg/info/<package_name>.postrm
以了解运行时会发生什么apt purge <package_name>
。
https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html:
postrm 脚本在软件包的文件被移除或替换后被调用。被调用的软件包可能之前已被解除配置,并且仅处于“解包”状态,此时后续软件包更改不会考虑其依赖项。因此,所有 postrm 操作必须仅依赖于必需软件包,并且如果依赖项不可用,则必须妥善跳过需要软件包依赖项的任何操作。