Tar Vs Zip Vs Gz: Unterschied und Effizienz

Es ist nicht ungewöhnlich, dass beim Herunterladen von Dateien die Dateierweiterungen .tar, .zip oder .gz angezeigt werden . Aber kennen Sie den Unterschied zwischen Tar und Zip und Gz? Warum verwenden wir sie und was ist effizienter, Teer oder Zip oder GZ?

Unterschied zwischen teer, zip und gz

Wenn Sie es eilig haben oder sich einfach nur etwas merken möchten, ist hier der Unterschied zwischen zip und tar und gz:

.tar == unkomprimierte Archivdatei

.zip == (normalerweise) komprimierte Archivdatei

.gz == Datei (Archiv oder nicht) mit gzip komprimiert

Ein bisschen Geschichte von Archivdateien

Wie viele Dinge über Unix- und Unix-ähnliche Systeme beginnt die Geschichte vor langer Zeit in einer nicht allzu fernen Galaxie, die als die siebziger Jahre bezeichnet wird. An einem kalten Morgen im Januar 1979 erschien das Dienstprogramm tar als Teil des neu veröffentlichten Unix V7.

Das Dienstprogramm tar wurde entwickelt, um viele Dateien effizient auf Bänder zu schreiben. Auch wenn Bandlaufwerke heutzutage der überwiegenden Mehrheit der einzelnen Linux-Benutzer unbekannt sind, werden Tarballs - der Spitzname von Tar- Archiven - häufig verwendet, um mehrere Dateien oder sogar den gesamten Verzeichnisbaum (oder sogar Gesamtstrukturen) in eine einzige Datei zu packen .

Ein wichtiger Punkt ist, dass eine einfache TAR- Datei nur ein Archiv ist, dessen Daten nicht komprimiert werden. Mit anderen Worten, wenn Sie 100 Dateien mit einer Größe von 50 KB tarieren, erhalten Sie ein Archiv mit einer Größe von ca. 5000 KB. Der einzige Vorteil, den Sie mit tar alleine erwarten können, ist die Vermeidung des vom Dateisystem verschwendeten Speicherplatzes, da die meisten von ihnen Speicherplatz mit einer gewissen Granularität zuweisen (auf meinem System verwendet eine ein Byte lange Datei beispielsweise 4 KB Festplattenspeicher, 1000 KB Speicherplatz) sie werden 4MB verwenden, aber das entsprechende tar-Archiv "nur" 1MB).

Es ist erwähnenswert, dass tar sicherlich nicht das einzige Standard-Unix-Tool ist, mit dem Archive erstellt werden können. Programmierer wissen wahrscheinlich, wie es heute meistens verwendet wird, um statische Bibliotheken zu erstellen, die nicht mehr als Archive kompilierter Dateien sind. Mit ar können jedoch beliebige Archive erstellt werden. Tatsächlich sind .deb- Paketdateien, die auf Debian-Systemen verwendet werden, Archive! Unter MacOS X sind mpkg- Pakete gzip-komprimierte cpio- Archive. Dennoch erfreuten sich weder ar noch cpio bei den Nutzern der gleichen Beliebtheit wie tar . Vielleicht, weil der Befehl tar gut genug und einfacher zu verwenden war.

Nicht die Art von Teer, die Sie suchen

Das Erstellen von Archiven ist nett. Im Laufe der Zeit und mit dem Aufkommen des PC-Zeitalters erkannten die Menschen jedoch, dass sie durch Komprimieren von Daten enorme Einsparungen bei der Speicherung erzielen konnten . Ein Jahrzehnt nach der Einführung von oder tar erschien zip in der MS-DOS-Welt als Archivformat, das die Komprimierung unterstützt . Das gebräuchlichste Komprimierungsschema für zip ist deflate, eine Implementierung des LZ77-Algorithmus. Da das zi p- Format jedoch kommerziell von PKWARE entwickelt wurde, leidet es seit Jahren unter der Belastung durch Patente.

Parallel dazu wurde gzip entwickelt, um den LZ77-Algorithmus in eine freie Software zu implementieren, ohne ein PKWARE-Patent zu brechen.

Als Schlüsselelement der Unix-Philosophie „Do One Thing and Do It Well“ wurde gzip so konzipiert, dass nur Dateien komprimiert werden. Um ein komprimiertes Archiv zu erstellen, müssen Sie zuerst ein Archiv erstellen, indem Sie beispielsweise das Dienstprogramm tar verwenden . Und danach werden Sie dieses Archiv komprimieren . Dies ist eine .tar.gz- Datei (manchmal mit .tgz abgekürzt, um diese Verwirrung noch weiter zu verstärken - und um die längst vergessenen 8.3 MS-DOS-Dateinamenbeschränkungen einzuhalten).

