gzip senza catrame? Perché sono usati insieme?


60

Perché tar e gzip sono quasi sempre usati insieme e non solo gzip? C'è qualche vantaggio in questo metodo?

Risposte:


72

TAR crea un singolo file archiviato da molti file, ma non li comprime.

Dettagli formato

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.

Formato del file

... 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.


12
Non esiste un file "tgz". È un tar.gz. Il compito di gzip è comprimere o decomprimere il suo contenuto (in questo caso, un archivio tar.) Quindi l'archiviazione con tar. È la tipica filosofia di pipelining Unix e quindi quasi unica.
luis.espinal

5
No, .tar.gz non è unico: .tar.bz2, .cpio.gz, ecc. Funzionano allo stesso modo.
user46971

3
@ user36310 So cosa intendi in linea di principio, ma in pratica gli strumenti ti consentono di estrarre un singolo file. 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.
Rich Homolka

4
Rendi "molto lavoro extra" se il file si trova alla fine di un archivio di grandi dimensioni. Chiaramente, se hai bisogno di un accesso casuale, zip / rar / xar / 7z / lzh / arj / cab / sit ecc. Sono formati superiori.
LaC

3
Per essere precisi, un .tar.*archivio compresso è sempre "solido", vale a dire. è costituito da un singolo flusso compresso. Un .ziparchivio 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. .7zgli archivi possono essere solidi, non solidi o avere blocchi solidi.
Daniel B,

17

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.


12

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.


1
Questa filosofia UNIX è bella, va bene, ma sto osservando che non riesce a creare archivi non solidi. (L'estrazione di un singolo file da un tar.gz da 1 GB non dovrebbe essere un problema, e da quello che ho capito qui, ZIP è praticamente superiore a tar.gz ... giusto?)
Mehrdad

@Mehrad - Innanzitutto , cos'è un archivio non solido? Come attribuito a Voltaire, "Se vuoi conversare con me, prima devi definire i tuoi termini". . In secondo luogo , sì, l'architettura di pipe e filtri non è adeguata in casi specifici, proprio come qualsiasi altra architettura, indipendentemente dalla sua bellezza. Questo è un dato con un minimo di ingegneria, e non è l'argomento che viene fatto. In terzo luogo , zip è superiore a gzip e tar, ma non è quello che hai chiesto. Hai chiesto perché zip e tar funzionano nel modo in cui funzionano e se ci sono dei vantaggi e ti è stata data una risposta tecnica.
luis.espinal

@Mehrad - Inoltre, non so che tipo di problemi incontri quando decomprimi | untar un file tar.gz 1gig. L'ho fatto molte volte, fino a 2 GB con installazioni precedenti di gzip (e fino a 4 GB con versioni più recenti di gzip). Se lo stai facendo tramite il cavo o su un supporto NFS, allora duh! Incontrerai problemi di prestazioni simili a quelli della normale zip. Diamine, ho persino smontato da una pipe a un processo remoto sputando input gzip in un socket. Prova con zip. Per ogni problema, utilizzare lo strumento appropriato (sia tar | gz o zip.)
luis.espinal

8

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.


3
Giusto ... I file ZIP mettono tutte le informazioni sul file in un'intestazione unificata, quindi tutto il contenuto del file ... ciò rende impossibile aggiungere più file a un file ZIP ... devi riscrivere l'intero file ... con Formato TAR, l'intestazione per ogni file è separata, quindi puoi facilmente aggiungere altri file senza riscrivere l'intero nastro
JoelFan

5

Tradizionalmente, i sistemi Unix usato un programma per eseguire un compito per la filosofia Unix : tarera solo un mezzo per comprimere più file in un singolo file, originariamente per il backup nastro (quindi tar, t ape ar cipollina). tarnon fornisce compressione; l'archivio compresso risultante è tipicamente compresso con qualche altro programma quale gzip, bzip2o xz. Ai vecchi tempi, avrebbero usato il compresscomando 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' tarutilità 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 .ziparchivi 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 tarcongiuntamente a un'utilità di compressione separata è una questione di tradizione e compatibilità; inoltre, .7ze .zipnon supportano i metadati del filesystem Unix come le autorizzazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.