我最近遇到了一个奇怪的问题,我可以安装zsh
(apt-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
您需要删除多余的配置文件。
您应该安装
dctrl-tools
或grep-status
(不是您可以grep-status
在脚本中使用该命令来删除多余的配置文件相反,以下命令将会很有用:
aptitude purge ~c
这是波浪符号,不是破折号。我听说这样
aptitude purge ?config-files
也可以,但我不知道。如果您觉得不安全,可以先替换
purge
。search