在当前 /etc/ 和默认配置之间生成差异

Sar*_*rah 7 configuration

安装和各种自定义配置后,是否可以使用例如。apt 和一些 shell-fu 为 /etc/ 中与标准配置不同的每个文件生成差异?这将提供一种在事后生成配置状态的简短摘要的方法,而不是在此过程中必须依赖手动日志记录,如果人们希望在以后记住更改的内容。

Céd*_*ien 3

你应该看看etckeeper

etckeeper是一个工具集合,可让 /etc 存储在 git、mercurial、darcs 或 bzr 存储库中。它连接到 apt(以及其他包管理器,包括 yum 和 pacman-g2),以在包升级期间自动提交对 /etc 所做的更改。它跟踪修订控制系统通常不支持的文件元数据,但这对 /etc 很重要,例如 /etc/shadow 的权限。它非常模块化和可配置,而且如果您了解使用版本控制的基础知识,那么使用起来也很简单。


Doc*_*ger 0

我正在为同类问题开发解决方案。

基本上,我的目标是一个允许以文件级粒度进行撤消和重做的系统。

从你的问题开始并向后推算......

  • 为了与默认配置进行比较,我们必须首先将所有这些文件的原始文件存储在某个地方。然后我们可以用类似的东西生产你想要的东西......
DIFFDIR= ......
ARCDIR=./.archives                         # see below

function getlastarchive() {
  ... code to return last archived version ...
}

for FILE in /etc/*
do
  ARCFILE="$(getlastarchive $FILE)"
  diff $ARCDIR/$ARCFILE /etc/$FILE  >$DIFFDIR/$FILE.diff
done
Run Code Online (Sandbox Code Playgroud)
  • 为了存储原始文件,我选择采用这样的约定:.archives在任何包含已更改文件的目录中都有一个子目录。它是根据需要由file-archive脚本创建的。
  • 如果您只需要一级撤消,则只需将未更改的文件复制到.archives更改前的目录即可。
  • 对于无限制的撤消,我们需要一个版本控制方案。一个明显的选择是在存档版本的名称后面附加一个日期时间戳。就像是...
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.20121219015459
                            /etc/.archives/resolv.conf.20121219015459
Run Code Online (Sandbox Code Playgroud)
  • 相反,我只使用自动计算的增量版本#,如......
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.00
                            /etc/.archives/resolv.00.conf
Run Code Online (Sandbox Code Playgroud)
  • 版本号位于扩展名之前,因为我也将其用于图像的编辑版本,这些图像需要完整的扩展名(.jpg、.png 等)才能被许多软件正确检测到。如果文件没有扩展名,则版本号仅附加到末尾。执行此操作的代码更复杂,但可以立即运行,因此没有问题。可以为许多其他方案提供案例,但这对我有用。

希望这可以帮助!