Im Zuge der Entwicklung der Informatik wurden andere Komprimierungsalgorithmen für ein höheres Komprimierungsverhältnis entwickelt. Zum Beispiel der in bzip2 implementierte Burrows-Wheeler-Algorithmus (führt zu .tar.bz2- Archiven). Oder in jüngerer Zeit xz, eine LZMA- Algorithmusimplementierung ähnlich der im Dienstprogramm 7zip verwendeten .

Verfügbarkeit und Einschränkungen

Heute können Sie jedes Archivdateiformat sowohl unter Linux als auch unter Windows frei verwenden.

Da das Zip- Format von Windows aus unterstützt wird, ist dieses Format insbesondere in plattformübergreifenden Umgebungen vorhanden. Sie können das zip- Dateiformat sogar an unerwarteten Stellen finden. Beispielsweise wurde dieses Dateiformat von Sun für JAR- Archive beibehalten, die zum Verteilen kompilierter Java-Anwendungen verwendet wurden. Oder für OpenDocument-Dateien ( .odf, .odp …), die von LibreOffice oder anderen Office-Suites verwendet werden. Alle diese Dateiformate sind getarnte Zip-Archive. Wenn Sie neugierig sind, zögern Sie nicht, eine der folgenden Informationen zu entpacken :

 sh $ entpacken some-file.odt Archiv: some-file.odt extrahieren: mimetype aufblasen: meta.xml aufblasen: settings.xml aufblasen: content.xm aufblasen: styles.xml aufblasen: META-INF / manifest XML 

Abgesehen davon würde ich in der Unix-ähnlichen Welt immer noch den Archivtyp tar bevorzugen, da das zip- Dateiformat nicht alle Metadaten des Unix-Dateisystems zuverlässig unterstützt. Für einige konkrete Erklärungen dieser letzten Anweisung müssen Sie wissen, dass das ZIP-Dateiformat nur einen kleinen Satz obligatorischer Dateiattribute definiert, die für jeden Eintrag gespeichert werden müssen: Dateiname, Änderungsdatum, Berechtigungen. Über diese grundlegenden Attribute hinaus kann ein Archivierer zusätzliche Metadaten im sogenannten Extra-Feld des ZIP-Headers speichern. Da jedoch zusätzliche Felder implementierungsdefiniert sind, gibt es auch für kompatible Archivierer keine Garantie, denselben Metadatensatz zu speichern oder abzurufen. Lassen Sie uns das an einem Beispielarchiv überprüfen:

 sh $ ls -lsn data / Team insgesamt 0 0 -rw-r - r-- 1 1000 2000 0 Jan 30 12:29 Team sh $ zip -0r archive.zip data / 
 sh $ zipinfo -v archive.zip data / team Zentraler Verzeichniseintrag # 5: --------------------------- data / team [.. .] Offensichtlicher Dateityp: Binär Unix-Dateiattribute (100644 Oktal): -rw-r - r-- MS-DOS-Dateiattribute (00 Hex): keine Das zusätzliche Feld für das Zentralverzeichnis enthält: - Ein Unterfeld mit der ID 0x5455 ( Weltzeit) und 5 Datenbytes. Das lokale Zusatzfeld hat UTC / GMT-Änderungs- / Zugriffszeiten. - Ein Unterfeld mit der ID 0x7875 (Unix UID / GID (beliebige Größe)) und 11 Datenbytes: 01 04 e8 03 00 00 04 d0 07 00 00. 

Wie Sie sehen können, sind die Besitzinformationen (UID / GID) Teil des zusätzlichen Feldes - es ist möglicherweise nicht offensichtlich, ob Sie Hexadezimal nicht kennen oder ob ZIP-Metadaten in Little Endian gespeichert sind, aber kurz "e803" "03e8" mit "1000" ist die Datei-UID. Und "07d0" ist "d007", was 2000 ist, die Datei GID.

In diesem speziellen Fall hat das auf meinem Debian-System verfügbare Info-ZIP- Zip- Tool einige nützliche Metadaten im Zusatzfeld gespeichert. Es gibt jedoch keine Garantie dafür, dass dieses zusätzliche Feld von jedem Archivierer geschrieben wird. Und selbst wenn vorhanden, gibt es keine Garantie dafür, dass das zum Extrahieren des Archivs verwendete Tool dies versteht.

