tar

Aus Mikiwiki
Wechseln zu: Navigation, Suche

Der Shell-Befehl tar (tape archiver) ist ein Archivierungsprogramm zum Zusammenfassen von Dateien und Verzeichnissen in einer TAR-Datei. Das Programm wurde ursprünglich für die Verwaltung von Bandarchiven verwendet. tar kann mehrere Dateien nacheinander in eine einzige TAR-Datei schreiben bzw. einzelne Dateien aus dieser TAR-Datei wiederherstellen.

Um sicherzustellen, dass tar keine vorhandenen Dateien mit Archivinhalten überschreibt, sollten Archive vorsichtshalber in einem temporären Unterverzeichnis entpackt werden. Alternativ kann mit "tar -tvf archive.tar" nachgesehen werden, welche Dateien und Verzeichnisse sich in der Archivdatei befinden.

  • Eine mit absolutem Pfadnamen gesicherte Datei wird an die Stelle im Dateisystem zurückgebracht, die der absolute Pfadname angibt. Dies kann bei einer Datensicherung sinnvoll sein, nicht aber für die reine Datenübertragung.
  • Eine mit relativem Pfadnamen gesicherte Datei wird ins aktuelle Verzeichnis zurückgebracht.

Optionen

Die Schalter können oder müssen je nach Unixsystem mit oder ohne führendes Minuszeichen angegeben werden.

c Erzeugen einer Archivdatei.
--exclude= Ausschliessen der angegebenen Datei von der Archivierung.
f (file) Mit dieser Option arbeitet "tar" auf der angegebenen Datei anstatt auf dem Standardbandlaufwerk.

Anmerkung: Falls das Programm in eine pipe schreiben soll, wird ein Dateiname für die pipe verlangt. An dieser Stelle wird ein Bindestrich ( - ) als Synonym für "stdin" und "stdout" verwendet.

j Automatisches Komprimieren mit bzip2.
p Die Dateien erhalten beim Auflösen der Archivdatei dieselben Rechte wie sie vor dem Archivieren hatten. Wenn Benutzer "root" den Befehl "tar" benutzt, ist diese Option standardmässig eingeschaltet. Jeder andere Benutzer muss sie explizit angeben.
r Anhängen einer Datei an eine bestehende Archivdatei.
t Anzeige des Inhalts einer Archivdatei.
v (verbose) Mit dieser Option gibt "tar" die Namen der Dateien aus, die es bereits bearbeitet hat.
x (extract) Entpacken einer Archivdatei.
z Automatisches Komprimieren, je nach tar-Version mittels compress oder gzip.

Verwendung

Schreiben des aktuellen Verzeichnisses sowie aller seiner Unterverzeichnisse und Dateien im "raw device mode" auf Diskette. Das ist die kompatibelste Art, um per Diskette eine Datei von einem Unix-System auf ein anderes zu bringen.

$ tar cvf /dev/fd0 .

Sicherung des Verzeichnisses "/home/mik" mit absolutem Pfad auf das Bandgerät "/dev/rmt0".

$ tar cvf /dev/rmt0 /home/mik

Erzeugt die Archivdatei "../archiv.tar" und zeigt, welche Dateien archiviert werden. Die Archivdatei enthält den Inhalt des aktuellen Verzeichnisses einschliesslich der Punkt-Dateien und -Verzeichnisse.

$ tar cvf ../archiv.tar .

Erzeugt die Archivdatei "../archiv.tar" und zeigt, welche Dateien archiviert werden. Die Archivdatei enthält den Inhalt des aktuellen Verzeichnisses ohne Punkt-Dateien und -Verzeichnisse.

$ tar cvf ../archiv.tar *

Auflösen der Archivdatei "/tmp/neu.tar" im aktuellen Verzeichnis.

$ tar -xvpf /tmp/neu.tar

Erzeugt mit bzip2 die komprimierte Archivdatei "../archiv.tar.bz2" und zeigt, welche Dateien archiviert werden. In die Archivdatei kommen das aktuelle Verzeichnis und alle Unterverzeichnisse hinein.

$ tar -cvjf ../archiv.tar.bz2 .

Entpacken der mit bzip2 komprimierten Archivdatei "archiv.tar.bz2" im aktuellen Verzeichnis.

$ bunzip2 archiv.tar.bz2 && tar -xvf archiv.tar
oder
$ tar -xvjf archiv.tar.bz2

Erzeugt mit gzip die komprimierte Archivdatei "../archiv.tar.gz" bzw. "../archiv.tgz" und zeigt, welche Dateien archiviert werden. In die Archivdatei kommen das aktuelle Verzeichnis und alle Unterverzeichnisse hinein.

$ tar -cvzf ../archiv.tar.gz .
oder
$ tar cvzf ../archiv.tgz .

Anhängen der Datei "file" an die bestehende TAR-Archivdatei "archiv.tar".

$ tar -rf archiv.tar file

