Es gibt zwei unterschiedliche, aber verwandte Aufgaben. Das Packen eines Baums von Dateien (einschließlich Dateinamen, Verzeichnisstruktur, Dateisystemberechtigungen, Besitz und anderer Metadaten) in einen Bytestream wird als
Archivierung bezeichnet . Das Entfernen der Redundanz in einem Byte-Stream, um einen kleineren Byte-Stream zu erzeugen, wird als Komprimierung bezeichnet .
Unter Unix sind die beiden Vorgänge mit jeweils unterschiedlichen Werkzeugen getrennt. Auf den meisten anderen Plattformen (aktuelle und historische) führen kombinierte Tools sowohl Archivierung als auch Komprimierung durch.
(gzip und andere Programme, die die Benutzeroberfläche von gzip imitieren, haben häufig die Möglichkeit, den ursprünglichen Dateinamen in der komprimierten Ausgabe zu speichern. Dies ist jedoch zusammen mit einer CRC oder einer anderen Überprüfung zur Erkennung von Beschädigungen die einzige Metadaten, die sie speichern können.)
Die Trennung von Komprimierung und Archivierung bietet Vorteile. Die Archivierung ist plattformspezifisch (die zu speichernden Metadaten des Dateisystems variieren stark), die Implementierung ist jedoch unkompliziert, weitgehend E / A-gebunden und ändert sich im Laufe der Zeit kaum. Die Komprimierung ist plattformunabhängig, aber die Implementierungen sind CPU-gebunden und die Algorithmen werden ständig verbessert, um die erhöhten Ressourcen zu nutzen, die moderne Hardware für das Problem bereitstellen kann.
Der beliebteste Unix-Archivierer ist tar
, obwohl es andere wie cpio
und gibt ar
. (Debian-Pakete sind ar
Archive, während sie
cpio
häufig für anfängliche RAM-Disks verwendet werden.) Werden tar
oder wurden häufig mit Komprimierungswerkzeugen wie compress
(.Z), gzip
(.gz),
bzip2
(.bz2) und xz
(.xz) vom ältesten bis zum jüngsten kombiniert und nicht zufällig von der schlechtesten zur besten Komprimierung.
Das tar
Erstellen und Komprimieren eines Archivs sind verschiedene Schritte: Der Kompressor weiß nichts über das tar
Dateiformat. Dies bedeutet, dass zum Extrahieren einer einzelnen Datei aus einem komprimierten tar
Archiv alle vorhergehenden Dateien dekomprimiert werden müssen. Dies wird oft als "solides" Archiv bezeichnet.
Da es sich bei tar um ein "Streaming" -Format handelt, das für die Verwendung in einer Pipeline erforderlich ist, gibt es in einem Teerarchiv keinen globalen Index, und das Auflisten des Inhalts eines Teerarchivs ist genauso teuer wie das Extrahieren.
Im Gegensatz dazu komprimieren Zip und RAR sowie 7-zip (die beliebtesten Archivierer auf modernen Windows-Plattformen) normalerweise jede Datei separat und komprimieren Metadaten, wenn überhaupt, leicht. Dies ermöglicht eine kostengünstige Auflistung der Dateien in einem Archiv und das Extrahieren einzelner Dateien, bedeutet jedoch, dass die Redundanz zwischen mehreren Dateien im selben Archiv nicht ausgenutzt werden kann, um die Komprimierung zu erhöhen. Während das Komprimieren einer bereits komprimierten Datei im Allgemeinen die Dateigröße nicht weiter verringert, wird gelegentlich eine Zip-Datei in einer Zip-Datei angezeigt: Beim ersten Zippen wurden viele kleine Dateien in eine große Datei umgewandelt (wahrscheinlich mit deaktivierter Komprimierung), bei der zweiten Zippen dann komprimiert als eine Einheit.
Es gibt eine gegenseitige Bestäubung zwischen den verschiedenen Plattformen und Philosophien: Es gzip
handelt sich im Wesentlichen um zip
den Kompressor ohne Archivierer und xz
im Wesentlichen um 7-zip
den Kompressor ohne Archivierer.
Es gibt andere spezialisierte Kompressoren. PPM-Varianten und deren Nachfolger ZPAQ
sind für eine maximale Komprimierung unabhängig vom Ressourcenverbrauch optimiert. Sie können leicht so viel CPU und RAM zerkauen, wie Sie auf sie werfen können, und die Dekomprimierung ist genauso anstrengend wie die Komprimierung (im Gegensatz dazu sind die meisten weit verbreiteten Komprimierungswerkzeuge
asymmetrisch : Dekomprimierung ist billiger als Komprimierung).
Am anderen Ende des Spektrums lzo
, snappy
und LZ4
werden als „light“ Kompressoren für maximale Geschwindigkeit und minimalen Ressourcenverbrauch ausgelegt, auf Kosten der Kompression. Sie werden häufig in Dateisystemen und anderen Objektspeichern verwendet, jedoch weniger als eigenständige Tools.
Also, welche solltest du wählen?
Archivierung:
Da Sie unter Ubuntu arbeiten, gibt es keinen wirklichen Grund, etwas anderes als die tar
Archivierung zu verwenden, es sei denn, Sie versuchen, Dateien zu erstellen, die an anderer Stelle leicht lesbar sind.
zip
ist für die Allgegenwart schwer zu übertreffen, aber es ist nicht Unix-zentriert und speichert nicht die Berechtigungen und Besitzinformationen Ihres Dateisystems, und die eingebaute Komprimierung ist veraltet. 7-zip und RAR (und ZPAQ) verfügen über eine modernere Komprimierung, sind jedoch für die Archivierung von Unix-Dateisystemen gleichermaßen ungeeignet (obwohl nichts Sie davon abhält, sie nur als Kompressoren zu verwenden). RAR ist ebenfalls proprietär.
Kompression:
Für maximale Komprimierung können Sie sich einen Benchmark ansehen, wie den riesigen unter http://mattmahoney.net/dc/text.html . Dies sollte Ihnen eine bessere Vorstellung von den damit verbundenen Kompromissen geben.
Sie möchten jedoch wahrscheinlich keine maximale Komprimierung. Es ist viel zu teuer.
xz
ist das beliebteste Allzweck-Komprimierungswerkzeug auf modernen Unix-Systemen. Ich glaube, 7-zip kann auch xz-Dateien lesen, da sie eng miteinander verbunden sind.
Schließlich: Wenn Sie Daten für etwas anderes als die kurzfristige Speicherung archivieren, sollten Sie sich für Open Source entscheiden, das vorzugsweise weit verbreitet ist, um später Kopfschmerzen zu minimieren.