Was ist der Unterschied zwischen den verschiedenen Arten von .tar-Archiven?

16

Kann mir jemand sagen, was mit so vielen Archiven los ist und wie sie sich unterscheiden?

Es gibt mindestens fünf , dass ich mir vorstellen kann, .tar.tz, .tar.gz, .tar.bz2, .tar.lz,.tar.z

Welches ist das Beste für welche Anwendungen? Es scheint einfach albern, so viele Variationen derselben Datei zu machen, aber ich bin mir sicher, dass es einen Grund gibt.

Trevor Gross
quelle

Antworten:

18

Die .gz, .xz, .bz2, .7z, .lz, .zwird Suffixe verwendet deutlich zu machen , dass die Datei mit dem Komprimierungsalgorithmus komprimiert wird. Die Verwendung ist nicht auf .tarDateien beschränkt, sondern es werden auch Dateien wie initrd.gz(eine komprimierte anfängliche Ramdisk) oder manual.txt.gz(für ein komprimiertes Textdokument) angezeigt . Möglicherweise sehen Sie auch, file.tgzwas auch auf einen mit gzip komprimierten Tarball (wie file.tar.gz) hinweist .

Die Dateierweiterung ist eine Konvention, sie beschreibt nicht unbedingt den Inhalt der Datei. Verwenden Sie den fileBefehl , um zu überprüfen, welche Art von Datei Sie bearbeiten . Beispiel:

$ file data.tar.gz
data.tar.gz: gzip compressed data, from Unix
$ gunzip -c data.tar.gz | file -
/dev/stdin: POSIX tar archive (GNU)

Nach meiner Erfahrung sind gzip-komprimierte Dateien ( .gz) die häufigsten. Es ist schnell beim Komprimieren und Dekomprimieren, obwohl es andere Algorithmen gibt, die bessere Kompressionsverhältnisse ergeben.

Lekensteyn
quelle
8

Zusätzlich zur @Lekensteyn-Antwort möchte ich hinzufügen, dass dieses Verhalten auf der Do one thing and do it well- Philosophie basiert. Das tarProgramm weiß, wie mehrere Dateien in einem Stream (mit der .tarErweiterung) gespeichert werden , und gzipweiß, wie man einen komprimiert einzelne Datei ( .gzErweiterung hinzufügen ) *. Durch Kombinieren dieser Tools können Sie einen Befehl erstellen, der mehrere Dateien zu einer einzigen .tag.gzDatei komprimiert .

Dieser Ansatz ist sehr flexibel - Sie können einige Standard-Unix-Befehle kombinieren, um alle möglichen Dinge zu erledigen. Wenn Sie beispielsweise ein besseres Programm zum Komprimieren von Dateien schreiben, müssen Sie keine Änderungen tarvornehmen, um .tar.mymegazipDateien zu erstellen. Stattdessen leiten Sie tardie Ausgabe einfach an Ihren Kompressor weiter.

Genauso wenig tarweiß man über SSH Bescheid, aber durch das Kombinieren von Befehlen kann man ein Skript erstellen, das Dateien archiviert, sie über SSH auf einen entfernten Rechner hochlädt und dort wieder entarchiviert.

Vergleichen Sie dies mit dem zipBefehl, der nicht von Unix stammt - er verfügt über integrierte Tools zum Komprimieren ganzer Verzeichnisse, Verschlüsseln von Dateien, Aufteilen des Archivs in kleinere Zip-Dateien usw.


(Fußnote) - Ja, tarDateien können mit -zund gzip oder bzip selbst -jumgeschaltet werden. Sie wurden der Einfachheit halber hinzugefügt, und GNU tar spawnt tatsächlich gzipoder bzip2als neuer Prozess.

Sergey
quelle
Beispiel: Die Befehle tar c dir/ | gzip > dir.tar.gzund tar czf dir.tar.gz dir/Befehle machen dasselbe. Ein Beispiel , wo tarmit SSH und kombiniert wird tar(wieder): tar cz Documents/ | ssh user@host 'tar xz(rsync äquivalent wäre: rsync -a Documents user@host:)
Lekensteyn