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.