Was ist effizienter - Teer oder Zip-Komprimierung? Was ist der Unterschied zwischen Teer und Reißverschluss?

68

Ich arbeite in einer Linux-Umgebung und möchte mehr über tar- und zip-Befehle erfahren.

Was ist effizienter - Teer oder Reißverschluss? Ich muss auch die Unterschiede zwischen den Befehlen tar und zip kennen. Kann mir das jemand erklären?

rekha_sri
quelle

Antworten:

77

tarnur macht eine einzelne Datei aus mehreren Dateien, spielt es keine Kompression tun , wenn ein Kompressionsprogramm kombiniert wie gzipoder bzip2(was Sie aus anrufen können tardurch die Verwendung -zoder -jOptionen, respectively). zipkombiniert sowohl die Archivierung als auch die Komprimierung in einem Programm.

Wim
quelle
60

Teer

  • Angenommen, Sie lesen von einem Ende zum anderen - "Tape ARchive". (Das Alter des Befehls zeigt ...)
  • Komprimiert nicht, aber Sie können den gesamten resultierenden Stream komprimieren, indem Sie ihn durch z. B. gzip und bzip2 leiten (intern mit -z oder -j).
  • Speichert Unix-Dateiattribute : UID, GID, Berechtigungen (insbesondere ausführbare Dateien). Die Standardeinstellung kann von Ihrer Distribution abhängen und mit Optionen umgeschaltet werden.

Postleitzahl

  • Speichert MSDOS-Attribute . (Archiv, schreibgeschützt, versteckt, System)
  • Komprimiert jede Datei und fügt sie einem Archiv hinzu
  • Enthält eine Dateitabelle am Ende der Datei
  • und als Ergebnis der beiden ersteren können Sie nur die genauen Teile der Datei lesen, die Sie benötigen.

Die Tatsache, dass zip die Dateien separat komprimiert, wirkt sich auf die Komprimierungsraten aus, insbesondere bei vielen kleinen ähnlichen Dateien.

(Zumindest war das vor einem Jahrzehnt genau richtig.)

MaHuJa
quelle
22

Tar speichert viel mehr Metadaten als Zip, siehe meinen Vergleich (es ist etwas veraltet):

Bildbeschreibung hier eingeben

(Klicken zum Vergrößern)

Tar besteht 65% der Tests, Zip nur 17%. Ich habe die Testsuite unter BSD-Lizenz auf github verfügbar gemacht, damit Sie es selbst ausprobieren können, wenn Sie einen Mac haben. Unter Linux bin ich mir nicht sicher, ob Metadaten vorhanden sind. Daher sind diese Tests möglicherweise nicht relevant.

neoneye
quelle
Interessant! +1 dafür. Aber andererseits war das ein riesiges Programm. Hast du das für einen anderen Zweck geschrieben? Nur neugierig.
CppLearner
Ich habe die Tests für einen Dateimanager geschrieben, an dem ich vor einigen Jahren gearbeitet habe. Hat es aber nie veröffentlicht.
Neoneye
1
Linux hat auch Metadaten, sollte also funktionieren.
Zeitue
14

Die Effizienz kann auf verschiedene Arten gemessen werden:

  1. Wie lange dauert der Vorgang?
  2. Wie groß sind die resultierenden Dateien?

Es gibt auch andere Fragen, wie "Wie häufig sind die Tools zum Bearbeiten der resultierenden Archive?"

So entstehen beispielsweise bzip2kleinere Dateien als gzip, was aber deutlich länger dauern kann. Meiner Erfahrung nach gzipist es auf Unix-ähnlichen Systemen universell, aber bzip2immer noch nicht (obwohl es sehr verbreitet und normalerweise leicht zu bekommen ist).

