tar


"tar" steht für "tape archive", weil mit diesem Befehl früher Sicherungskopien auf Bandlaufwerke geschrieben wurden. Auch Heute schreibt man damit noch auf Bandlaufwerke, aber der Hautpzweck ist es, mehrere Dateien in eine "einzupacken". Angenommen du hast ein grösseres Projekt mit mehreren .html Files, dazu vielleicht ein paar .jpg Bilder und noch andere Files die zu deinem Projekt gehören. Du hast sie hoffentlich irgendwo in einem eigenen Verzeichniss gesammelt. Trozdem ist die Handhabung einer grossen Anzahl von Dateien oft mühsam, z.B. wenn du sie auf einen anderen Computer kopieren willst etc.. Es wäre praktisch, wenn man das Alles in eine Datei zusammenpacken und bei Bedarf wieder auspacken könnte. Genau das macht tar.

Der Befehl

tar -c -v -f blabla.tar blaprojekt/

würde eine Datei mit dem Namen "blabla.tar" erzeugen ("-c" für create). "-v" steht für "verbose" und listet die Dateien auf, während sie eingepackt werden. "-f" steht für "file" und hat als Argument das File in das das Archive geschrieben werden soll. Danach stehen ein oder mehrere Files oder Verzeichnisse (in diesem Fall das Verzeichnis "blaprojekt"). Im Fall von Verzeichnissen werden auch alle Files in dem Verzeichnis und rekursive Unterverzeichnisse miteingepackt.

Alternativ erlaubt "tar" auch die Kurzform, wo man alle Optionen als erstes Argument zusammenschreibt ohne ein Minus zu machen (sonst bei Befehlen eher unüblich):

tar cfv blabla.tar blaprojekt/

Dieser Befehl würde also das selbe tun wie der von oben. (Manche kommerzielle Unixe haben ein eigenes tar-Programm, wo die "switche" eventuell leicht anders heissen. In diesem Fall die man-Page auf dem jeweiligen System konsultieren)

"blabla.tar" ist jetzt ein grosses File, das alles aus "blaprojekt" enthält. Um die Files aufzulisten verwendet man die Option "-t" (für "test"):

tar tfv blabla.tar

Dieser Befehl gibt dir eine Liste aller in blabla.tar enthaltenen Files an. Üblicherweise ist es eine gute Idee sich diese Liste anzusehen bevor man ein unbekanntes tar-File entpackt. Vorallem die Frage, ob die Files auch in ein eigenes Verzeichnis (hier blaprojekt/ ) entpackt werden ist wichtig, weil sonst möglicherweise eine grosse Zahl unbekannter Files in deinem aktuellen Arbeitsverzeichnis laden und somit eine ziemliche Unordnung verursachen könnten. Unbekannte .tar-Files sollte man also am Besten in einem eigens vorher erzeugten Verzeichnis auspacken. Zum Auspacken verwenden wir die Option "-x" (für eXtract):

Wir machen zuerst z.B. ein Verzeichnis "uebung"

mkdir uebung
cd uebung

und packen jetzt das blabla.tar File von vorhin an dieser Stelle aus:

tar xfvz ../blabla.tar

(da wir ja ins Verzeichnis uebung gewechselt haben, finden wir das blabla.tar von vorhin eine Stufe weiter oben in der Verzeichnisshierarchie (".." ist eine Abkürzung die immer auf das übergeordnete Verzeichnis verweist)).

Jetzt findet sich (siehe Befehl "ls") ein Verzeichnis "blaprojekt" in diesem "uebung"-Verzeichnis und darin sind wieder alle Files aus dem "blaprojekt"-Verzeichnis.

"tar" packt alle Files in ein einziges .tar-Archiv (oft auch als "tar ball" bezeichnet). Allerings werden die Daten nur zusammengepackt und nicht komprimiert. Will man die Files auf Diskette speichern oder übers Netzwerk verschicken, ist es oft wünschenswert, diese auch zu komprimieren. Das kann man entweder so machen

gzip blabla.tar

(Hier wir das blabla.tar File komprimiert und bekommt die Endung ".gz" angehängt).
oder, indem man dem Befehl "tar" sagt, dass er die "gzip"-Komprimierung gleich beim Erstellen der Datei für uns aufruft. Die Archivierung und das Komprimieren wird hierbei in einem Schritt abgewickelt. Die Option dafür ist "-z" (für zip):

tar cfvz blabla.tar.gz blaprojekt/

Dieser Befehl erstellt direkt das File "blabla.tar.gz", das auch komprimiert ist (weil wir ebene ein "z" angegeben haben).

Ebenso würde

tar tfvz blabla.tar.gz

den Inhalt auflisten ("-t" für test).

Als Kurzform für das eher lange ".tar.gz" hat sich eingebürgert die Endung ".tgz" zu verwenden. Ein File mit der Endung ".tgz" ist also nichts Anderes als ein ".tar.gz." (Man muss die entsprechenden Endungen wie ".tar.gz" oder ".tgz" nicht verwenden und könnte seine Dateien beliebig nennen. Dennoch ist es hilfreich diese Konventionen einzuhalten, weil sie erklären, was in den Dateien enthalten ist)

Angenommen, du willst dir ein Backup aller Dateien unterhalb des /etc Verzeichnisses aufheben. Dann machen wir das z.B.: mit:

tar cfvzp etc_backup_dezember_2001.tgz /etc

Hier haben wir noch eine neue Optionen verwendet, die für Backups recht nützlich ist: "-p" für "preserve permission". Es wird zum Namen der Datei nun zusäztlich versucht die Zugriffsrechte auf diese Datei zu speichern. Obigen Befehl musst du natürlich als "root" ausführen, wenn du wirklich alle Dateien speichern willst. Andere "user" dürfen nicht alle Dateien in /etc lesen und könnten sie somit auch nicht speichern.

Mit

tar tfvz etc-backup-februar-2001.tgz

überprüfst du, ob dein Backup auch funktioniert hat.

"tar" hat noch einige weitere nützliche Optionen. Wie wir "tar" zum backup über Netzwerk verwenden können, lernen wir ein anderes Mal.

Noch etwas: Will man Dateien mit dem besser komprimierenden neueren "bzip2" komprimieren, gibt es die Option "-I" die man anstelle von "-z" verwendet.

tar cfvI blabla.tar.bz2 blaprojekt/

Dieser Befehl würde ein ".bz2" komprimiertes ".tar" File aus den Files in "blaprojekt/" erstellen. Neuere "tar" Versionen verwenden dafür allerdings den Schalter "-j" anstelle von "-I" )


EXERCISES:

* Lege dir ein Verzeichniss an, das einige Files enthält und mache davon ein ".tgz" Archiv. (Welchen Vorteil beim Entpacken hat es, wenn alle Files in einem ".tgz" File im selben Unterverzeichniss sind?)

* Liste mit der "t" Option alle Files auf, die in dem "tgz" enthalten sind.

* Mache ein eigenes Unterverzeichnis "test" und entpacke dort drinnen das oben erstellte ".tgz" Archiv.

* Wende "gzip -t" auf das ".tgz" File an. Welches File entsteht dadurch?

* Liste den Inhalt des so entstanden unkomprimierten ".tar" Archivs auf.


REFERENCES:

man tar

tar --help