Während wir die Tradition als Motivation für die Verwendung von Tarballs nicht ablehnen können, verstehen Sie anhand dieses kleinen Beispiels, warum es immer noch Fälle gibt, in denen Teer nicht durch Reißverschluss ersetzt werden kann. Dies gilt insbesondere dann, wenn Sie alle Standarddateimetadaten beibehalten möchten.

Tar vs Zip vs Gz Effizienz Test

Ich werde hier über Raumeffizienz und nicht über Zeiteffizienz sprechen. Als Faustregel gilt jedoch, dass ein Komprimierungsalgorithmus potenziell effizienter ist und mehr CPU benötigt.

Um Ihnen einen Eindruck von der Komprimierungsrate zu geben, die mit verschiedenen Algorithmen erzielt wurde, habe ich auf meiner Festplatte etwa 100 MB Dateien aus gängigen Dateiformaten gespeichert. Hier sind die Ergebnisse, die mit meinem Debian-Stretch-System erzielt wurden (alle von du -sh gemeldeten Größen):

Dateityp.jpg.mp3.mp4.odt.png.TXT
Anzahl der Dateien216345279299020724397
Platz auf der Festplatte98M99M99M98M98M98M
Teer94M99M98M93M92M89M
Reißverschluss (keine Kompression)92M99M98M91M91M86M
Reißverschluss87M98M93M85M77M28M
tar + gzip86M98M93M82M77M27M
tar + bz287M98M93M42M71M22M
tar + xz70M98M22M348K51M19M

Zunächst möchte ich Sie ermutigen, diese Ergebnisse mit einem großen Salzkorn zu betrachten: Die Datendateien hingen tatsächlich auf meiner Festplatte herum und ich würde nicht behaupten, dass sie in irgendeiner Weise repräsentativ sind. Dann muss ich gestehen, dass ich diese Dateitypen nicht zufällig ausgewählt habe. Ich habe es bereits gesagt, ODT- Dateien sind bereits ZIP-Dateien. Der bescheidene Gewinn, der durch ein zweites Komprimieren erzielt wird, ist nicht überraschend (mit Ausnahme von bzip2 oder xy), aber ich würde dies als statistische Abnormalität betrachten, die durch die geringe Heterogenität meiner Datendateien verursacht wird - die mehrere Sicherungen oder Arbeitsversionen derselben enthalten Unterlagen).

Bezüglich .jpg, .mp3 und .mp4 jetzt: Vielleicht wissen Sie, dass es sich um bereits komprimierte Datendateien handelt . Vielleicht haben Sie sogar gehört, dass sie destruktive Komprimierung verwenden . Das heißt, Sie können nach einer JPEG-Komprimierung nicht genau das Originalbild rekonstruieren. Und das stimmt. Wenig bekannt ist jedoch, dass die Daten nach der destruktiven Komprimierungsphase per se ein zweites Mal unter Verwendung des zerstörungsfreien Huffman-Algorithmus mit variabler Wortlänge komprimiert werden, um Datenredundanz zu beseitigen.

Aus all diesen Gründen wurde erwartet, dass die Komprimierung von JPEG-Bildern oder MP3 / MP4-Dateien nicht zu hohen Zuwächsen führt. Bitte beachten Sie, dass eine typische Datei sowohl die stark komprimierten Daten als auch einige nicht komprimierte Metadaten enthält. Dies erklärt, warum ich bei JPEG-Bildern immer noch einen spürbaren Gewinn verzeichne, da ich viele davon hatte. Die Gesamtgröße der Metadaten war also im Vergleich zur Gesamtgröße der Dateien nicht vernachlässigbar. Wiederum hängen die überraschenden Ergebnisse beim Komprimieren von MP4-Dateien mit xz wahrscheinlich mit den großen Ähnlichkeiten zwischen den verschiedenen MP4-Dateien zusammen, die während meiner Tests verwendet wurden. Oder nicht?

Um diese Zweifel zu zerstreuen, empfehle ich Ihnen dringend, eigene Vergleiche anzustellen. Und zögern Sie nicht, uns Ihre Beobachtungen im Kommentarbereich unten mitzuteilen!

Empfohlen

MariaDB: Die Software, die Open Source speichern oder brechen könnte
2019
Installieren und Verwenden von MEGA Cloud Storage unter Linux
2019
openSUSE ist jetzt auf dem Windows-Subsystem für Linux verfügbar
2019