Dateien paketieren und komprimieren

LinuxBeginner
Jetzt üben

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.