Einführung
Stellen Sie sich vor, Sie fotografieren jeden Tag eine wachsende Pflanze. Wenn Sie jedes Foto plant.jpg nennen, überschreibt das neue Foto ständig das alte, und Sie verlieren den bisherigen Verlauf. Um alle Fotos zu behalten, müssen Sie sie beispielsweise plant_2023-01-01.jpg, plant_2023-01-02.jpg und so weiter nennen.
Dasselbe Problem tritt bei Systemsicherungen auf. Wenn Sie immer denselben Dateinamen verwenden, kann jede neue Sicherung die vorherige überschreiben und Ihren Wiederherstellungsverlauf löschen.
In diesem Lab lernen Sie, wie Sie diese Benennung automatisieren. Sicherungen mit Zeitstempel sind in der Praxis sehr verbreitet, weil Sicherungsdateien nur dann nützlich sind, wenn Sie erkennen können, wann sie erstellt wurden, und mehrere Generationen aufbewahren können.
Sie lernen:
- Wie Sie Linux nach dem heutigen Datum in einem bestimmten Format fragen.
- Wie Sie dieses Datum in einer „Box“ (Variablen) speichern.
- Wie Sie dieses Datum verwenden, um eine eindeutige Sicherungsdatei mit Zeitstempel zu erstellen.
Das heutige Datum abrufen
In diesem Schritt lernen Sie, wie Sie den Befehl date verwenden, um das aktuelle Datum zu formatieren. Das ist der erste Bestandteil unseres dynamischen Dateinamens.
Der Standardbefehl date gibt das aktuelle Datum und die Uhrzeit in einem langen, ausführlichen Format aus. Für Dateinamen benötigen wir jedoch normalerweise ein übersichtliches, sortierbares Format wie YYYY-MM-DD. Unter Linux können Sie die Ausgabe anpassen, indem Sie das Symbol + gefolgt von einem Formatcode verwenden. Der Code %F ist eine praktische Abkürzung für das vollständige Datum (Jahr-Monat-Tag).
Dieses Format ist nicht nur übersichtlich, sondern auch praktisch: Alphabetisch sortierte Dateinamen werden bei Verwendung von YYYY-MM-DD gleichzeitig chronologisch sortiert.
Prüfen Sie zunächst, ob Sie sich in Ihrem Projektordner befinden:
cd ~/project
Fragen Sie nun das System nach dem Datum im gewünschten Format:
date +%F
Sie sollten eine Ausgabe wie 2023-10-27 sehen, allerdings mit dem tatsächlichen heutigen Datum.
Um dieses Ergebnis in einem Dateinamen zu verwenden, müssen wir es erfassen. Dazu verwenden wir die Befehlssubstitution. Stellen Sie sich vor, dass Sie einen Befehl in eine Blase $(...) setzen. Die Shell führt zuerst den Befehl in dieser Blase aus, übernimmt das Ergebnis und ersetzt die Blase durch diesen Text.
Die Befehlssubstitution gehört zu den grundlegenden Konzepten der Shell. Sie verbindet die einfache Verwendung der Befehlszeile mit der Automatisierung. Dadurch kann die Ausgabe eines Befehls als Daten für einen anderen Befehl verwendet werden.
Speichern wir dieses Datum in einer Variablen. Eine Variable ist einfach ein benannter Speicherplatz. Wir erstellen einen Speicherplatz mit dem Namen current_date und legen die Ausgabe unseres Befehls darin ab.
current_date=$(date +%F)
Wichtig: Beachten Sie, dass sich um das Gleichheitszeichen = keine Leerzeichen befinden. Das ist eine feste Regel in der Shell. variable = value schlägt fehl, während variable=value funktioniert.
Sehen wir nun in unseren Speicherplatz, um sicherzustellen, dass das Datum darin enthalten ist. Verwenden Sie dazu den Befehl echo mit einem $ vor dem Variablennamen, um den Inhalt der Variablen „zu öffnen“:
echo $current_date
Wenn das heutige Datum ausgegeben wird, haben Sie es erfolgreich erfasst!
Eine Sicherungsdatei erstellen
Nachdem wir das Datum in einer Variablen gespeichert haben, können wir damit eine sinnvoll benannte Sicherungsdatei erstellen.
In Ihrem Verzeichnis befindet sich bereits eine Datei namens project_plan.txt. Prüfen Sie, ob sie vorhanden ist:
ls -l project_plan.txt
Unser Ziel ist es, eine Kopie dieser Datei mit dem Namen project_plan_YYYY-MM-DD.bak zu erstellen. Dadurch erhält die Kopie einen Zeitstempel mit dem heutigen Datum.
Wir verwenden den Standardbefehl cp zum Kopieren. Anstatt das Datum manuell einzugeben, lassen wir die Shell das Datum mithilfe unserer Variablen $current_date einsetzen.
Führen Sie den folgenden Befehl aus:
cp project_plan.txt "project_plan_$current_date.bak"
Die Shell erkennt $current_date innerhalb der doppelten Anführungszeichen und ersetzt es unmittelbar vor dem Ausführen des Kopierbefehls durch das tatsächlich darin gespeicherte Datum, beispielsweise 2023-10-27.
Dies wird als Variablenexpansion bezeichnet. Die Shell expandiert Variablen, bevor sie den Befehl cp tatsächlich startet. Deshalb wirkt der Befehl dynamisch, obwohl cp selbst keine Shell-Variablen versteht.
Profi-Tipp: Sie können den Variablenschritt überspringen und alles in einer einzigen Zeile erledigen. Das ist in Automatisierungsskripten sehr üblich. Setzen Sie die Befehlssubstitution $(...) direkt in den cp-Befehl ein:
cp project_plan.txt "project_plan_$(date +%F).bak"
Damit weisen Sie die Shell an: „Führen Sie den Befehl date aus, setzen Sie das Ergebnis genau hier ein und führen Sie anschließend den Kopierbefehl aus.“ Beide Methoden führen zum exakt gleichen Ergebnis.
Die Sicherung überprüfen
Prüfen wir, ob alles funktioniert hat. Nun sollten zwei Dateien vorhanden sein: das Original und die Kopie mit Zeitstempel.
Listen Sie die Dateien im Verzeichnis auf:
ls -l
Sie sollten ungefähr Folgendes sehen:
-rw-rw-r-- 1 labex labex 65 Oct 27 10:00 project_plan.txt
-rw-rw-r-- 1 labex labex 65 Oct 27 10:05 project_plan_2023-10-27.bak
Beachten Sie, dass die neue Datei das Datum in ihrem Namen enthält.
Stellen Sie abschließend sicher, dass der Inhalt korrekt übernommen wurde. Mit dem Befehl cat können Sie die neue Datei auslesen. Da Sie das vollständige Datum nicht noch einmal eingeben möchten, können Sie erneut die Befehlssubstitution verwenden:
cat project_plan_$(date +%F).bak
Sie sollten den ursprünglichen Text sehen:
Phase 1: Initialization
Phase 2: Development
Phase 3: Deployment
Geschafft! Sie haben eine vollständige Sicherung mit Zeitstempel erstellt. Wenn Sie denselben Befehl morgen ausführen, wird eine neue Datei mit dem morgigen Datum erstellt. So bleibt Ihr Verlauf erhalten und übersichtlich.
Diese einfache Gewohnheit bei der Benennung lässt sich erstaunlich vielseitig einsetzen. Viele Verfahren zur Sicherungsrotation beginnen genau mit dieser Idee: Sie codieren den Zeitpunkt im Dateinamen und können dadurch mehrere Generationen aufbewahren, anstatt die jeweils letzte Kopie zu überschreiben.
Zusammenfassung
Herzlichen Glückwunsch! Sie beherrschen nun eine wichtige Fähigkeit zur Automatisierung.
In diesem Lab haben Sie gelernt:
- Zeit formatieren: Mit
date +%Feine für Computer geeignete Datumszeichenfolge abrufen. - Befehlssubstitution: Mit
$(...)das Ergebnis eines Befehls an einen anderen Befehl übergeben. - Dynamische Benennung: Dateien erstellen, deren Namen auf dem aktuellen Datum basieren.
Dieser scheinbar einfache Trick bildet die Grundlage professioneller Sicherungsstrategien. Ihre Dateien werden nun nicht mehr versehentlich überschrieben!



