Wenn ich renne
tar -cvzf archive.tgz file1 file2 ; rm file1 file2
Normalerweise wird ein komprimierter Tarball erstellt, aber wie ist das möglich?
tar -xvf archive.tgz
gibt mir die unkomprimierten Dateien zurück? Ich habe immer gedacht, dass das Flag -z erforderlich sein würde.
tar
verhalten sollte: 9p.io/wiki/plan9/UNIX_to_Plan_9_command_translation/index.htmlAntworten:
Ihre
tar
Implementierung, wahrscheinlichGNU
diejenige, erkennt die übergebene Datei, wenn ein Parameter komprimiert wird.Die
tar
heutzutageGNU tar
und ambusybox
häufigsten verwendeten Implementierungen suchen nach den ersten Bytes der Datei, auch bekannt als magische Zahl, um herauszufinden, ob sie komprimiert ist und welcher Komprimierungsalgorithmus verwendet werden soll.Die
tar
auf kommerziellen Unixen gefundenen Implementierungen, die auf dem ursprünglichen AT & T-Code basieren, unterstützen das-z
Flag überhaupt nicht . Eine bemerkenswerte Ausnahme ist Solaris 11,tar
wo diese Erweiterung hinzugefügt wurde, einschließlich der Möglichkeit, das Dateiformat zu erkennen.quelle
tar
Befehl (AT & T) überhaupt nicht unterstützt-z
wurde.Die
-z
Option ist in zwei bekannten Implementierungen von tar nicht erforderlich: GNU tar und BSD tar (auch bekannt als libarchive ). Das Erkennen des erforderlichen Komprimierungsalgorithmus ist trivial, indem die ersten Bytes der Eingabedatei überprüft werden.Ob Sie zufällig die eine oder die andere dieser Implementierungen verwenden, hängt weitgehend davon ab, welches Betriebssystem Sie verwenden: Linux-basierte Systeme oder BSD-Systeme (einschließlich OSX).
Ich habe auf meiner Seite Details zur Einführung dieser Funktionen in Bezug auf Teer und Portabilität zusammengefasst .
quelle
Star führte eine automatische Komprimierungserkennung und eine automatische Dekomprimierung ein. vor 20 Jahren.
In diesen Tagen haben einige andere Teerimplementierungen wie gtar die Idee kopiert.
Übrigens: star versteht die magischen Zahlen im komprimierten Stream, um die richtige Dekomprimierungsmethode zu ermitteln. Beachten Sie auch, dass gtar als fehlgeschlagen gemeldet wurde, wenn ein komprimiertes Archiv
stdin
aus einer benannten Datei gelesen wird .quelle