如何在 Linux 中对 /etc 目录进行版本控制
在 Linux 中,/etc
目录包含重要的系统相关或特定于应用程序的配置文件。特别是在服务器环境中,明智的做法是定期备份位于 /etc
中的各种服务器配置文件,以避免目录中意外更改带来的麻烦,或帮助重新安装必要的软件包。通常建议使用 ACL 工具保护 /etc
的内容,以防止未经授权的更改。更好的是,最好对 /etc
目录中的所有内容进行版本控制,以便您可以跟踪配置更改,或者在需要时从以前的配置状态恢复。
etckeeper
是用于版本控制内容的工具集合,特别是在 /etc
目录中。 etckeeper
使用现有的版本控制系统(例如,git
、bzr
、mercurial
或 darcs
)将版本历史记录存储在相应的后端存储库中。 etckeeper
的优点是它与软件包管理器(例如 apt
、yum
)集成,可以在软件包安装、升级或删除过程中自动提交对 /etc
目录所做的任何更改。
在本教程中,我将描述如何使用etckeeper
对/etc
目录进行版本控制。在这里,我将配置 etckeeper
以使用 bzr
作为后端版本控制存储库。
在 Linux 上安装 etckeeper
要在 Ubuntu、Debian 或 Mint 上安装 etckeeper
和 bzr
:
$ sudo apt-get install etckeeper bzr
要在 CentOS 或 RHEL 上安装 etckeeper
和 bzr
,首先设置 EPEL 存储库,然后运行:
$ sudo yum install etckeeper etckeeper-bzr
要在 Fedora 上安装 etckeeper
和 bzr
,只需运行:
$ sudo yum install etckeeper etckeeper-bzr
设置并初始化 etckeeper
安装etckeeper后要做的第一件事是编辑其配置文件。您可以将其他选项保留为默认值。
$ sudo vi /etc/etckeeper/etckeeper.conf
# The VCS to use.
VCS="bzr"
# Avoid etckeeper committing existing changes to /etc automatically once per day.
AVOID_DAILY_AUTOCOMMITS=1
现在继续初始化 etckeeper
,如下所示。
$ sudo etckeeper init
此时,/etc
目录中的所有内容都已添加到后端 bzr
存储库中。但请注意,添加的内容尚未提交。您需要手动提交操作,或者使用标准包管理器(例如 apt 或 yum)安装/升级任何包,这将自动触发第一次提交。在这里,我将手动执行第一次提交,如下所示。
$ sudo etckeeper commit "initial commit"
etckeeper 示例
要检查 /etc
目录的状态,请运行以下命令。这将显示自最新版本以来对 /etc
目录所做的任何(未提交)更改。
$ sudo etckeeper vcs status
要显示 /etc
的最新版本和当前状态之间的差异:
$ sudo etckeeper vcs diff /etc
提交 /etc
目录的当前(已更改)状态:
$ sudo etckeeper commit "any comment"
要检查整个 /etc
目录或特定文件/子目录的提交历史记录:
$ sudo etckeeper vcs log
$ sudo etckeeper vcs log /etc/sysconfig/*
要检查两个特定修订版(修订版号 1
和 3
)之间的差异:
$ sudo etckeeper vcs diff -r1..3
要查看特定修订版(例如修订版号 3
)所做的更改:
$ sudo etckeeper vcs diff -c3
要将 /etc
目录的内容恢复到特定修订版(例如,修订版号 2
):
$ sudo etckeeper vcs revert --revision 2 /etc
由 etckeeper
自动提交
如前所述,作为软件包安装或升级的一部分,etckeeper
自动提交对 /etc
所做的更改。在此示例中,我尝试安装 Apache HTTP Server 作为测试。
$ sudo yum install httpd
要查看包安装自动生成的提交历史记录:
$ sudo etckeeper vcs log
------------------------------------------------------------
revno: 5
committer: dan
branch nick: fedora /etc repository
timestamp: Mon 2013-08-05 06:39:33 -0400
message:
committing changes in /etc after yum run
Package changes:
+0:apr-1.4.6-3.fc18.x86_64
+0:apr-util-1.4.1-6.fc18.x86_64
+0:httpd-2.4.4-3.fc18.x86_64
+0:httpd-tools-2.4.4-3.fc18.x86_64
------------------------------------------------------------
要查看软件包安装在 /etc
目录中所做的更改:
$ sudo etckeeper vcs diff -c5