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.
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.
Achtung! Hier werden die SQL Datenbanken auch gleich gesichert. Aus diesem Grund muss beim Backup der mysql-Dienst laufen.
cfgbackup.sh
#!/bin/bash
################### CHANGE HERE#####################
OWN="user"
MAINDIR="backup"
SN="bkpfile"
MYSQL_USR="root"
###################################################
TGZNAME="$SN-$(date '+%Y-%m-%d').config"
TARGET="/home/$OWN/$MAINDIR/$TGZNAME"
DIRFILE="cfgbackup.conf"
MYSQL_CMD=/usr/bin/mysql
MYSQL_DMP=/usr/bin/mysqldump
MYSQL_CHECK=/usr/bin/mysqlcheck
echo Please enter MySQL root password
read MYSQL_PWD
mkdir -p $TARGET
while read fnp; do
if [[ $fnp == *"#"* ]]; then
:
elif [[ $fnp == *"-R "* ]]; then
mkdir -p "$TARGET${fnp:3}" && cp -Rfp "${fnp:3}" "$TARGET$(dirname "${fnp:3}")"
elif [[ $fnp == *"*"* ]]; then
mkdir -p "$TARGET${fnp::-1}" && cp -fp "${fnp::-1}"/* "$TARGET${fnp::-1}" 2>/dev/null
else
mkdir -p "$TARGET${fnp%/*}" && cp -fp "$fnp" "$TARGET${fnp%/*}"
fi
done<"$DIRFILE"
crontab -l > $TARGET/crontab.root
echo
echo "Checking all databases - this can take a while ..."
$MYSQL_CHECK -u $MYSQL_USR --password=$MYSQL_PWD --auto-repair --all-databases
echo "Starting mySQL Backup"
mkdir -p "$TARGET/MySQL"
databases=`$MYSQL_CMD --user=$MYSQL_USR -p$MYSQL_PWD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`
for db in $databases; do
echo "Dumping $db ..."
$MYSQL_DMP --force --opt --user=$MYSQL_USR -p$MYSQL_PWD --databases "$db" | gzip > "$TARGET/MySQL/$db.gz"
done
cd "/home/$OWN/$MAINDIR"
tar -zcvf "$TGZNAME.tar.gz" $TGZNAME/
chown $OWN:$OWN "$TARGET.tar.gz"
chmod 600 "$TARGET.tar.gz"
rm -rf $TARGET
Heraus kommt ein Archiv, welches beispielsweise den Dateinamen bkpfile-20250913.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.
