如果我使用 synaptic 删除了一个应用程序(我使用命令通过终端安装的应用程序dpkg -i
),为什么它会从菜单中被删除(应用程序图标消失)但硬盘上仍然存在包含所有文件的完整文件夹?
我不确定为什么我不能像在 OSX 中那样简单地删除整个文件夹。在终端上使用dpkg -r
/-P
命令或 synaptic 也会这样做之后会发生什么?
有什么原因导致我不应该手动删除文件夹?
有人可以解释一下幕后发生的事情,以便像我这样的初学者能够理解他们在做什么(错误)?
更新
我尝试使用该dpkg -r
命令卸载以太坊,但是没有作用(名称错误)???
因此,我认为 Synaptic 卸载以太坊应用程序是成功的。Synaptic 发现了它并将其删除。我还认为所有相关数据也被删除了。
现在我的硬盘上仍然有以太坊的隐藏文件夹,我认为里面只有已经下载的数据,因此可以单独更新应用程序而不会丢失区块链和钱包数据,对吗?我想我现在可以手动删除这些文件,因为我不再需要它们了!
答案1
以下是来自 的一些信息man dpkg
,解释了什么dpkg -r
和dpkg -P
做什么。使用 APT 命令或 synaptic 删除软件包涉及相同的过程;据我所知,高级软件包管理实用程序(如 APT 和 synaptic)只需调用 DPKG 作为子进程来删除或安装文件。它们的功能是计算和解决依赖关系并提供改进的 UI。
-r, --remove package...|-a|--pending
Remove an installed package. This removes everything except conffiles,
which may avoid having to reconfigure the package if it is reinstalled
later (conffiles are configuration files that are listed in the
DEBIAN/conffiles control file)[...]
Removing of a package consists of the following steps:
1. Run prerm script
2. Remove the installed files
3. Run postrm script
-P, --purge package...|-a|--pending
Purge an installed or already removed package. This removes everything,
including conffiles. [...]
Note: some configuration files might be unknown to dpkg because
they are created and handled separately through the configuration
scripts. In that case, dpkg won't remove them by itself, but the
package's postrm script (which is called by dpkg), has to take care
of their removal during purge. Of course, this only applies to files
in system directories, not configuration files written to individual
users' home directories.
Purging of a package consists of the following steps:
1. Remove the package, if not already removed.
2. Run postrm script.
如您所见,这些命令会删除应用程序的所有文件(配置文件除外)。-P / --purge
在某些情况下,甚至可能不会始终从用户的主目录中删除本地配置文件,因此如果不再需要这些文件,则可能需要手动删除它们。当您提到卸载后剩余的应用程序目录时,您很可能指的是本地配置目录。*
在我对一个相关问题的回答我讨论了 APT、DPKG 和其他安装在 Ubuntu 系统上的包管理器如何以人类可读的形式存储有关包提供的文件的信息。
该答案还试图解释为什么使用包管理器来处理包管理比手动处理要容易得多;在典型的 Linux 文件系统中,应用程序提供的文件分散在各处。虽然这看起来可能令人困惑,但将应用程序文件放在 root 拥有的系统目录中(用户无法写入)具有很大的安全优势。此外,如果我们确实需要找出与包相关的文件的位置,我们可以使用各种命令行实用程序来查找它们。
你想知道删除应用程序的所有文件来卸载它是否是个坏主意,如果是,为什么。我对这个问题的回答是是的,一般来说,这是一个非常糟糕的想法,因为删除已安装的文件只是您调用包管理执行卸载时所做工作的一部分。DPKG 数据库存储了有关哪些包已安装和可安装的信息,以及它们之间的所有依赖关系。如果在未更新数据库的情况下删除了包文件,则依赖关系解析将无法完成,依赖于悄悄丢失的软件的软件将无法运行,包将被破坏,prerm 和 postrm 脚本调用对每个被删除的dpkg
包进行的清理将无法完成,可能会留下损坏的符号链接和不正确的配置文件,一切都会变得很糟糕。
总结
包管理器的存在是有充分理由的。尽可能使用它们,而不是自己尝试。
*但是,有时软件可能会在 DPKG 不知情的情况下安装(并有一个目录)。例如,您可以下载第三方应用程序,提取存档并运行可执行文件。要“卸载”此软件,您需要能只需删除解压的文件即可。另一个示例是使用sudo make install
编译后的源代码进行安装,这会留下源目录。如果开发人员没有配置以启用sudo make uninstall
或不包含文件清单,则卸载此类软件可能会很麻烦!解决此问题的一种方法是在之后创建一个 deb 包make
,可以使用 来完成checkinstall
。