gzip ohne teer? Warum werden sie zusammen verwendet?

60

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

Mehrdad
quelle

Antworten:

72

TAR erstellt eine einzelne archivierte Datei aus vielen Dateien, 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 Bytes aufgerundet wird und der zusätzliche Speicherplatz mit Null gefüllt ist. Das Ende eines Archivs ist durch mindestens zwei aufeinanderfolgende, mit Nullen gefüllte Datensätze gekennzeichnet.

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

Datei Format

... Obwohl sein Dateiformat auch die Verkettung mehrerer solcher Streams ermöglicht (komprimierte 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 in der Regel erstellt, indem Dateisammlungen zu einem einzigen tar-Archiv zusammengefasst und dieses Archiv anschließend mit gzip komprimiert werden.

Matt Ball
quelle
12
Es gibt keine "tgz" -Datei. Es ist ein tar.gz. Die Aufgabe von gzip ist es, den Inhalt zu komprimieren oder zu dekomprimieren (in diesem Fall ein Tar-Archiv). Dann entpacken Sie ihn mit tar. Es ist eine typische Unix-Pipelining-Philosophie und daher kaum einzigartig.
Luis.espinal
5
Nein, .tar.gz ist nicht eindeutig: .tar.bz2, .cpio.gz usw. funktionieren genauso.
user46971
3
@ 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 es einige zusätzliche Arbeiten erledigen, aber für den Anschein extrahiert es eine einzelne Datei.
Rich Homolka
4
Machen Sie das "viel zusätzliche Arbeit", wenn sich die Datei am Ende eines großen Archivs befindet. Wenn Sie einen wahlfreien Zugriff benötigen, sind zip / rar / xar / 7z / lzh / arj / cab / sit usw. die überlegenen Formate.
LaC
3
Um genau zu sein, ein .tar.*komprimiertes Archiv ist immer "solide", dh. besteht aus einem einzelnen komprimierten Stream. Ein .zipArchiv ist dagegen überhaupt nicht solide, der Komprimierungsalgorithmus wird für jede Datei neu gestartet. Es beeinträchtigt die Komprimierungseffizienz, um den Direktzugriff zu beschleunigen. .7zArchive können fest oder nicht fest sein oder feste Blöcke aufweisen.
Daniel B
17

Gzip / Bzip2 sind Stream-Kompressoren. Sie komprimieren einen Datenstrom in etwas Kleineres. Sie können für einzelne Dateien verwendet werden, jedoch nicht für Dateigruppen.

Tar hingegen kann eine Liste von Dateien mit Pfaden, Berechtigungen und Eigentumsinformationen in einen einzigen kontinuierlichen Stream umwandeln - und umgekehrt.

Aus diesem Grund verwendet man zum Archivieren von Dateien (und wenn man auch Komprimierung benötigt) normalerweise die Komprimierungsmethode tar + some.

Dan
quelle
12

Tar ist dafür verantwortlich, eine und nur eine Sache gut zu machen: das Archivieren in (aus) einer einzelnen Archivdatei (un). Von was? Eines und nur eines: eine Reihe von Dateien.

Gzip ist dafür verantwortlich, eine und nur eine Sache gut zu machen: (un) komprimieren. Von was? Eines und nur eines: eine einzelne Datei eines beliebigen Typs ... und dazu gehört auch eine mit tar erstellte Datei.

Es geht zurück auf die UNIX-Philosophie des Pipelining, die zugrunde liegende "Pipe and Filter" -Architektur; die Behandlung von allem als Datei und das klangliche architektonische Ziel von "Eins-macht-eins-nur-und-macht-es-gut" (was zu einer Art sehr elegantem und einfachem Plug-n-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 Mängel) ist dies fast ein Höhepunkt in Bezug auf Zusammensetzbarkeit, Modularität, lose Kopplung und hohe Kohäsion. Wenn Sie diese vier verstehen (und ich meine wirklich verstehen ), werden Sie verstehen, dass es offensichtlich ist, warum tar und gzip so paarweise funktionieren.

luis.espinal
quelle
1
Diese UNIX-Philosophie ist in Ordnung schön, aber ich stelle fest, dass sie unzureichend ist und nicht solide Archive erstellt. (Das Extrahieren einer einzelnen Datei aus einem 1-GB-tar.gz sollte kein Problem sein, und was ich hier verstanden habe, ist ZIP tar.gz ziemlich überlegen ... richtig?)
Mehrdad
@Mehrad - Erstens , was ist ein nicht-festes Archiv? Wie Voltaire zugeschrieben, "Wenn Sie sich mit mir unterhalten möchten, müssen Sie zuerst Ihre Begriffe definieren." . Zweitens , ja, die Rohr- und Filterarchitektur ist, wie jede andere Architektur, ungeachtet ihrer Schönheit, in bestimmten Fällen unzureichend. Das ist eine Selbstverständlichkeit mit einem Minimum an Ingenieurskunst, und es wird nicht das Argument vorgebracht. Drittens ist zip gzip und teer überlegen, aber das haben Sie nicht gefragt. Sie haben gefragt, warum Zip und Teer so funktionieren und ob es irgendwelche Vorteile gibt, und Sie haben eine technische Antwort erhalten.
Luis.espinal
@Mehrad - Ich weiß auch nicht, auf welche Art von Problemen Sie beim | Entpacken einer 1gig tar.gz-Datei stoßen. Ich habe das schon oft gemacht, bis zu 2 GB mit älteren gzip-Installationen (und bis zu 4 GB mit neueren gzip-Versionen). Es treten ähnliche Leistungsprobleme auf, als ob Sie mit einem einfachen Reißverschluss arbeiten würden. Ich habe sogar von einer Pipe zu einem Remote-Prozess gzip-Eingaben in einen Socket gespuckt. Versuchen Sie das mit zip. Verwenden Sie für jedes Problem das entsprechende Tool (sei es tar | gz oder zip.)
luis.espinal
8

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

Mit der Option -f wird eine Datei als "virtuelles Band" verwendet, das dann von einem anderen Programm komprimiert werden kann. Tatsächlich geschieht eine solche Komprimierung auch bei realen Bandlaufwerken.

Natürlich zählt auch in diesem Fall die Philosophie, ein Programm zu verwenden, um es gut zu machen, aber man könnte übersehen, warum TAR-Archive als Stream anstatt als Verzeichnis von Inhalten + Inhalten strukturiert sind.

p_l
quelle
3
Richtig ... ZIP-Dateien fassen alle Dateiinformationen in einem einheitlichen Header zusammen, dann den gesamten Dateiinhalt ... was es unmöglich macht, weitere Dateien an eine ZIP-Datei anzuhängen ... Sie müssen die gesamte Datei mit ... neu schreiben TAR-Format, der Header für jede Datei ist separat, so dass Sie problemlos weitere Dateien anhängen können, ohne das gesamte Band neu zu schreiben
JoelFan
5

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 Komprimierung. das resultierende unkomprimierte Archiv wird typischerweise mit einem anderen Programm , wie beispielsweise Druck gzip, bzip2oder xz. Früher benutzten sie den compressBefehl, um dies zu tun. Neuere Komprimierungsalgorithmen sind wesentlich effektiver.

Aufgrund des stark modularisierten Ansatzes, der von der Unix-Philosophie vorgegeben wird, kann jedes Programm einzeln verwendet oder kombiniert werden, um komplexere Aufgaben auszuführen, einschließlich der Erstellung komprimierter Archive, wie hier beschrieben. Für diese Art von Aufgaben ist es auch einfach, einzelne Werkzeuge nach Bedarf auszutauschen. Sie müssen lediglich das Komprimierungsprogramm ändern, um einen anderen Komprimierungsalgorithmus 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 gegen Ende des Archivs zu extrahieren, während .zipArchive den wahlfreien Zugriff auf ihren Inhalt ermöglichen. (Einige neuere Formate wie .7zSolid- und Non-Solid-Archive sowie Solid-Blöcke unterschiedlicher Größe in größeren Archiven werden unterstützt.) Die fortgesetzte Verwendung tarin Verbindung mit einem separaten Komprimierungsdienstprogramm ist eine Frage der Tradition und der Kompatibilität. auch, .7zund .zipUnix - Dateisystem - Metadaten wie Berechtigungen nicht unterstützen.

bwDraco
quelle