Ich habe immer TAR und ZIP für die Komprimierung verwendet, aber kürzlich habe ich von dem *.Z
Komprimierungsalgorithmus gehört. Dies warf eine Frage für mich auf:
Welches ist bei all diesen Komprimierungssystemen für den allgemeinen Gebrauch und die Komprimierung am besten geeignet?
Bei einigen Tests habe ich festgestellt, dass diese tar
, wie ich festgestellt habe, NICHT wirklich komprimiert werden (sofern nicht ausdrücklich angegeben). Wofür ist es im Vergleich zu anderen Komprimierungsmethoden gut?
Ich bin schon bewusst , dass ZIP die am häufigsten verwendeten Kompressionssystem ist, aber sollte ich es statt *.Z
, *.7z
, .tar
, oder .tar.<insert ending here>
?
Beitragszusammenfassung:
- Soll ich
*.tar
,*.Z
,*.7z
,.tar
, oder.tar.<insert ending here>
für die beste Kompression? - Wenn plain
*.tar
nicht komprimiert wird, warum verwenden wir es?
BEARBEITEN: Nicht alle Algorithmen erlauben das Speichern von Linux-Berechtigungen (nach dem, was ich gelernt habe). Was tun und gibt es eine Art Hack (oder Skript), mit dem ich Berechtigungen speichern könnte?
quelle
Antworten:
tar
steht für Tape Archive. Alles, was es tut, ist, Dateien und ihre Metadaten (Berechtigungen, Besitz usw.) in einen Strom von Bytes zu packen, die auf einem Bandlaufwerk (oder einer Datei) gespeichert und später wiederhergestellt werden können. Die Komprimierung ist eine völlig separate Angelegenheit, bei der Sie die Ausgabe früher über ein externes Dienstprogramm leiten mussten, um sie zu komprimieren, wenn dies gewünscht wird. GNU tar war nett genug, um Schalter hinzuzufügen, die es anweisen, die Ausgabe automatisch über das entsprechende Dienstprogramm als Verknüpfung zu filtern.Zip und 7z kombinieren die Archivierung und Komprimierung in einem eigenen Containerformat. Sie sollen Dateien auf einem DOS / Windows-System packen, sodass sie keine Unix-Berechtigungen und -Eigentümer speichern. Wenn Sie also Berechtigungen für ordnungsgemäße Sicherungen speichern möchten, müssen Sie sich an tar halten. Wenn Sie vorhaben, Dateien mit Windows-Benutzern auszutauschen, ist zip oder 7z gut. Die tatsächlichen Komprimierungsalgorithmen zip und 7zip Verwendung mit Teer verwendet werden, durch uzing
gzip
undlzma
jeweils.lzma (auch bekannt als. * .xz) hat eines der besten Komprimierungsverhältnisse und ist bei der Dekomprimierung recht schnell, was es heutzutage zu einer Top-Wahl macht. Das Komprimieren erfordert jedoch eine Menge RAM- und CPU-Zeit. Der Ehrwürdige
gzip
ist bei der Komprimierung viel schneller und kann daher verwendet werden, wenn Sie nicht so viel CPU-Zeit verwenden möchten. Es hat auch eine noch schnellere Variante namens lzop.bzip2
ist immer noch ziemlich beliebt, da es gzip eine Zeit lang weitgehend ersetzte, bevor 7zip / lzma entstand, da es bessere Komprimierungsverhältnisse hatte, aber heutzutage in Ungnade fällt, da 7z / lzma bei der Dekomprimierung schneller ist und bessere Komprimierungsverhältnisse erzielt. Dascompress
Dienstprogramm, das normalerweise Dateien * .Z benennt, ist uralt und längst vergessen.Einer der anderen wichtigen Unterschiede zwischen zip und tar besteht darin, dass zip die Daten in kleinen Blöcken komprimiert, während Sie beim Komprimieren einer tar-Datei das Ganze auf einmal komprimieren. Letzteres bietet bessere Komprimierungsverhältnisse. Um jedoch eine einzelne Datei am Ende des Archivs zu extrahieren, müssen Sie das Ganze dekomprimieren, um darauf zuzugreifen. Daher ist das Zip-Format besser geeignet, um eine oder zwei einzelne Dateien aus einem großen Archiv zu extrahieren. 7z und
dar
Sie können wählen, ob Sie das Ganze (als "fester" Modus bezeichnet) oder kleine Stücke für eine einfache stückweise Extraktion komprimieren möchten.quelle
gzip
.tar cfp
die Berechtigungen bei. Eine TAR-Datei ist nicht komprimiert, daher komprimieren zip (7-zip), gzip2, gzip, lzo usw. eine TAR-Datei gut (im Allgemeinen ist es unwahrscheinlich, dass ein Teer komprimierter Dateien komprimierbar ist).Die Details der Algorithmen sind hier nicht zum Thema 1, da sie in keiner Weise spezifisch für Linux sind, geschweige denn für Ubuntu. Sie finden jedoch einige nette Infos hier .
Nun zu
tar
, wie Sie sagten,tar
ist und war nie ein Komprimierungsprogramm. Stattdessen ist es ein Archivierer ; Sein Hauptzweck ist es, aus vielen kleinen eine große Datei zu machen. In der Vergangenheit sollte dies das Speichern auf Bandlaufwerken erleichtern, daher der Name: Tape ARchive.Heutzutage besteht der Hauptgrund für die Verwendung
tar
darin, die Anzahl der Dateien auf Ihrem System zu verringern. Jede Datei in einem Unix-Dateisystem belegt einen Inode . Je mehr Dateien Sie haben, desto weniger Inodes sind verfügbar. Wenn Ihnen die Inodes ausgehen, können Sie keine neuen Dateien mehr erstellen. Einfach ausgedrückt, die gleiche Datenmenge, die als Tausende von Dateien gespeichert ist, beansprucht mehr von Ihrer Festplatte als dieselben Dateien in einem einzigen Tar-Archiv.Da dies in den Kommentaren bestritten wurde
/
, habe ich auf meiner 68G- Partition die folgende Anzahl an insgesamt und verwendeten Inodes (beachten Sie, dass die Anzahl der Inodes vom Dateisystemtyp und der Größe der Partition abhängt):Wenn ich jetzt versuche, mehr Dateien als Inodes zu erstellen:
Kein Platz? Aber ich habe viel Platz:
Wie Sie oben sehen können, werden durch das Erstellen einiger hunderttausend leerer Dateien meine Inodes schnell aufgebraucht, und ich kann keine neuen mehr erstellen. Wenn ich
tar
diese wäre, könnte ich wieder mit dem Erstellen von Dateien beginnen.Wenn weniger Dateien vorhanden sind, wird auch die Dateisystem-E / A erheblich beschleunigt, insbesondere bei NFS-gemounteten Dateisystemen. Ich tariere immer meine alten Arbeitsverzeichnisse, wenn ein Projekt abgeschlossen ist, denn je weniger Dateien ich habe, desto schneller
find
funktionieren Programme wie .Es gibt eine großartige Antwort auf Super User, die viel detaillierter ist, aber zusätzlich zu den oben genannten sind die anderen grundlegenden Gründe, warum sie
tar
heute noch beliebt sind, folgende:Effizienz: Die Verwendung
tar
zum Durchleiten eines Komprimierungsprogramms wiegzip
ist effizienter, da die Erstellung von Zwischendateien vermieden wird.tar
kommt mit allen Arten von Schnickschnack, Funktionen, die im Laufe ihrer langen Geschichte entwickelt wurden und die es besonders nützlich für * nix-Backups machen (denken Sie an Berechtigungen, Dateibesitz, die Möglichkeit, Daten direkt an STDOUT und über eine SSH-Verbindung weiterzuleiten ... )Trägheit. Wir sind es gewohnt
tar
. Es ist sicher anzunehmen, dass es auf jedem * nix verfügbar ist, den Sie möglicherweise verwenden, was es sehr portabel und praktisch für Quellcode-Tarballs macht.1 Das ist absolut wahr und hat nichts damit zu tun, dass ich nicht genug über sie weiß, um es zu erklären :)
quelle
tar
es nie, um "die Anzahl der Dateien zu reduzieren", da es den meisten Dateisystemen ehrlich gesagt egal ist und es sowieso nicht wirklich optimal ist, datar
es keinen einfachen zufälligen Zugriff auf Dateien unterstützt. Vielmehr besteht die Hauptanwendung (für mich und ich denke für die meisten Leute) darin, Dateien (z. B. Quellcode) auf einfache Weise mit anderen Menschen zu teilen.ARG_MAX
kann dies den Umgang mit Ihren Dateien in irgendeiner Weise problematisch machen und ein (schlecht) eingerichtetes Netzwerk, in dem Dateien auf einem zentralen Server gespeichert und mit NFS geteilt werden, in die Knie zwingen. Um die Anzahl der Dateien insgesamt zu verringern, benötigen Sie weit mehr Dateien, um dies zu bemerken. Bei Mehrbenutzer-Setups kann die Anzahl der Inodes jedoch tatsächlich begrenzt werden.tune2fs -l
auf der Partition, die mein $ HOME enthält, wird mir mitgeteilt, dass ich 19.300.352 Inodes habe. Ich werde nicht in der Lage sein, mehr Dateien als das zu erstellen. Wie Sie sagten, ist 10 ^ 6 nicht verrückt, auch nicht in den höheren Bereichen. Je nachdem , was Sie tun können Sie bedürften Art und Weise mehr als das.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 wiecpio
und gibtar
. (Debian-Pakete sindar
Archive, während siecpio
häufig für anfängliche RAM-Disks verwendet werden.) Werdentar
oder wurden häufig mit Komprimierungswerkzeugen wiecompress
(.Z),gzip
(.gz),bzip2
(.bz2) undxz
(.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 dastar
Dateiformat. Dies bedeutet, dass zum Extrahieren einer einzelnen Datei aus einem komprimiertentar
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 umzip
den Kompressor ohne Archivierer undxz
im Wesentlichen um7-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
undLZ4
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.
quelle
lzo, gz, b2, lzma (.lzma2 =.xz)
sind "Stream" -Kompressoren: Sie komprimieren einen Stream von Byes und wissen nichts und kümmern sich nicht um Dateien, Verzeichnisse und Metadaten wie Berechtigungen. Sie müssen einen Archivierer wie tar verwenden, um all diese Daten in einem Bytestrom (einer TAR-Datei) zu bündeln und mit einem Kompressor zu komprimieren. Wenn es sich um die Daten einer einzelnen Datei handelt, die Sie interessieren, können Sie diese Datei auch alleine einem dieser Kompressoren zuführen.Tar, cpio and pax
sind Archivierer: Sie nehmen eine Reihe von Dateien und Verzeichnissen und codieren die Daten und Metadaten in einer einzigen Datei. Teer ist der beliebteste und kompatibelste, obwohl die technischen Vorzüge zwischen den drei so gering sind, dass es im Laufe der Zeit zu Religionskriegen kam.7z und zip sind Kompressoren UND Arcihver: Speichern Sie dann alle Daten und Metadaten und komprimieren Sie sie. Allerdings AFAICT, keiner von ihnen speichert Unix-Berechtigungen.
Zip verwendet denselben Algorithmus wie gzip namens DEFLATE. 7z verwendet den lzma-Algorithmus
Um eine einzelne Datei aus einem tar.gz oder ähnlichem zu lesen, müssen Sie den gesamten gz-Stream dekomprimieren, bis genügend tar-Datei verfügbar ist, damit Sie sie extrahieren können. Mit Zip können Sie jede Datei einzeln komprimieren und herausziehen. 7z kann beide Verhaltensweisen haben.
Kompressionsverhältnisse und -geschwindigkeiten: gzip und lzo haben sehr sehr schnelle Kompressions- und Dekompressionsgeschwindigkeiten, aber niedrige Kompressionsverhältnisse. Das Komprimieren erfordert auch nicht viel Speicher. gzip ist etwas langsamer und bietet ein etwas besseres Kompressionsverhältnis als lzo.
Es ist so schnell, dass es schneller sein kann, eine komprimierte gz- oder lzo-Datei von der Festplatte zu lesen und im laufenden Betrieb zu dekomprimieren, anstatt die unkomprimierte Datei direkt von der Festplatte zu lesen.
LZMA (xz) bietet eine hervorragende Komprimierung allgemeiner Daten, das Komprimieren und Dekomprimieren dauert jedoch sehr lange, und das Komprimieren erfordert erhebliche Speichermengen.
bz2 war früher der Algorithmus der Wahl mit hoher Komprimierung, geriet jedoch in Ungnade, da es sowohl langsamer als lzma ist als auch länger zum Komprimieren und Dekomprimieren benötigt. Für bestimmte Arten von Daten (DNA-Sequenzen, Dateien mit sehr großen Durchläufen desselben Bytes usw.) kann bzip2 jedoch alles andere zweifellos übertreffen. Als Beispiel musste ich einmal eine 4-GB-Datei mit 1 komprimieren und b2 reduzierte i auf einige 10 KB, während lzma einige 10 MB nahm, wenn ich mich richtig erinnere.
quelle
Für besonders große Dateien können Sie verwenden
rzip
. Zuerst werden redundante Daten in 900 MB großen Blöcken untersucht, diese codiert und dann an bzip2 übergeben (nicht wirklich, aber es werden dieselben Algorithmen verwendet).Bewirken? Viel schneller als
xz
,lzma
oderbzip2
, und in meiner Erfahrung seines Verdichtungsverhältnis Rivalen , dass dielzma
. Es ist jedoch ein RAM-Schwein.http://en.wikipedia.org/wiki/Rzip
quelle