Telemachus
quelle
3
7zip ( 7-zip.org ) ist eine weitere gute Option, um auf Kosten der CPU-Zeit eine hervorragende Komprimierung zu erzielen . Weniger verbreitet als bzip2 (nicht überall, wo ich weiß, standardmäßig installiert), aber an den meisten Stellen einfach zu installieren (es ist in den Standard-Repositorys für die meisten Linux-Distributionen enthalten und es gibt ein einfaches Installationspaket für Windows. Wie tar + gzip enthält es das Das Komprimierungsfenster für alle Eingabedateien
sorgt für
3
Effizienz kann auch daran gemessen werden, wie gut die Daten erhalten bleiben, siehe meine Antwort auf diese Frage. Tar ist viel besser als zip, wenn es darum geht, die Daten zu erhalten.
Neoneye
1
Eine weitere Messung kann außerhalb von UNIX kompatibel sein. Windows ist in Ordnung mit zip (in Windows integriert), kann tar.gz normalerweise leicht mit Shareware verarbeiten, aber bzip2 ist selten zu finden. Leider hat Original Question diese Kriterien nicht erwähnt und kann daher nicht feststellen, ob sie relevant sind.
Rich Homolka
1
Ich habe einmal gründlich das Verhältnis von Komprimierung zu Zeit überprüft, das für einige gängige Kompressoren erforderlich ist. Welches ist
Wim
9

Wie Wim bemerkte, wird Teer selbst nicht komprimiert. Wenn Sie "Komprimieren" hinzufügen (z. B. um eine .tar.gz- oder .tar.bz2-Datei zu erhalten), komprimieren Sie die gesamte tar-Datei auf einmal. Im Gegensatz dazu komprimiert zip jede Datei einzeln.

Die Effizienz hängt von der Arbeitsbelastung ab. Mit zip können Sie direkt auf einzelne Dateien zugreifen. Mit tar müssen Sie zuerst die unerwünschten (komprimierten) Dateien durchsuchen. Die Komprimierungsleistung hängt davon ab, was Sie komprimieren. tarmit bzip2ist oft besser für eine große Anzahl ähnlicher Dateien (zB ein Quellverzeichnis). zipkönnte besser sein, wenn jede Datei sehr unterschiedlichen Inhalt hat.

Matthew Flaschen
quelle
4
... müssen Sie die gesamte ZIP-Datei abrufen, bevor Sie auf den Inhalt zugreifen können, da der toc am Ende platziert wird. Im Gegensatz dazu können Sie einen Teer so schnell entpacken, wie die Bytes ankommen ...
akira
6

Zip-Archive enthalten am Ende ein zentrales Verzeichnis ihres Inhalts (wahrscheinlich müssen Sie das Verzeichnis nicht vorher erstellen, wenn Sie noch nicht wissen, was sich darin befindet). Dies ermöglicht das schnelle Extrahieren einzelner Dateien, ohne das gesamte Archiv entpacken zu müssen: Lesen Sie einfach das Archivverzeichnis und extrahieren Sie nur das, was benötigt wird. Dies setzt jedoch voraus, dass auf das gesamte Archiv zugegriffen werden kann, und erfordert einen wahlfreien Zugriff, der nur auf Blockgeräten (Disketten, Festplatten) möglich ist. Darüber hinaus ist das Archivverzeichnis verwundbar: Wenn das Archiv aus irgendeinem Grunde abgeschnitten wird, ist es schwer wizardry erfordert zu extrahieren etwas nützlich aus dem Archiv.

Zip-Archive wurden für die Verwendung durch BBS erstellt, bei denen es wichtig war, den Inhalt eines Verzeichnisses in eine einzige (und komprimierte) Datei zu bündeln, anstatt möglicherweise Tausende von Einzeldateien herunterladen zu müssen. Aus den gleichen Gründen bündeln die meisten Websites ihre Downloads auch heute noch.

Tar-Archive wurden entwickelt, um Backups zu bündeln, die für Bandlaufwerke und damit für den sequentiellen Zugriff verwendet werden sollen . Es gibt kein zentrales Verzeichnis. Stattdessen enthält das Archiv in regelmäßigen Abständen Header-Blöcke, die angeben, welche Dateien in den nächsten Blöcken folgen werden. Tar-Archive sollen auf einen Schlag gelesen werden; Wenn nur eine einzelne Datei extrahiert werden soll, wird das Archiv von Anfang an nacheinander gelesen, bis die angeforderte Datei gefunden wurde (die auch ganz am Ende stehen kann). Hinzu kommt die Komprimierung. jede der verschiedenen Komprimierungsprogrammen, die tar - Archive angelegt werden ( compress, gzip,bzip2etc.) sind Stream-Kompressoren und verändern in keiner Weise die Abfolge des Archivs. Im schlimmsten Fall benötigen Sie etwas mehr Blöcke, bis Sie mit dem Extrahieren beginnen können.

Dies mag nach einem geringfügigen Unterschied klingen, stellt jedoch in der Philosophie ein genaues Gegenteil dar. Bei zip-Archiven muss immer die gesamte Datei zur Hand sein, um nützliche Funktionen ausführen zu können, wohingegen ein tar-Archiv in eine Pipeline übertragen werden kann. Ich kann ein großes Teer-Archiv herunterladen und sofort mit dem Extrahieren beginnen, sobald die ersten Blöcke eingegangen sind (und möglicherweise den Download unterbrechen, sobald ich die gesuchte Datei erhalte). Bei einem Zip-Archiv muss ich warten, bis das Archivverzeichnis angezeigt wird, das ganz am Ende des Archivs steht. Sobald ich jedoch die gesamte Datei zur Hand habe, wird das Extrahieren von Teilinhalten aus einer TAR-Datei viel schneller gehen.

Beide Formate haben je nach Verwendungszweck und Verwendungszweck eine besondere Stärke. Da Pipelines (und damit der Gedanke, Daten von einem Prozess zum anderen zu streamen) nur in der Unix-Welt existieren, geht der Hauptvorteil von tar-Archiven auf anderen Systemen verloren, weshalb Zip-Archive dort weitaus beliebter sind. Aber tar-Archive sind flexibler, deshalb bevorzuge ich sie, wenn ich die Wahl habe.

Vucar Timnärakrul
quelle
5

Wie der andere bereits sagte, erstellt tar einen großen "Block" aller Dateien, die mit einem Stream-Prozessor wie gzip oder bzip2 komprimiert werden können.

Dies hat den Nachteil, dass Sie die gesamte Datei dekomprimieren müssen, um auf eine Datei im Archiv zuzugreifen.

Dies hat den Vorteil, dass das Komprimierungsverhältnis normalerweise höher ist, insbesondere wenn die komprimierten Dateien sehr ähnlich sind.

Andere Packer wie "rar" haben einen "Block-Modus" (oder ähnlich), um den gleichen Effekt zu erzielen.

IanH
quelle