Ein einfaches Linux Shellscript, welches sich bewährt hat, um beliebige Konfigurationen, entweder als Verzeichnis oder als einzelne Dateien, wegzuspeichern.
Zuerst das Konfigurieren
Im Prinzip weist die Konfiguration Zeile für Zeile einen copy-Befehl an, einzelne Dateien (etc/file1), Verzeichnise rekursiv (-R /etc/folder1/), oder mittels Wildcards zu kopieren.
110-cfgbackup.conf
-R /etc/folder1/
/etc/file1
/var/www/html/*
/var/www/html/blog/config/*
Nun zum Linux Shellscript
Da das Script im Rahmen dieses Beispiels in einem Unterverzeichnis von /home/user läuft, muß es an die Gegebenheiten angepasst werden. Mit OWN wird der User definiert, mit MAINDIR das (bereits existierende) Backup-Verzeichnis (also /home/user/backup) und SN definiert den Dateinamen des Archivs.
110-cfgbackup.sh
#!/bin/bash
################# CHANGE HERE###################
OWN="user"
MAINDIR="backup"
SN="bkpfile"
################################################
TGZNAME="$SN-$(date '+%Y-%m-%d').config"
TARGET="/home/$OWN/$MAINDIR/$TGZNAME"
DIRFILE="110-cfgbackup.conf"
mkdir -p $TARGET
while read fnp; do
if [[ $fnp == *"#"* ]]; then
:
elif [[ $fnp == *"-R "* ]]; then
mkdir -p "$TARGET${fnp:3}" &&
cp -Rf "${fnp:3}" "$TARGET$(dirname "${fnp:3}")"
elif [[ $fnp == *"*"* ]]; then
mkdir -p "$TARGET${fnp::-1}" &&
cp -f "${fnp::-1}"/* "$TARGET${fnp::-1}" 2>/dev/null
else
mkdir -p "$TARGET${fnp%/*}" &&
cp -f "$fnp" "$TARGET${fnp%/*}"
fi
done<"$DIRFILE"
crontab -l > $TARGET/crontab.root
cd "/home/$OWN/$MAINDIR"
chown -Rf $OWN:$OWN * && chmod -Rf 700 *
tar -zcvf "$TGZNAME.tar.gz" $TGZNAME/
chown $OWN:$OWN "$TARGET.tar.gz"
chmod 700 "$TARGET.tar.gz"
rm -rf $TARGET
Heraus kommt ein Archiv, welches beispielsweise den Dateinamen bkpfile-20210605.config.tar.gz
trägt, also das Datum bereits im Dateinamen inkludiert. Dieses ist dann im Verzeichnis /home/user/backup abzuholen. Ausgeführt werden muß das Script mit erhöhtem Privilege-Level, also mittels sudo.