24.7 Archivierung und Backup
24.7.1 bzip2/bunzip2 – (De-)Komprimieren von Dateien
Das Kommando bzip2 ist dem Kommando gzip nicht unähnlich, erreicht aber einen besseren Komprimierungsgrad als gzip. bzip arbeitet mit der Huffmann-Codierung und dem Burrows-Wheeler-Block-Sorting-Algorithmus, der den Text zwar nicht komprimiert, aber leichter komprimierbar macht. Die Kompression mit bzip2 ist zwar erheblich besser, aber dafür auch erheblich langsamer. Alle Dateien, die mit bzip2 komprimiert werden, erhalten automatisch die Dateiendung .bz2. TAR-Dateien, die mit bzip2 komprimiert werden, erhalten üblicherweise die Endung .tbz. Die »2« bei bzip2 und bunzip2 geht auf den Vorgänger bzip zurück, der allerdings aus patentrechtlichen Gründen nicht mehr weiterentwickelt wurde. Komprimieren können Sie Dateien mit bzip2 folgendermaßen:
bzip2 file.txt
Sie entpacken die komprimierte Datei wieder mit der Option -d und bzip2 oder mit bunzip2:
bzip2 -d file.txt.bz2
oder:
bunzip2 file.txt.bz2
Sie können gern bzip2 mit der Option -d bevorzugen, weil bunzip2 nichts anderes ist als ein Link auf bzip2, wobei allerdings automatisch die Option -d verwendet wird. Interessant ist in diesem Zusammenhang auch das Kommando bzcat, mit dem Sie bzip2-komprimierte Dateien lesen können, ohne diese vorher zu dekomprimieren.
bzcat file.txt.bz2
24.7.2 cpio, afio – Dateien archivieren
cpio
cpio (copy in and out) eignet sich hervorragend, um ganze Verzeichnisbäume zu archivieren. Etwas ungewöhnlich auf den ersten Blick ist, dass cpio die zu archivierenden Dateien nicht von der Kommandozeile, sondern von der Standardeingabe liest. Häufig wird daher cpio in Verbindung mit den Kommandos ls oder find und einer Pipe verwendet. Damit ist es möglich, ein spezielles Archiv zu erzeugen, das Eigentümer, Zugriffsrechte, Erzeugungszeit, Dateigröße usw. berücksichtigt. Gewöhnlich wird cpio auf drei verschiedene Arten aufgerufen.
- copy out
Diese Art wird mit der Option -o bzw. ---create verwendet. So werden die Pfadnamen der zu kopierenden Dateien von der Standardeingabe eingelesen und auf die Standardausgabe kopiert. Es können zum Beispiel der Eigentümer, die Zugriffsrechte und die Dateigröße ausgegeben werden. Gewöhnlich verwendet man copy out mit einer Pipe und einer Umlenkung:cd meinbuch
ls
Kap001.txt Kap002.txt
...
ls *.txt | cpio -o > meinbuch.cpio
1243 blocksIn diesem Beispiel wurden alle Textdateien im Verzeichnis meinbuch zu einem cpio-Archiv (meinbuch.cpio) gepackt. Allerdings konnten hier nur bestimmte Dateien erfasst werden. Wollen Sie ganze Verzeichnisbäume archivieren, so verwenden Sie das Kommando find:
find $HOME/meinbuch -print | cpio -o > meinbuch.cpio
Natürlich können Sie mit find-üblichen Anweisungen nur bestimmte Dateien archivieren. Ebenso lassen sich Dateien auch auf ein anderes Laufwerk archivieren:
ls -a | cpio -o > /dev/fd0
Hier wurden beispielsweise alle Dateien des aktuellen Verzeichnisses auf die Diskette kopiert. Dabei können Sie genauso gut einen Streamer, eine andere Festplatte oder sogar einen anderen Rechner verwenden.
- copy in
Wollen Sie das mit cpio -o erzeugte Archiv wieder entpacken oder zurückspielen, so wird cpio mit dem Schalter -i bzw. ---extract verwendet. Damit liest cpio die archivierten Dateien von der Standardeingabe ein. Es ist sogar möglich, hierbei reguläre Ausdrücke zu verwenden. Mit folgender Befehlsausführung entpacken Sie das Archiv wieder:cpio -i < meinbuch.cpio
Um nur bestimmte Dateien zu entpacken, nutzen Sie folgenden Befehl:
cpio -i "*.txt" < meinbuch.cpio
Hier entpacken Sie nur Textdateien mit der Endung .txt. Natürlich funktioniert das Ganze auch mit den verschiedensten Speichermedien:
cpio -i "*.txt" < /dev/fd0
Hier werden alle Textdateien von einer Diskette entpackt. Allerdings werden die Dateien immer in das aktuelle Arbeitsverzeichnis zurückgespielt, so dass Sie den Zielort schon zuvor angeben müssen, zum Beispiel:
cd $HOME/meinbuch/testdir ; \
> cpio -i < /archive/meinbuch.cpioHier wechseln Sie zunächst in ein entsprechendes Verzeichnis, in dem Sie anschließend das Archiv entpacken wollen. Wollen Sie außerdem erst wissen, was Sie entpacken, also was für Dateien sich in einem cpio-Archiv befinden, so verwenden Sie cpio nur mit der Option -t:
cpio -t < meinbuch.cpio
... - copy pass
Mit copy pass werden die Dateien von der Standardeingabe gelesen und in ein entsprechendes Verzeichnis kopiert, ohne dass ein Archiv erzeugt wird. Hierzu wird die Option -p eingesetzt. Voraussetzung ist natürlich, dass ein entsprechendes Verzeichnis existiert. Anderenfalls können Sie zusätzlich die Option -d verwenden, die ein solches Verzeichnis erzeugt.ls *.txt | cpio -pd /archive/testdir2
Hiermit werden aus dem aktuellen Verzeichnis alle Textdateien in das Verzeichnis testdir2 kopiert:
cp *.txt /archive/testdir2
Einen ganzen Verzeichnisbaum des aktuellen Arbeitsverzeichnisses könnten Sie somit mit folgendem Aufruf kopieren:
find . -print | cpio -pd /archiv/testdir3
afio
afio bietet im Gegensatz zu cpio die Möglichkeit, die einzelnen Dateien zu komprimieren. Somit stellt afio eine
interessante tar-Alternative dar (für alle, die tar mit seinen typischen Optionsparametern nicht mögen). afio komprimiert die einzelnen Dateien, noch bevor sie in einem Archiv zusammengefasst werden. Unter Ubuntu muss afio allerdings zunächst mit dem gleichnamigen Paket nachinstalliert werden. Hier sehen Sie ein einfaches Beispiel zur Anwendung von afio:
ls *.txt | afio -o -Z meinbuch.afio
Sie komprimieren zunächst alle Textdateien im aktuellen Verzeichnis und fassen dieses Verzeichnis dann in dem Archiv meinbuch.afio zusammen. Die Platzeinsparung im Vergleich zu cpio ist beachtlich:
ls -l Shellbook*
-rw------- 1 tot users 209920 meinbuch.afio
-rw------- 1 tot users 640512 meinbuch.cpio
Entpacken können Sie das Archiv wieder – wie bei cpio – mit dem Schalter -i:
afio -i -Z Shellbook.afio
24.7.3 ccrypt – Dateien verschlüsseln
Mit dem Kommando ccrypt wird ein zu ver-/entschlüsselnder Text von der Standardeingabe gelesen, um diesen wieder ver-/entschlüsselt auf die Standardausgabe auszugeben. ccrypt wird unter Ubuntu mit Hilfe des gleichnamigen Pakets installiert. Ein Anwendungsbeispiel:
ccrypt file.txt
Enter encryption key:
Enter encryption key: (repeat)
Wie Sie oben sehen, ist die Eingabe eines Schlüssels erforderlich, der zusätzlich zu bestätigen ist. Es wird eine Binärdatei file.txt.cpt erzeugt. Diese lässt sich mit der Option -d dechiffrieren:
ccrypt -d file.txt.cpt
Enter encryption key:
Beachten Sie bitte die Gesetzeslage zur Verschlüsselung in Ihrem Heimatland. Kryptografie ist inzwischen in einigen Ländern verboten.% So darf man in Frankreich zum Beispiel kein PGP einsetzen.
24.7.4 gzip/gunzip – (De-)Komprimieren von Dateien
Das Kommando gzip komprimiert Dateien und fügt ihnen die Dateiendung .gz an. Die Originaldatei wird hierbei durch die komprimierte Datei ersetzt. gzip basiert auf dem Deflate-Algorithmus, der eine Kombination aus LZ77 und Huffman-Codierung ist. Der Zeitstempel einer Datei sowie die Zugriffsrechte bleiben beim Komprimieren und auch beim Entpacken mit gunzip erhalten. Sofern Sie Softwareentwickler in C sind und Datenkompression verwenden wollen, sollten Sie sich die Bibliothek zlib ansehen. Diese Bibliothek unterstützt das gzip-Dateiformat. Sie komprimieren eine oder mehrere Datei(en) ganz einfach mit:
gzip file1.txt
Zur Dekomprimierung verwenden Sie entweder gzip und die Option -d:
gzip -d file1.txt.gz
oder gunzip file1.txt.gz. gunzip ist hier kein symbolischer Link, sondern ein echtes Kommando. gunzip kann neben gzip-Dateien auch Dateien dekomprimieren, die mit zip, compress oder pack komprimiert wurden. Wollen Sie, dass beim (De-)Komprimieren nicht die Originaldatei berührt wird, so müssen Sie die Option -c verwenden:
gzip -c file1.txt > file1.txt.gz
Diese Option können Sie ebenso mit gunzip anwenden:
gunzip -c file1.txt.gz > file1_neu.txt
Auf diese Weise lassen Sie die gzip-komprimierte Datei file1.txt.gz unberührt und erzeugen eine neue dekomprimierte Datei file1_neu.txt. Denselben Vorgang können Sie auch mit zcat erledigen: zcat file1.txt.gz > file1_neu.txt
24.7.5 mt – Streamer steuern
Mit mt können Magnetbänder vor- oder zurückgespult, positioniert und gelöscht werden. mt wird häufig in Shell-Skripten in Verbindung mit tar, cpio oder afio verwendet, weil jedes der Kommandos zwar auf Magnetbänder schreiben, diese aber nicht steuern kann. In der Praxis wird mt wie folgt verwendet: mt -f Tape Befehl [Nummer].
Mit Tape geben Sie den Pfad zu Ihrem Bandlaufwerk an, und mit Nummer legen Sie fest, wie oft der Befehl ausgeführt werden soll. In der folgenden Tabelle finden Sie die gängigsten Befehle.
Befehl | Bedeutung |
eom | Band bis zum Ende der letzten Datei spulen. Ab hier kann mit tar, cpio und afio ein Backup aufgespielt werden. |
fsf Anzahl | Band um eine Anzahl Archive (Dateiendemarken) vorspulen. Nicht gleichzusetzen mit der letzten Datei (eom). |
nbsf Anzahl | Band um Anzahl Archive (Dateiendemarken) zurückspulen |
rewind | das Band an den Anfang zurückspulen |
status | Statusinformationen vom Magnetlaufwerk ermitteln und ausgeben (zum Beispiel: Ist ein Band eingelegt oder nicht?) |
erase | Band löschen und initialisieren |
retension | Band einmal ans Ende spulen und wieder zum Anfang zurück, um es neu zu »spannen« |
offline | Band zum Anfang zurückspulen und auswerfen |
24.7.6 tar – Dateien und Verzeichnisse archivieren
Das Kommando tar (tape archiver) wurde ursprünglich zur Verwaltung von Bandarchiven verwendet. Mittlerweile wird tar aber auch auf Disketten oder für normale Dateien oder Verzeichnisse angewendet. Das Kommando wird zur Erstellung und zum Zurückladen von Sicherungen oder Archiven genutzt. Die Syntax lautet:
tar Funktion [Optionen] [Datei(en)]
Sehr umfangreich
Mit Funktion geben Sie an, wie die Erstellung oder das Zurückladen von Archiven erfolgen soll. Mit Datei(en) bestimmen Sie, welche Dateien oder Dateibäume herausgeschrieben oder wieder eingelesen werden sollen. Geben Sie hierbei ein Verzeichnis an, so wird der gesamte darin enthaltene Dateibaum verwendet.
Gewöhnlich werden Archive mittels tar nicht komprimiert, aber auch hier können Sie mit tar die Ein- und Ausgabe durch einen Kompressor leiten. Neuere Versionen unterstützen sowohl compress als auch gzip und bzip2, das inzwischen einen recht hohen Stellenwert hat. Das gilt auch nicht nur für GNU-tar.
Das Kommando tar (vor allem GNU-tar) hat besonders viele Funktionen und Optionen. Da tar eigentlich zu einem sehr beliebten Archivierungswerkzeug gehört, sollen im Folgenden mehrere Optionen und Funktionen erwähnt werden.
In der folgenden Tabelle sind die Optionen aufgelistet, mit denen Sie die Funktion von tar festlegen. (Sie dürfen bei den Ein-Zeichen-Funktionen auch das führende - weglassen.)
Option | Bedeutung |
-A | Hängt ein komplettes Archiv an ein zweites vorhandenes Archiv an (oder fügt es auf dem Band hinten an). |
-c | Erzeugt ein neues Archiv. |
-d | Vergleicht die im Archiv abgelegten Dateien mit den angegebenen Dateien. |
---delete Datei(en) | Löscht die angegebenen »Datei(en)« aus dem Archiv (nicht für Magnetbänder). |
-r | Erwähnte Dateien werden an das Ende eines bereits existierenden Archivs angehängt (nicht für Magnetbänder). |
-t | Zeigt den Inhalt eines Archivs an. |
-u | Genannte Dateien werden nur dann ins Archiv aufgenommen, wenn sie neuer als die bereits archivierten Versionen oder noch gar nicht im Archiv vorhanden sind (nicht für Magnetbänder). |
-x | Bestimmte Dateien sollen aus einem Archiv gelesen werden; werden keine Dateien erwähnt, werden alle Dateien aus dem Archiv extrahiert. |
Darüber hinaus gibt es einige Zusatzoptionen. Die gängigsten sind:
Option | Bedeutung |
-f Datei | Benutzt Datei oder das damit verbundene Gerät als Archiv; die Datei darf auch Teil von einem anderen Rechner sein. |
-l | Geht beim Archivieren nicht über die Dateisystemgrenze hinaus. |
-v | tar gibt gewöhnlich keine speziellen Meldungen aus; mit dieser Option wird jede Aktion von tar gemeldet. |
-w | Schaltet tar in einen interaktiven Modus, in dem zu jeder Aktion eine Bestätigung erfolgen muss. |
-y | Komprimiert oder dekomprimiert die Dateien bei einer tar-Operation mit bzip2. |
-z | Komprimiert oder dekomprimiert die Dateien bei einer tar-Operation mit gzip oder gunzip. |
-Z | Komprimiert oder dekomprimiert die Dateien bei einer tar-Operation mit compress bzw. uncompress. |
Neben diesen zusätzlichen Optionen bietet tar noch mehr an. Weitere Informationen entnehmen Sie der man-Seite zu tar. Allerdings dürften Sie mit den genannten Optionen bereits sehr weit kommen. Am häufigsten wird tar wohl in folgender Grundform verwendet:
tar cf Archiv_Name Verzeichnis
Damit wird aus dem Verzeichniszweig Verzeichnis ein Archiv mit dem Namen Archiv_Name erstellt. In der Praxis sieht dies folgendermaßen aus: tar cf home_jan06 $HOME. Aus dem kompletten Heimatverzeichnis des Benutzers wird das Archiv home_jan06 erstellt. Damit Sie beim Zurückspielen der Daten flexibler sind, sollten Sie einen relativen Verzeichnispfad angeben:
cd Verzeichnis ; tar cf Archiv_Name .
Hierfür steht Ihnen für das relative Verzeichnis auch die Option -C Verzeichnis zur Verfügung:
tar cf Archiv_Name -C Verzeichnis .
Wollen Sie die Dateien und Verzeichnisse des Archivs wiederherstellen, so lautet der gängige Befehl hierzu wie folgt:
tar xf Archiv_Name
Kommen wir auf unser Beispiel zurück:
tar xf home_jan06
Wollen Sie einzelne Dateien aus einem Archiv wiederherstellen, so ist auch dies kein allzu großer Aufwand:
tar xf home_jan06 datei1 datei2 ...
Beachten Sie allerdings, wie Sie die Datei ins Archiv gesichert haben (relativer oder absoluter Pfad). Wollen Sie die Datei meinbuch.cpio mit dem relativen Pfad wiederherstellen, so können Sie dies wie folgt tun:
tar xf meinbuch_jan06 ./meinbuch.cpio
Wenn etwas mit tar nicht klappt, so ist der Fehler häufig eine falsche Pfadangabe. Sie sollten daher immer überlegen: Wo liegt das Archiv, wo soll rückgesichert werden, und wie wurden die Dateien ins Archiv aufgenommen (absoluter oder relativer Pfad)? Wollen Sie außerdem mitverfolgen, was beim Erstellen oder Auspacken eines Archivs alles passiert, sollten Sie die Option v verwenden. Hierbei können Sie außerdem gleich erkennen, ob Sie die Dateien mit dem absoluten oder dem relativen Pfad gesichert haben.
# neues Archiv erzeugen, mit Ausgabe aller Aktionen
tar cvf Archiv_Name Verzeichnis
# Archiv zurückspielen, mit Ausgabe aller Aktionen
tar xvf Archiv_Name
Den Inhalt eines Archivs können Sie mit der Option t ansehen:
tar tf home_jun08
./
./Ubuntubuch
./Ubuntubuch/kapitel_1.tex
...
Hier wurde also der relative Pfadname verwendet. Wollen Sie ein ganzes Verzeichnis auf Diskette sichern, so erledigen Sie dies folgendermaßen:
tar cf /dev/fd0 Ubuntubuch
Zurückspielen können Sie das Ganze wieder wie folgt:
tar xvf /dev/fd0 Ubuntubuch
Wollen Sie einen kompletten Verzeichnisbaum mit Kompression archivieren zum Beispiel mit gzip), gehen Sie folgendermaßen vor:
tar czvf Ubuntubuch_jun08.tgz Ubuntubuch
Dank der Option z wird jetzt das ganze Archiv auch noch komprimiert. Ansehen können Sie sich das komprimierte Archiv mit der Option t:
tar tzf Ubuntubuch_jun08.tgz Ubuntubuch
Ubuntuch/
Ubuntubuch/kapitel_1.tex
...
Hier wurde also der absolute Pfadname verwendet. Entpacken und wieder einspielen können Sie das komprimierte Archiv anschließend erneut mit:
tar xzvf Ubuntubuch_jun08.tgz Ubuntubuch
Mit zip können Sie einzelne Dateien bis hin zu ganzen Verzeichnissen komprimieren und archivieren. Besonders gern werden
zip und unzip allerdings verwendet, weil diese mit den Versionen von Windows und DOS voll kompatibel sind. Wer sich also immer schon darüber geärgert hat, dass sein E-Mail-Anhang wieder einmal etwas im ZIP-Format enthält, der kann hier auf unzip zurückgreifen.
Ein ZIP-Archiv aus mehreren Dateien erstellen Sie wie folgt:
zip files.zip file1.txt file2.txt file3.txt
adding: file1.txt (deflated 56%)
adding: file2.txt (deflated 46%)
adding: file3.txt (deflated 24%)
Hier packen und komprimieren Sie die Dateien zu einem Archiv namens files.zip. Wollen Sie eine neue Datei zum Archiv hinzufügen? Nichts einfacher als das: zip files.zip hallo.c. Möchten Sie alle Dateien des Archivs in das aktuelle Arbeitsverzeichnis entpacken, so gehen Sie wie folgt vor:
unzip files.zip
Archive: files.zip
inflating: file1.txt
inflating: file2.txt
...
Wenn Sie eine ganze Verzeichnishierarchie packen und komprimieren wollen, so müssen Sie die Option -r (rekursive) verwenden: zip -r Ubuntubuch.zip $HOME/Ubuntubuch. Entpacken können Sie das Archiv wieder wie gewohnt mittels unzip.
24.7.7 Übersicht zu den Packprogrammen
Die folgende Tabelle gibt eine kurze Übersicht über die Dateiendungen und die zugehörigen (De-)Komprimierungsprogramme.
Endung | gepackt mit | entpackt mit |
*.bz und *.bz2 | bzip2 | bzip2 |
*.gz | gzip | gzip, gunzip oder zcat |
*.zip | Info-Zip, PKZip, zip | Info-Unzip, PKUnzip, unzip, gunzip (eine Datei) |
*.tar | tar | tar |
*.tbz | tar und bzip2 | tar und bzip2 |
*.tgz; *.tar.gz | tar und gzip | tar und g(un)zip |
*.Z | compress | uncompress, gunzip |
*.tar.Z | tar und compress | tar und uncompress |
*.pak | pack | unpack, gunzip |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.