gzip ohne teer? Warum werden sie zusammen verwendet?

17633
Mehrdad

Warum werden Teer und GZIP fast immer zusammen verwendet und nicht nur GZIP? Gibt es einen Vorteil bei dieser Methode?

56

5 Antworten auf die Frage

69
Matt Ball

TAR erstellt aus vielen Dateien eine einzige archivierte Datei, komprimiert sie jedoch nicht.

Formatdetails

Eine TAR-Datei ist die Verkettung einer oder mehrerer Dateien. Vor jeder Datei steht ein 512-Byte-Header-Datensatz. Die Dateidaten werden unverändert geschrieben, mit der Ausnahme, dass ihre Länge auf ein Vielfaches von 512 Byte aufgerundet wird und der zusätzliche Speicherplatz mit Null gefüllt wird. Das Ende eines Archivs wird durch mindestens zwei aufeinanderfolgende, mit Nullen gefüllte Datensätze gekennzeichnet.

GZIP komprimiert eine einzelne Datei in eine andere einzelne Datei, erstellt jedoch keine Archive.

Datei Format

... Obwohl das Dateiformat auch die Verkettung mehrerer solcher Streams ermöglicht (gezippte Dateien werden einfach dekomprimiert, als wären sie ursprünglich eine Datei), wird gzip normalerweise verwendet, um nur einzelne Dateien zu komprimieren. [4] Komprimierte Archive werden normalerweise erstellt, indem Sammlungen von Dateien in einem einzigen tar-Archiv zusammengefügt werden und dieses Archiv anschließend mit gzip komprimiert wird.

und das macht die "tgz" -Dateien im Vergleich zu anderen komprimierten Archivformaten ziemlich eindeutig, dh Sie können eine bestimmte Datei im Allgemeinen nicht extrahieren, ohne zuerst das zu dekomprimieren, was sich vor dieser Datei befindet. sylvainulg vor 13 Jahren 0
Es gibt keine "tgz" -Datei. Es ist ein tar.gz. Die Aufgabe von gzip ist es, den Inhalt zu komprimieren oder zu entpacken (in diesem Fall ein tar-Archiv.) Dann entpacken Sie es mit tar. Es ist eine typische Unix-Pipelining-Philosophie und daher kaum einzigartig. luis.espinal vor 13 Jahren 12
Nein. .Tar.gz ist nicht eindeutig: .tar.bz2, .cpio.gz usw. funktionieren auf dieselbe Weise. user46971 vor 13 Jahren 5
@ user36310 Ich weiß, was Sie im Prinzip meinen, aber in der Praxis können Sie mit den Tools eine einzelne Datei extrahieren. `tar -xzvf tarball.tar.gz single / file.txt`. Hinter den Kulissen muss etwas mehr Arbeit verrichtet werden, aber für das Aussehen wird eine einzige Datei extrahiert. Rich Homolka vor 13 Jahren 3
Machen Sie das "viel zusätzliche Arbeit", wenn sich die Datei am Ende eines großen Archivs befindet. Wenn Sie einen Direktzugriff benötigen, sind zip / rar / xar / 7z / lzh / arj / cab / sit usw. eindeutig überlegene Formate. LaC vor 13 Jahren 4
Genauer gesagt ist ein komprimiertes Archiv ".tar. *" Immer "solide", dh. besteht aus einem einzigen komprimierten Strom. Ein .zip-Archiv dagegen ist überhaupt nicht solide, der Kompressionsalgorithmus wird für jede Datei neu gestartet. Es verliert die Komprimierungseffizienz und beschleunigt den Direktzugriff. `.7z`-Archive können solide, nicht-solide oder solide Blöcke sein. Daniel B vor 7 Jahren 3
16
Dan

Gzip / Bzip2 sind Stromkompressoren. Sie komprimieren einen Datenstrom in einen kleineren Bereich. Sie können für einzelne Dateien verwendet werden, jedoch nicht für eigene Dateigruppen.

Auf der anderen Seite kann Tar eine Liste von Dateien mit Pfaden, Berechtigungen und Besitzinformationen in einen einzigen kontinuierlichen Stream umwandeln - und umgekehrt.

Um Dateien zu archivieren (und wenn auch eine Komprimierung erforderlich ist), verwendet man normalerweise tar + einige Komprimierungsmethoden.

11
luis.espinal

Tar ist dafür verantwortlich, nur eine Sache gut zu machen: (Un-) Archivierung in (aus) einer einzigen Archivdatei. Von was? Eines und nur eines: eine Reihe von Dateien.

Gzip ist dafür verantwortlich, nur eines zu tun: (Komprimieren). Von was? Von einer Sache und einer Sache: eine einzige Datei jeden Typs ... und dazu gehört eine mit tar erstellte Datei.

Sie geht zurück auf die UNIX-Philosophie des Pipelining, die zugrunde liegende Architektur "Pipe and Filters". die Behandlung von allem als Datei und das klangliche architektonische Ziel von "one-thing-do-one-thing-only-and-do-it-it-well" (was zu einer sehr eleganten und einfachen Art von Plug-and-Play führt .)

In seiner Einfachheit ist es fast algebraisch (ein wichtiges Ziel beim Systemdesign). Und das ist keine leichte Aufgabe.

In vielerlei Hinsicht (und nicht ohne seine Mängel) ist dies in Bezug auf Zusammensetzbarkeit, Modularität, lockere Kopplung und hohe Kohäsion fast ein Höhepunkt. Wenn Sie diese vier verstehen (und damit meine ich wirklich ), ist es offensichtlich, warum tar und gzip paarweise so funktionieren.

