Com base nos seus comentários à resposta do @ SahibPrime, você deve usar o etckeeper
Na home page:
etckeeper
is a collection of tools to let/etc
be stored in agit
,mercurial
,bazaar
ordarcs
repository. This lets you use git to review or revert changes that were made to /etc. Or even push the repository elsewhere for backups or cherry-picking configuration changes.It hooks into package managers like
apt
to automatically commit changes made to/etc
during package upgrades. It tracks file metadata that git does not normally support, but that is important for /etc, such as the permissions of /etc/shadow.It's quite modular and configurable, while also being simple to use if you understand the basics of working with version control.
Uma coisa que o SahibPrime não mencionou foi que você pode usar git diff
para visualizar as alterações feitas entre as versões atuais e / ou anteriores, e quando essas alterações foram feitas. Você também pode facilmente reverter para qualquer versão anterior de qualquer arquivo controlado por revisão.
No Debian, pelo menos, ele é executado diariamente a partir do cron, então você nem precisa lembrar de confirmar as alterações. Quase certamente também é executado a partir do cron em outras distribuições.
Instale e esqueça completamente até que você precise. Não requer manutenção.
Você também pode usar git
(ou qualquer outro software similar) para rastrear alterações em / usr / local. Eu costumava usar o RCS por anos em / etc e em diretórios como / usr / local / {s,} bin / e ~ / bin. Mais tarde, mudei para svn
. etckeeper
e git
são melhores.
tldr: gitmeoutofhere
Eu devo ter mudado para o etckeeper em 2012. Eu tenho um histórico de revisão de todas as mudanças (pelo menos diariamente e antes / depois de cada apt
de instalação ou atualização) desde então.
# git log | tail -5
commit 7e3bb0eade7ae9e211bb684be2e3c7d4a3128c24
Author: ...my.email.address.deleted...
Date: Wed Feb 29 12:53:30 2012 +1100
Initial commit
# git log | grep '^commit' | wc -l
1378
Eu quase nunca tenho que olhar ou pensar sobre isso ou até mesmo lembrar que está lá, mas quando eu preciso, é inestimável . Eu posso desfazer qualquer coisa estúpida que eu possa fazer e imediatamente recuperar uma versão válida e em bom funcionamento de qualquer arquivo de configuração.
Veja algumas das coisas que posso fazer com todo esse histórico de revisão dos meus arquivos de configuração:
Eu posso ver uma lista de commits para arquivos específicos:
# git log apache2/apache2.conf | sed -ne 's/commit //p' | head
2d0fabf90f2bc639d30bca925147fafd3fbd5e50
8022c7ca6dbe1661064604a646c52ca0d1f1b3ac
0620c88b8d1fd625f74f42059a4e8f056846df16
8c2fcfef72eca034b251654be44a268e92e39416
02329cf86655a2bb2c09c793b1d195a4de579cf1
5e449105f0ab75f9e903d8c75af5c8db6543c281
d8339212967af2c664b0c1776e9352f6c0e12ff8
7e3bb0eade7ae9e211bb684be2e3c7d4a3128c24
Eu posso ver quando algum desses commits aconteceu:
# git log 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac | head -5
commit 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac
Author: ...
Date: Tue Aug 20 12:26:53 2013 +1000
committing changes in /etc after apt run
e eu posso ver o diff:
# git diff 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac apache2/apache2.conf
diff --git a/apache2/apache2.conf b/apache2/apache2.conf
index baf6d8a..617152c 100644
--- a/apache2/apache2.conf
+++ b/apache2/apache2.conf
@@ -71,7 +71,7 @@
#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
-Mutex file:${APACHE_LOCK_DIR} default
+#Mutex file:${APACHE_LOCK_DIR} default
#
# PidFile: The file in which the server should record its process
E eu posso reverter qualquer coisa e / ou tudo para qualquer versão anterior. O mais útil é a reversão de um arquivo individual:
# git checkout 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac apache2/apache2.conf
# git diff 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac apache2/apache2.conf
#
Eu posso ver uma lista de arquivos que foram alterados desde o último commit:
# git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: apache2/apache2.conf
no changes added to commit (use "git add" and/or "git commit -a")
Se eu quisesse, poderia confirmar isso novamente (com git add
e git commit
) ou mudar de idéia e trazer de volta o commit mais recente:
# git checkout 2d0fabf90f2bc639d30bca925147fafd3fbd5e50 apache2/apache2.conf
# git help status
#