dpkg 如何知道配置文件已被删除?

dpkg 如何知道配置文件已被删除?

我最近遇到了一个奇怪的问题,我可以安装zshapt-get install zsh),但它不会安装配置文件 - 具体来说/etc/zsh/zshenv和朋友。

经过大量时间和精力,我设法找到了此日志条目:

deferred_configure'/etc/zsh/zshenv'(='/etc/zsh/zshenv') 用户编辑=1已编辑=0 什么=202

解释:

删除文件算作“编辑”它,因为对于许多配置文件来说,文件的缺失是有意义的。

现在,碰巧的是,我删除了/etc/zsh目录,所以这一切都是有意义的 -除了我也做过apt-get remove zsh

那么,既然我已经卸载了 zsh,当我重新安装它时,它为什么会对配置文件的缺失感到惊讶呢?它们不会出现在新系统上——也就是说,没有安装 zsh 的系统——那么它如何知道它们以前有吗?

我该如何阻止它?

我知道我可以通过--force-confmiss,但这不是重点。事实上,我不相信apt-get在任何情况下使用时可以做到这一点。

我不想改变程序的安装方式。相反,我想知道 dpkg 如何确定用户删除了它原本认为不存在的文件。已删除的文件和从未存在过的文件之间有什么区别?这与有关吗apt-get --purge

答案1

来自 dpkg 手册页:

- 消除包裹(...) 删除已安装的软件包。这将删除所有内容除了conf文件,这可以避免稍后重新安装时必须重新配置包(conffiles 是 DEBIAN/conffiles 控制文件中列出的配置文件)。

因此您没有完全删除zsh,但系统中仍保留了一些信息。包的状态将是“d”(已删除)而不是“p”(已清除或从未见过)。

您需要清除软件包以删除conf文件,然后重新安装新软件包。

注意:如果您好奇,您可以检查/var/lib/dpkg/系统对您的包裹了解多少。

答案2

您需要删除多余的配置文件。

  1. 您应该安装dctrl-toolsgrep-status不是您可以grep-status在脚本中使用该命令来删除多余的配置文件

  2. 相反,以下命令将会很有用:

    aptitude purge ~c
    

    这是波浪符号,不是破折号。我听说这样aptitude purge ?config-files 也可以,但我不知道。

    如果您觉得不安全,可以先替换purgesearch

相关内容