Tar (Packprogramm)
tar ist der Name eines im Unix-Umfeld sehr geläufigen Archivierungsprogramms. Außerdem wird so auch das Dateiformat bezeichnet, das von diesem Programm verwendet wird.
Der Name wurde aus tape archiver (Bandarchivierer) gebildet, da mit dem Programm ursprünglich Daten auf Bandlaufwerken gesichert wurden. Gleichzeitig ist tar auch das englische Wort für Teer (mit dem Programm werden Dateien unkomprimiert zu einer Datei zusammengeklebt).
tar bietet die Möglichkeit, Dateien sequenziell in eine einzige Datei zu schreiben, bzw. Dateien aus selbiger wieder herzustellen. Die entstehende Datei trägt die Endung .tar (unkomprimiert) und wird auch als Tarball (dt. Teerklumpen oder Teerkugel) bezeichnet.
Der MIME-Typ für tar-Dateien ist application/x-tar.
Unter Windows können Tarballs mit 7-Zip, TUGZip oder IZArc bearbeitet werden. Viele andere gängige Archivprogramme können tar-Archive zumindest öffnen.
Komprimierung
Der wahlfreie Zugriff auf einzelne Dateien ist bei tar nicht möglich, da Archivdateien kein Verzeichnis haben, das die Datei-Offsets zum schnellen Zugriff vorhält, wie es etwa bei Zip der Fall ist (dies bedeutet nicht, dass nicht auch einzelne Dateien aus einem Archiv entpackt werden können). Der Verzicht auf diese zusätzliche Struktur ermöglicht aber auch das einfache Vergrößern von Archiven.
Heute werden tar-Dateien meist komprimiert, um ihre Größe zu reduzieren. Dazu kommen üblicherweise Unix-typische Datenkompressionsprogramme wie compress, gzip oder bzip2 zum Einsatz. Der Ansatz, erst alle Dateien unkomprimiert aneinanderzuhängen, um sie dann zu komprimieren, wird als solide Kompression bezeichnet und mittlerweile auch bei anderen Archivformaten wie etwa RAR genutzt. Ein komprimierter Tarball trägt üblicherweise die Endung .tar.gz, .tgz, tar.Z, .tar.bz2, .tbz2 oder .tbz, wenn er mit einem der zuvor genannten Programme komprimiert wurde.
Probleme, Alternativen
Das tar-Format erscheint in BSD4.3, ustar und pax sind in POSIX Standard. Das gebräuchliche GNU tar entspricht nicht ganz diesem Standard. Insbesondere die oft fehlende Fähigkeit, Zugriffskontrolllisten zu speichern macht tar zu einem nur eingeschränkt brauchbaren Backup-Programm. Davon abgesehen gelten die oft mangelhafte Unterstützung von Hardlinks und Sparse-Dateien als problematisch und lassen das Rückspielen von Backups manchmal zu einem Lotteriespiel werden. Es gibt neuere Entwicklungen wie star oder bsdtar, die diese Nachteile zu vermeiden versuchen.
Ein weiterer, systematisch bedingter Nachteil liegt in der Art und Weise der Kompression. Solide Kompression bedingt nämlich, dass der Verlust eines einzigen Blocks den Verlust des gesamten restlichen Bandarchivs zur Folge haben kann. Auf diesem Gebiet gibt es bisher Versuche wie afio, das dateiweise komprimiert, und bestimmte blockweise komprimierende Algorithmen, zu denen bis zu einem gewissen Grad bzip2 bereits zählt.
Ein Unix-Kommando, welches in seinen Funktionen tar sehr ähnelt, ist cpio. Der POSIX-Standard vereint die Kommandos tar und cpio über das Kommando pax.
Einige Beispielaufrufe
Archive mit Inhalt von /etc und /home erstellen:
tar cvf test.tar /etc/ /home/ tar cvf - /etc /home | gzip > test.tar.gz tar cvf - /etc /home | bzip2 > test.tar.bz2
Mit GNU tar ist folgende Kurzform möglich, um gepackte Archive zu erstellen:
tar czvf test.tar.gz /etc/ /home/ tar cjvf test.tar.bz2 /etc/ /home/
Archive entpacken:
tar xvf test.tar gunzip < test.tar.gz | tar xvf - bunzip2 < test.tar.bz2 | tar xvf - zcat test.tar.gz | tar xvf -
Mit GNU tar ist folgende Kurzform möglich:
tar xzvf test.tar.gz tar xjvf test.tar.bz2
Archivinhalt ansehen:
tar tvf test.tar gunzip < test.tar.gz | tar tf - bunzip2 < test.tar.bz2 | tar tf - zcat test.tar.gz | tar tf -
Mit GNU tar ist folgende Kurzform möglich:
tar tzvf test.tar.gz tar tjvf test.tar.bz2
- Archive von einem Verzeichnis packen und über 'pipes' in ein anderes Verzeichnis entpacken
tar cvf - 'directory' | ( cd 'directory'/; tar xpvf -)
Beispiel:
tar -C sourcedir cvf - . | tar -C targetdir xpvf -
und dies via SSH übers Netzwerk
ssh user@host "tar cfv - /ursprung1/ /ursprung2/" | (cd /ziel/; tar xpvf -)