Löschen des Verzeichnisses "test/index" aus der TAR-Datei "archiv.tar".

$ tar --delete -f archiv.tar 'test/index'

In einem gezippten TAR-Archiv nach einer Datei suchen.

$ tar tzf sisisbase*tar.gz | grep MapBB2B.pl

Anzeige des Inhaltsverzeichnisses des gezippten TAR-Archivs "file.tar.gz".

$ less file.tar.gz

Per SSH wird auf dem Rechner "host" im Verzeichnis "/scratch/tmp" eine Sicherungskopie erstellt, deren Name sich aus "backup_", dem aktuellen Datum und der Dateiendung ".tar" zusammensetzt. Diese Sicherung umfasst alles ausgehend vom Wurzelverzeichnis "/", klammert aber das Verzeichnis "/proc" aus, das keine echten Dateien enthält.

$ tar -cvf user@host:/scratch/tmp/backup_$(date '+%Y_%m_%d').tar \
    --rsh-command=/usr/bin/ssh --exclude=/proc /

Beispiele

Sicherung einiger wichtiger Dateien aus dem Verzeichnis "/etc" mit relativen Pfadnamen in die Archivdatei "/tmp/etc_conf.tar".

$ cd /etc
$ tar cvf /tmp/etc_conf.tar ./init.d ./passwd ./shadow ./group ./*.conf

Ansehen des Inhalts der Archivdatei "/tmp/etc_conf.tar".

$ tar tvf /tmp/etc_conf.tar

Zurückspielen der Dateien in der Archivdatei "/tmp/etc_conf.tar" ins Verzeichnis "/tmp/test".

$ cd /tmp/test
$ tar xvf /tmp/etc_conf.tar

Zurückspielen einzelner Dateien aus der Archivdatei "etc_conf.tar" ins aktuelle Verzeichnis.

$ tar xvf etc_conf.tar "./passwd"
$ tar xvf etc_conf.tar "./init.d"

Backup per ssh mittels tar

...

$ tar -cz * | ssh backupserver "cat - > /backups/backup.tgz"

...

$ tar cpz * --rsh-command=/usr/bin/ssh -f backupserver:/backups/backup.tgz

FAQ

Datensicherung

Siehe Datensicherung mit tar.

TGZ-Archive

Erzeugen eines TGZ-Archivs

Ein TGZ-Archiv ist eine Datei, die mehrere andere Dateien komprimiert enthält. Dabei werden die Dateien zuerst zu einer Datei zusammengefasst und danach diese eine Datei nach dem LZW-Algorithmus komprimiert. Getreu der Unix-Philosophie gibt es daher auch zwei Werkzeuge, welche gemeinsam diese Aufgabe bewältigen.

Zuerst erzeugt tar aus mehreren Dateien einen Datenstrom, der ursprünglich dazu gedacht war, ihn auf ein Magnetband zu schreiben (daher der Name tape archiver ). Dazu ruft man tar mit der Option "c" auf, um ein Archiv zu erzeugen. Die Option "v" gibt weitere Informationen aus und die Option "f" erzwingt, dass die Ausgabe in eine normale Datei geschrieben wird (Standard-Datei ist der Streamer!). Danach besorgt das gzip die Kompression des Tarballs, normalerweise schaltet man es als Filter hinter tar. Der komplette Aufruf sieht wie folgt aus.

# tar cvf - files | gzip > output.tgz

Die GNU-Variante von tar kann den erzeugten tarball auch gleich komprimieren, da es die Option "z" kennt, die genau dies bewerkstelligt. Der Aufruf lautet wie folgt.

# gtar cvzf archive.tgz file

Üblicherweise packt man in ein TGZ-Archiv nur ein Unterverzeichnis, damit beim Auspacken die Dateien nicht das aktuelle Verzeichnis überfluten. Ausserdem ist dieses Verzeichnis LOKAL zu referenzieren, d. h. es sollte nicht der absolute Pfad angegeben werden. Ein typischer Aufruf sollte daher wie folgt aussehen.

# ls -F
aufg1/			aufg2/
aufg3/			aufg4/
projekt/		muell/
# gtar cvzf linus_aufg1.tgz aufg1
./aufg1/parse.c
./aufg1/parse_defs.h
#

Entpacken eines TGZ-Archivs

Dieser Vorgang ähnelt dem obigen, nur diesmal in der anderen Reihenfolge. Zuerst muss der komprimierte Datenstrom entpackt werden, danach wird das TAR-Archiv "aufgelöst".

# gzip -dc archive.tgz | tar xvf -

Auch hier gibt es wieder die Abkürzung über das GNU-tar.

# gtar xvzf archive.tgz

Dabei werden die Dateien ins aktuelle Verzeichnis ausgepackt, da es sich eingebürgert hat, immer ein gesamtes Verzeichnis in ein TGZ-Archiv zu packen.

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
country DE.gif Wikipedia ger Tarwbm Enzyklopädischer Artikel