我想将文件/etc/
恢复为最初安装的形式。自安装以来,我已经编辑了该文件。我怎样才能恢复这个配置文件?Apt 足够聪明,不会覆盖已编辑的配置文件,那么我如何告诉它我希望它这样做呢?
为了论证起见,假设我想/etc/foo.conf
从 package中恢复文件foo
。
我想将文件/etc/
恢复为最初安装的形式。自安装以来,我已经编辑了该文件。我怎样才能恢复这个配置文件?Apt 足够聪明,不会覆盖已编辑的配置文件,那么我如何告诉它我希望它这样做呢?
为了论证起见,假设我想/etc/foo.conf
从 package中恢复文件foo
。
Ryan Thomson 提供的答案是正确的。仍然无法完成这项工作(详细原因如下)。
正确(也是最简单)的方法是使用
-o
withapt
传递 dpkg 选项并强制dpkg
询问您是要保留修改后的配置文件还是原始配置文件。命令将是这样的 -这会问你一个问题
您必须按Y或I来安装软件包维护者的原始配置文件。您甚至可以按 D 查看更改或使用 Z 选项启动 root shell 来修复自己。
注意:替换后,您会发现修改后的文件为
at /etc/foo/foo.conf.dpkg-old
为什么其他选项不起作用?
因为 dpkg 中的其他选项效果不佳。处理包配置文件的选项是
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
当包版本不改变时将不起作用。从手册页--force-confmiss
适用于缺少的配置文件。当版本没有改变时,它也会失败。引用手册页--force-confold
仅当版本更改时才会保留修改后的版本。对于相同的包,它也会失败。引用手册页--force-confdef
也将失败,因为默认操作是保留旧文件(从显示的消息中指示--force-confask
。它有一行(Y/I/N/O/D/Z) [default=N]
表示保留是默认的。见上文)。如果--force-confnew
指定了但版本没有改变,那也不起作用。引用手册页只有
--force-confask
会起作用,因为即使版本相同,它也会明确地问你这个问题。引用手册页希望这会有所帮助。
如果危害已经造成,这里有一个命令行方式来取回配置文件的正式版本。首先,下载包文件(
apt-get --download-only
如下所示,或从packages.ubuntu.com上的包页面下载),然后将其内容提取到临时位置。然后,您可以将文件复制到/etc
. 确保尊重原始权限(其中的大多数文件/etc
由 root 和模式 644 拥有(即字可读和 root 可写),但每个例外都有一个重要原因)。请注意,这不适用于不是来自包的配置文件,例如
/etc/fstab
或/etc/passwd
。如果你失去了这些,你就靠自己了。(无论如何,大多数都非常依赖系统。)对于未来,我建议使用etckeeper 。安装包并运行
sudo etckeeper init
。这为/etc
. 您不需要做任何其他事情来管理 etckeeper;你只需要在你想做版本控制操作时与它进行交互,比如引用旧文件。文件在每次 apt 运行前后和每晚自动提交(这是可配置的)。默认情况下,在 Ubuntu 上,etckeeper 使用Bazaar。如果您更喜欢 Darcs、Git 或 Mercury,请
/etc/etckeeper/etckeeper.conf
在运行前更改设置。etckeeper init
使用 Bazaar,恢复
/etc/foo.conf
到上次提交的版本:如果您想回到更远的时间,请使用
sudo bzr log foo.conf
查看文件的历史记录,sudo bzr revert -r 42 foo.conf
如果您确定这revno: 42
是您想要恢复到的修订版。你可以从packages.ubuntu.com手动下载包,解压文件并用它替换你的版本。
或者你可以:
第二个感觉更野蛮。如果它使用多个文件,它也可能会清除其他配置。第一个是更多的点击和努力,但它似乎更安全。
对于第二个,您也许可以只删除该文件,而 --reinstall 可能会替换它。如果是这样,那就更安全了。
根据包的不同,您可能会在
/usr/share/doc/foo/examples
.使用 Synaptic(Ubuntu 调整更方便,但 synaptic 更直接)并选择“完全删除包”。这将删除所有配置文件(您可能需要备份这些文件!)。
然后重新安装。你完成了。
使用 Ubuntu Tweak,您可以获得更多用于清理、重新滚动和配置备份的选项。也许你想看看。它在软件中心。
ps:Synaptic 还使用“purge”选项(如 Oli 上面提到的......) - 只是带有 GUI 以便更舒适地处理。
我终于找到了多年前依稀记得的答案:
“confnew” 参数强制 dpkg 将修改后的配置文件替换为软件包提供的配置文件,“confmiss”同样适用于已删除的配置文件。
根据此聊天日志,您还可以通过 apt-get 以下列方式使用这些选项:
这使您无需自己查找 deb 文件。
显然,这些选项很危险,如果误用,可能会毁掉重要的系统配置文件。