Antworten:
TAR erstellt eine einzelne archivierte Datei aus vielen Dateien, komprimiert sie jedoch nicht.
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.
... 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.
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.
.tar.*
komprimiertes Archiv ist immer "solide", dh. besteht aus einem einzelnen komprimierten Stream. Ein .zip
Archiv ist dagegen überhaupt nicht solide, der Komprimierungsalgorithmus wird für jede Datei neu gestartet. Es beeinträchtigt die Komprimierungseffizienz, um den Direktzugriff zu beschleunigen. .7z
Archive können fest oder nicht fest sein oder feste Blöcke aufweisen.
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.
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.
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.
Traditionell verwendet Unix - Systeme ein Programm eine Aufgabe pro die auszuführen Unix - Philosophie : tar
war nur ein Mittel , um mehrere Dateien in einer einzigen Datei zu verpacken, die ursprünglich für Bandsicherung (daher tar
, t Affe ar schnittlauch). tar
Bietet keine Komprimierung. das resultierende unkomprimierte Archiv wird typischerweise mit einem anderen Programm , wie beispielsweise Druck gzip
, bzip2
oder xz
. Früher benutzten sie den compress
Befehl, 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 tar
Dienstprogramm 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 .zip
besser 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 .zip
Archive den wahlfreien Zugriff auf ihren Inhalt ermöglichen. (Einige neuere Formate wie .7z
Solid- und Non-Solid-Archive sowie Solid-Blöcke unterschiedlicher Größe in größeren Archiven werden unterstützt.) Die fortgesetzte Verwendung tar
in Verbindung mit einem separaten Komprimierungsdienstprogramm ist eine Frage der Tradition und der Kompatibilität. auch, .7z
und .zip
Unix - Dateisystem - Metadaten wie Berechtigungen nicht unterstützen.