Risposte:
TAR crea un singolo file archiviato da molti file, ma non li comprime.
Un file tar è la concatenazione di uno o più file. Ogni file è preceduto da un record di intestazione da 512 byte. I dati del file vengono scritti inalterati, tranne per il fatto che la sua lunghezza viene arrotondata per eccesso a un multiplo di 512 byte e lo spazio aggiuntivo viene riempito con zero. La fine di un archivio è contrassegnata da almeno due record consecutivi a riempimento zero.
GZIP comprime un singolo file in un altro singolo file, ma non crea archivi.
... Sebbene il suo formato di file consenta anche la concatenazione di più flussi di questo tipo (i file compressi vengono semplicemente decompressi concatenati come se fossero originariamente un file), gzip viene normalmente utilizzato per comprimere solo singoli file. [4] Gli archivi compressi vengono in genere creati assemblando raccolte di file in un unico archivio tar e quindi comprimendo tale archivio con gzip.
tar -xzvf tarball.tar.gz single/file.txt
. Dietro le quinte deve fare un po 'di lavoro extra ma per le apparenze estrae un singolo file.
.tar.*
archivio compresso è sempre "solido", vale a dire. è costituito da un singolo flusso compresso. Un .zip
archivio d'altra parte non è affatto solido, l'algoritmo di compressione viene riavviato per ogni file. Sacrifica l'efficienza di compressione per accelerare l'accesso casuale. .7z
gli archivi possono essere solidi, non solidi o avere blocchi solidi.
Gzip / Bzip2 sono compressori di flusso. Comprimono un flusso di dati in qualcosa di più piccolo. Potrebbero essere utilizzati su singoli file, ma non su gruppi di file da soli.
Tar d'altra parte ha la capacità di trasformare un elenco di file, con percorsi, autorizzazioni e informazioni sulla proprietà, in un singolo flusso continuo - e viceversa.
Ecco perché, per archiviare i file (e se uno ha bisogno anche della compressione), di solito si usa tar + qualche metodo di compressione.
Tar ha il compito di fare una e una sola cosa bene: (dis) l'archiviazione in (fuori da) un singolo file di archivio. Di cosa? Di una sola cosa: un insieme di file.
Gzip ha il compito di fare una e una sola cosa bene: (non) comprimere. Di cosa? Di una cosa e una cosa sola: un singolo file di qualsiasi tipo ... e che include un file creato con tar.
Risale alla filosofia UNIX di pipelining, l'architettura "pipe and filters" sottostante; il trattamento di tutto come un file e il valido obiettivo architettonico di "una cosa-fa-una-cosa-solo-e-fa-bene" (che si traduce in una sorta di plug-n-play molto elegante e semplice .)
Nella sua semplicità, è quasi algebrico in natura (un obiettivo importante nella progettazione di sistemi). E non è un'impresa facile.
In molti modi (e non senza i suoi difetti), questo è quasi un apice in termini di componibilità, modularità, accoppiamento lento e elevata coesione. Se capisci questi quattro (e intendo davvero capire ), capisci, sarà ovvio perché tar e gzip funzionano così in coppia.
Innanzitutto, TAR non è stato creato per creare archivi di file . È Tape ARchiver . Il suo compito è quello di scrivere o caricare in un archivio da / su nastro.
L' opzione -f consente di utilizzare un file come "nastro virtuale", che può quindi essere compresso da un altro programma. In effetti, tale compressione si verifica anche sui nastri del mondo reale.
Naturalmente, in questo caso conta anche la filosofia di utilizzare un programma per farlo bene, ma ci si potrebbe perdere il motivo per cui gli archivi TAR sono strutturati come un flusso anziché come directory di contenuti + contenuti.
Tradizionalmente, i sistemi Unix usato un programma per eseguire un compito per la filosofia Unix : tar
era solo un mezzo per comprimere più file in un singolo file, originariamente per il backup nastro (quindi tar
, t ape ar cipollina). tar
non fornisce compressione; l'archivio compresso risultante è tipicamente compresso con qualche altro programma quale gzip
, bzip2
o xz
. Ai vecchi tempi, avrebbero usato il compress
comando per fare questo; gli algoritmi di compressione più recenti sono molto più efficaci di così.
L'approccio altamente modularizzato dettato dalla filosofia Unix significa che ogni programma può essere utilizzato individualmente come appropriato, o combinato per eseguire attività più complesse, inclusa la creazione di archivi compressi come descritto qui. Per questo tipo di attività, semplifica anche lo scambio di singoli strumenti secondo necessità; cambieresti semplicemente il programma di compressione per usare un diverso algoritmo di compressione, senza dover sostituire l' tar
utilità stessa.
Questo approccio modulare non è privo di svantaggi. Come menzionato nei commenti ad altre risposte, un formato di archivio compresso dedicato come .zip
è in grado di gestire meglio l'estrazione di singoli file; i tarball compressi devono essere decompressi quasi nella loro interezza per estrarre i file vicino alla fine dell'archivio, mentre gli .zip
archivi consentono l'accesso casuale al loro contenuto. (Alcuni formati più recenti, come .7z
, supportano archivi solidi e non solidi, nonché blocchi solidi di dimensioni variabili in archivi più grandi.) L'uso continuo di tar
congiuntamente a un'utilità di compressione separata è una questione di tradizione e compatibilità; inoltre, .7z
e .zip
non supportano i metadati del filesystem Unix come le autorizzazioni.