Einführung
Paketieren und Komprimieren lösen verwandte, aber unterschiedliche Probleme. Ein Archiv fasst einen Verzeichnisbaum zu einem Datenstrom zusammen und bewahrt dabei Namen und Struktur. Komprimierung stellt Daten platzsparender dar. Eine .tar-Datei ist ein Archiv; eine .gz-Datei enthält gzip-komprimierte Daten; eine .tar.gz-Datei ist ein mit gzip komprimiertes tar-Archiv.
Sie erstellen ein kleines Projekt, legen jedes Format an, untersuchen ein Archiv vor dem Entpacken, stellen es in einem separaten Verzeichnis wieder her und vergleichen die wiederhergestellten Daten mit der Quelle. Dieser Ablauf aus Untersuchen, Entpacken und Überprüfen verhindert, dass Originaldateien unbedacht überschrieben werden.
Einen zu erhaltenden Verzeichnisbaum erstellen
In diesem Schritt erstellen Sie einen kleinen Quellbaum und halten fest, welche Inhalte das Paketieren und Entpacken überstehen müssen.
Erstellen Sie die Verzeichnisse für Konfiguration, Notizen und Daten:
cd /home/labex/project/archive-lab
mkdir -p source/{config,notes,data}
Schreiben Sie drei Dateien mit unterschiedlichen Inhalten:
printf 'mode=training\nport=8080\n' > source/config/app.conf
printf 'Archive the complete project tree.\n' > source/notes/README.txt
printf 'alpha,beta,gamma\n1,2,3\n' > source/data/sample.csv
Verwenden Sie find, um die regulären Dateien relativ zum Quellverzeichnis anzuzeigen:
find source -type f -printf '%P\n' | sort
Ein tar-Archiv erstellen und untersuchen
In diesem Schritt paketieren Sie den Quellbaum ohne Komprimierung und untersuchen die Namen der enthaltenen Dateien.
Die wichtigsten Operationsbuchstaben von tar sind c zum Erstellen, t zum Auflisten, x zum Entpacken und f für den Archivdateinamen. Mit -C wechseln Sie vor dem Hinzufügen von source in das Arbeitsverzeichnis von tar. Dadurch wird kein langer absoluter Pfad im Archiv gespeichert:
cd /home/labex/project/archive-lab
tar -cf project.tar -C /home/labex/project/archive-lab source
Der Quellbaum ist weiterhin vorhanden, weil das Erstellen eines Archivs die Dateien liest und nicht verschiebt. Untersuchen Sie sowohl das Archiv als auch eine Originaldatei:
ls -lh project.tar
ls -l source/config/app.conf
Listen Sie die enthaltenen Dateien auf, bevor Sie das Archiv entpacken:
tar -tf project.tar > tar-members.txt
cat tar-members.txt
Jeder Eintrag sollte mit source/ beginnen. Außerdem darf kein führender / vorhanden sein. Relative Namen der Archiveinträge machen die Wiederherstellung sicherer und portabler.
Das Ergebnis sicher entpacken und vergleichen
In diesem Schritt entpacken Sie das Archiv in ein leeres Zielverzeichnis, statt den Quellbaum zu verwenden. Anschließend vergleichen Sie beide Verzeichnisbäume.
Erstellen Sie ein Verzeichnis für die Wiederherstellung und verwenden Sie -C als Ziel für das Entpacken:
cd /home/labex/project/archive-lab
mkdir tar-restore
tar -xf project.tar -C tar-restore
Untersuchen Sie die wiederhergestellten Pfade:
find tar-restore -type f -printf '%P\n' | sort
Vergleichen Sie die Verzeichnisbäume rekursiv. diff -r gibt nichts aus und wird erfolgreich beendet, wenn beide Bäume übereinstimmen:
diff -r source tar-restore/source
echo "tar restore matches source" > tar-restore-ok.txt
cat tar-restore-ok.txt
Eine Datei mit Gzip komprimieren und dekomprimieren
In diesem Schritt sehen Sie, wie sich gzip von einem Archiv unterscheidet: gzip arbeitet mit einer einzelnen regulären Datei.
Kopieren Sie eine Datei, damit der Quellbaum unverändert bleibt, und komprimieren Sie anschließend die Kopie:
cd /home/labex/project/archive-lab
cp source/data/sample.csv sample-copy.csv
gzip sample-copy.csv
Standardmäßig ersetzt gzip die Eingabedatei durch sample-copy.csv.gz:
ls -lh sample-copy.csv.gz
file sample-copy.csv.gz
Dekomprimieren Sie die Datei und vergleichen Sie ihren Inhalt mit dem Original:
gunzip sample-copy.csv.gz
cmp source/data/sample.csv sample-copy.csv
echo "gzip round trip matches" > gzip-round-trip-ok.txt
cat gzip-round-trip-ok.txt
Gzip paketiert einen Verzeichnisbaum nicht selbst. Diese Struktur stellt tar bereit.
Ein komprimiertes tar-Archiv erstellen und wiederherstellen
In diesem Schritt kombinieren Sie das Paketieren mit tar und die Komprimierung mit gzip. Die Option z weist tar an, die Archivdaten durch gzip zu leiten.
Erstellen Sie project.tar.gz und untersuchen Sie das Archiv mit den passenden Optionen -tzf:
cd /home/labex/project/archive-lab
tar -czf project.tar.gz -C /home/labex/project/archive-lab source
tar -tzf project.tar.gz > targz-members.txt
cat targz-members.txt
Entpacken Sie das Archiv in ein separates Zielverzeichnis und überprüfen Sie den Verzeichnisbaum:
mkdir targz-restore
tar -xzf project.tar.gz -C targz-restore
diff -r source targz-restore/source
echo "tar.gz restore matches source" > targz-restore-ok.txt
cat targz-restore-ok.txt
Dateiendungen geben Menschen und Programmen Aufschluss über das Format: .tar.gz weist eindeutig auf ein gzip-komprimiertes tar-Archiv hin.
Das Projekt als Zip-Archiv austauschen
In diesem Schritt erstellen und untersuchen Sie ein Zip-Archiv, ein unter Linux, macOS und Windows verbreitetes Format.
zip -r fügt einen Verzeichnisbaum rekursiv hinzu. Führen Sie den Befehl im Stammverzeichnis des Labs aus, damit die gespeicherten Pfade mit source/ beginnen:
cd /home/labex/project/archive-lab
zip -r project.zip source
Listen Sie die enthaltenen Dateien auf, ohne das Archiv zu entpacken:
unzip -l project.zip
Verwenden Sie -d, um ein separates Zielverzeichnis auszuwählen, und vergleichen Sie anschließend das Ergebnis:
unzip -q project.zip -d zip-restore
diff -r source zip-restore/source
echo "zip restore matches source" > zip-restore-ok.txt
cat zip-restore-ok.txt
Zusammenfassung
Sie haben Paketieren und Komprimieren voneinander getrennt, tar-Archive erstellt und aufgelistet, einen Gzip-Dekomprimierungs- und Komprimierungsdurchlauf abgeschlossen, beide Vorgänge in .tar.gz kombiniert und denselben Verzeichnisbaum über Zip ausgetauscht. Besonders wichtig ist, dass Sie die Archive in separaten Verzeichnissen wiederhergestellt und die Inhalte verglichen haben, statt lediglich davon auszugehen, dass das Erstellen des Archivs ausreicht.