Diese UNIX-Philosophie ist in Ordnung, aber ich stelle fest, dass sie zu kurz kommt und nicht feste Archive erstellt. (Das Extrahieren einer einzelnen Datei aus einer 1-GB-Datei tar.gz sollte keine Schmerzen verursachen. Soweit ich es hier verstanden habe, ist ZIP tar.gz ziemlich überlegen ... oder?) Mehrdad vor 13 Jahren 1
@Mehrad - ** Zuerst **, was ist ein nicht solides Archiv? Wie Voltaire zugeschrieben, * "Wenn Sie sich mit mir unterhalten würden, müssen Sie zuerst Ihre Begriffe definieren." *. ** Zweitens **, ja, die Pipe- und Filter-Architektur ist in bestimmten Fällen wie jede andere Architektur ungeachtet ihrer Schönheit unzureichend. Das ist eine gegebene Sache mit einem gewissen Maß an Technik, und es ist nicht das Argument, das gemacht wird. ** Drittens **, zip ist Gzip und Teer überlegen, aber das war nicht das, was Sie gefragt haben. Sie haben gefragt, warum Reißverschluss und Teer so funktionieren, wie es funktioniert und ob es Vorteile gibt, und Sie haben eine technische Antwort erhalten. luis.espinal vor 13 Jahren 0
@Mehrad - außerdem weiß ich nicht, auf welche Probleme beim Entpacken von 1gig tar.gz-Dateien stoßen. Ich habe das oft gemacht, bis zu 2 GB mit älteren gzip-Installationen (und bis zu 4 GB mit neueren Versionen von gzip.) Wenn Sie es über das Kabel oder auf eine NFS-Halterung tun, dann duh! Sie werden auf ähnliche Leistungsprobleme stoßen, als wären Sie mit einem einfachen Reißverschluss fertig. Heck, ich habe sogar eine Pfeife von einem Rohr zu einem Remote-Prozess, der gzip-Input in einen Socket spuckt. ** Versuchen Sie das mit zip. ** Verwenden Sie für jedes Problem das entsprechende Werkzeug (sei es tar | gz oder zip.) luis.espinal vor 13 Jahren 0
8
p_l

Zunächst wurde TAR nicht zum Erstellen von Dateiarchiven erstellt . Es ist Tape ARchiver . Es ist die Aufgabe, ein Archiv auf / von Band zu schreiben oder in ein Archiv zu laden.

Mit der Option -f wird eine Datei als "virtuelles Band" verwendet, die dann von einem anderen Programm komprimiert werden kann. Tatsächlich geschieht eine solche Komprimierung auch auf echten Tapedrives.

Natürlich zählt in diesem Fall auch die Philosophie, ein Programm dafür zu verwenden, aber es wird übersehen, warum TAR-Archive als Stream statt als Verzeichnis mit Inhalten + Inhalten strukturiert sind.

Richtig ... ZIP-Dateien fassen alle Dateiinformationen in einem einheitlichen Header zusammen, dann den gesamten Dateiinhalt ... Das macht es unmöglich, * mehr Dateien an eine ZIP-Datei anzuhängen ... Sie müssen die gesamte Datei neu schreiben. Im TAR-Format ist der Header für jede Datei separat, sodass Sie problemlos weitere Dateien anfügen können, ohne das gesamte Band neu zu schreiben JoelFan vor 13 Jahren 3
5
bwDraco

Traditionell verwendet Unix - Systeme ein Programm eine Aufgabe pro die auszuführen Unix - Philosophie : tarwar nur ein Mittel, um mehrere Dateien in einer einzigen Datei zu verpacken, die ursprünglich für Bandsicherung (daher tar, t Affe ar schnittlauch). tarbietet keine Kompression; das resultierende unkomprimierte Archiv wird typischerweise mit einem anderen Programm, wie beispielsweise Druck gzip, bzip2oder xz. Früher benutzten sie den compressBefehl dazu. Neuere Kompressionsalgorithmen sind wesentlich effektiver.

Der stark modularisierte Ansatz, der von der Unix-Philosophie vorgegeben wird, bedeutet, dass jedes Programm einzeln verwendet oder kombiniert werden kann, um komplexere Aufgaben auszuführen, einschließlich der Erstellung komprimierter Archive, wie hier beschrieben. Für diese Aufgaben macht es auch einfach, einzelne Werkzeuge bei Bedarf auszutauschen; Sie müssen lediglich das Kompressionsprogramm ändern, um einen anderen Kompressionsalgorithmus zu verwenden, ohne das tarDienstprogramm selbst ersetzen zu müssen .

Dieser modulare Ansatz ist nicht ohne Nachteile. Wie erwähnte in den Kommentaren zu anderen Antworten, wie ein gewidmet komprimiertes Archiv - Format .zipbesser in der Lage ist die Extraktion einzelner Dateien zu handhaben ; Komprimierte Tarballs müssen fast vollständig dekomprimiert werden, um Dateien am Ende des Archivs zu extrahieren, während .zipArchive den wahlfreien Zugriff auf ihren Inhalt ermöglichen. (Einige neuere Formate, z. B. .7zunterstützen feste und nicht feste Archive sowie feste Blöcke unterschiedlicher Größe in größeren Archiven.) Die fortgesetzte Verwendung von tarin Verbindung mit einem separaten Komprimierungsprogramm ist eine Frage von Tradition und Kompatibilität. auch, .7zund .zipUnix - Dateisystem - Metadaten wie Berechtigungen nicht unterstützen.