Perché le persone usano i tarball?


90

Essendo principalmente uno sviluppatore Windows, forse mi manca qualcosa di culturale nella comunità Linux, ma mi ha sempre confuso.

Quando si scarica qualcosa, i file vengono prima inseriti in un .tararchivio e poi compressi . Perché il processo in due fasi? La compressione non raggiunge il raggruppamento dei file? C'è qualche altro vantaggio di cui non sono a conoscenza?


3
Di solito combini la compressione e il raggruppamento di file in un unico comando. tar -zcf file.tar.gz alcuni nomi di file
Juha Syrjälä

1
Nessuno ha detto che il trasferimento di 1000000 file con dimensione 1 byte è più costoso del trasferimento di 1 file con dimensione 1000000 byte.
Milo LaMar

Risposte:


137

bzipe gziplavorare su file singoli, non su gruppi di file. Plain old zip(and pkzip) operano su gruppi di file e hanno il concetto di archivio integrato.

La filosofia * nix è uno dei piccoli strumenti che svolgono molto bene lavori specifici e possono essere concatenati insieme. Ecco perché ci sono due strumenti qui che hanno compiti specifici e sono progettati per adattarsi bene insieme. Significa, inoltre, è possibile utilizzare tar per i file di gruppo e poi si dispone di una scelta di uno strumento di compressione ( bzip, gzip, ecc).


2
Ho risposto più velocemente e un po 'meglio di me - immagino che tornerò al lavoro!
Harper Shelby

9
Ti ho battuto di 4 minuti, e questa è un'eternità nel tempo di overflow dello stack. :-)
Stewart Johnson,

1
Vale la pena notare che sia tar che gzip sono utili da soli, motivo per cui sono separati. Con un uso intelligente dei tubi, una volta ho spostato una cartella da un computer a un altro catramando, zippando e collegando SSH, quindi decomprimendo e annullando la legatura sulla destinazione. Un comando, nessun file temporaneo.
rmeador

1
Si potrebbe anche dire che si attengono a ciò che è stato dimostrato di funzionare bene, piuttosto che cambiare le cose e rompere la compatibilità. .tar.gz può essere eseguito in un unico passaggio indipendentemente dai cosiddetti strumenti e tecniche moderni (si prega di registrare WinZip).
JeeBee

2
Non posso credere che nessuno abbia modificato la domanda o lasciato un commento menzionando l'intero punto (imo) dell'uso degli tararchivi: supporto per i permessi del filesystem Linux . Cosa succederebbe se scaricaste un pacchetto Debian, il vostro gestore di pacchetti lo installasse, ma nessuno degli eseguibili fosse eseguibile? Questo è il vero motivo per cui tutti usano tarball ...;)
JamesTheAwesomeDude

28

Una distinzione importante è nella natura dei due tipi di archivi.

I file TAR sono poco più che una concatenazione del contenuto del file con alcune intestazioni, mentre gzip e bzip2 sono compressori di flussi che, nei tarball, vengono applicati all'intera concatenazione.

I file ZIP sono una concatenazione di file compressi individualmente, con alcune intestazioni. In realtà, l'algoritmo DEFLATE è utilizzato sia da zip che da gzip e, con opportuni aggiustamenti binari, potresti prendere il payload di un flusso gzip e metterlo in un file zip con intestazione e voci di dizionario appropriate.

Ciò significa che i due diversi tipi di archivio hanno diversi compromessi. Per grandi raccolte di piccoli file, TAR seguito da un compressore di flusso normalmente darà luogo a un rapporto di compressione più alto di ZIP perché il compressore di flusso avrà più dati da cui costruire le sue frequenze di dizionario e quindi sarà in grado di spremere informazioni più ridondanti. D'altra parte, un errore (preservazione della lunghezza del file) in un file ZIP danneggerà solo i file i cui dati compressi sono stati interessati. Normalmente, i compressori di flusso non possono recuperare in modo significativo da errori durante il flusso. Pertanto, i file ZIP sono più resistenti alla corruzione, poiché parte dell'archivio sarà ancora accessibile.


Grazie per la distinzione tra zip e tar + gzip!
Luca

1
+1 per la distinzione tra "compressione di un file aggregato" e "aggregazione di file compressi".
Jesse Chisholm

La ragione per cui tar consente migliori rapporti di compressione e zip è più resiliente d'altra parte è spiegata dal fatto che tar è una sorta di compressione solida mentre zip non è solida.
gaborous

@Barry, quindi in conclusione chi vince? (supponendo che stiamo utilizzando sistemi operativi moderni)
Pacerier

@Pacerier Non credo ci sia alcuna vincita. Le zip sono migliori per l'accesso casuale e per l'utilizzo da parte di persone su Windows. I tarball hanno una maggiore compatibilità immediata su Linux e Unix. I tarball hanno una compressione leggermente superiore ma è necessario decomprimere l'intera cosa per accedere a qualsiasi cosa. Entrambi supportano algoritmi di compressione arbitrari, ma è molto più facile combinarli con i tarball. A seconda dell'obiettivo, entrambi potrebbero essere migliori.
Barry Kelly

26

È strano che nessun altro abbia menzionato che le versioni moderne di GNU tarti consentono di comprimere mentre stai raggruppando:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

Puoi anche usare il compressore di tua scelta a condizione che supporti le opzioni ' -c' (to stdout, o from stdin) e ' -d' (decompress):

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

Ciò consentirebbe di specificare qualsiasi compressore alternativo.

[ Aggiunto : se si stanno estraendo da gzipo bzip2file compressi, GNU li tarrileva automaticamente ed esegue il programma appropriato. Cioè, puoi usare:

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

e questi saranno gestiti correttamente. Se utilizzi un compressore non standard, devi specificarlo quando esegui l'estrazione.]

Il motivo della separazione è, come nella risposta scelta, la separazione dei compiti. Tra le altre cose, significa che le persone potevano usare il cpioprogramma ' ' per impacchettare i file (invece di tar) e quindi utilizzare il compressore preferito (una volta, il compressore preferito era pack, in seguito lo era compress(che era molto più efficace di pack), e quindi gzipche girava intorno a entrambi i suoi predecessori, ed è completamente competitivo con zip(che è stato portato su Unix, ma non è nativo lì), e ora bzip2che, nella mia esperienza, di solito ha un vantaggio del 10-20% gzip.

[ Aggiunto : qualcuno ha notato nella sua risposta che cpioha convenzioni divertenti. È vero, ma fino a quando GNU non ha tarottenuto le opzioni pertinenti (' -T -'), cpioera il comando migliore quando non si desiderava archiviare tutto ciò che si trovava sotto una determinata directory: si poteva effettivamente scegliere esattamente quali file erano archiviati. Il rovescio della medaglia cpioè che non solo si poteva scegliere i file - si doveva scegliere loro. C'è ancora un posto dove i cpiopunteggi; può eseguire una copia in situ da una gerarchia di directory a un'altra senza alcuna memoria intermedia:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

Per inciso, l' -depthopzione " " su findè importante in questo contesto: copia il contenuto delle directory prima di impostare i permessi sulle directory stesse. Quando ho controllato il comando prima di inserire l'aggiunta a questa risposta, ho copiato alcune directory di sola lettura (autorizzazione 555); quando sono andato a cancellare la copia, ho dovuto rilassare i permessi sulle directory prima che " rm -fr /new/place" potesse finire. Senza l' -depthopzione, il cpiocomando sarebbe fallito. L'ho ricordato solo quando sono andato a pulire - la formula citata è quella automatica per me (principalmente in virtù di molte ripetizioni nel corso di molti anni). ]


Un formato ZIP espanso potrebbe ospitare compressori di flusso plug-in tanto quanto TAR, ma senza un protocollo IPC adatto sarebbe probabilmente più lento a causa dell'eccessiva esecuzione di sottoprocessi.
Barry Kelly,

il mio comando goto: tar -xfvz tarpkg.tar.gz (sostituisci la z con aj per gli archivi compressi bz2)
Bryan Rehbein

1
@ Redbeard: tar rileva automaticamente gzip e bzip2 all'estrazione - per la creazione, devi dirgli cosa fare, ma io uso solo -xf (o -xvf) e il nome del file tar.
Jonathan Leffler

15

La cosa divertente è che puoi ottenere comportamenti non previsti dai creatori di tare gzip. Ad esempio, non puoi solo gzipare un file tar, puoi anche tar gzip file, per produrre un files.gz.tar(questo tecnicamente sarebbe più vicino al modo in cui pkzipfunziona). Oppure puoi mettere un altro programma nella pipeline, ad esempio un po 'di crittografia, e puoi scegliere un ordine arbitrario di tarring, gzipping e crittografia. Chiunque abbia scritto il programma di crittografia non deve avere la minima idea di come verrebbe utilizzato il suo programma, tutto ciò che deve fare è leggere dallo standard input e scrivere sullo standard output.


Quando si genera il file, ricordarsi di crittografare dopo la compressione, non prima, perché l'output della crittografia sembra casuale ed è difficile da comprimere.
Jonathan Leffler

8

Nel mondo Unix, la maggior parte delle applicazioni sono progettate per fare una cosa, e farla bene. Le utility zip più popolari in Unix, gzip e bzip2 eseguono solo la compressione dei file. tar esegue la concatenazione dei file. Il piping dell'output di tar in un'utilità di compressione fa ciò che è necessario, senza aggiungere eccessiva complessità a nessuno dei due software.


7

Un altro motivo per cui è così diffuso è che tar e gzip si trovano su quasi tutta la base di installazione * NIX disponibile. Credo che questo sia probabilmente l'unico motivo principale. Questo è anche il motivo per cui i file zip sono estremamente diffusi su Windows, perché il supporto è integrato, indipendentemente dalle routine superiori in RAR o 7z.

GNU tar ti consente anche di creare / estrarre questi file da un comando (un passaggio):

  • Crea un archivio:
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • Estrai un archivio: (la parte -C è facoltativa, il valore predefinito è la directory corrente)

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

Questi sono ciò che mi sono impegnato a ricordare dai miei molti anni su Linux e recentemente su Nexenta (OpenSolaris).


3
In realtà, è il contrario: zip è costruito in Windows ora perché era prevalente in DOS e nelle prime versioni di Windows.
Christian Lescuyer

Mi piace usare RAR su Windows, tar.bz2 su Linux
Osama Al-Maadeed

Potresti notare la strana analisi dell'opzione (non compatibile con getopt ()) e il trattino è facoltativo perché tar precede le convenzioni standard delle opzioni di comando Unix.
Jonathan Leffler

5

Penso che stavi cercando più contesto storico per questo. Lo zip originale era per un singolo file. Tar viene utilizzato per inserire più file in un unico file. Quindi catramare e zippare è il processo in due fasi. Nessuno sa perché sia ​​ancora così dominante oggi.

Da wikipedia per Tar_ (file_format)

In informatica, tar (derivato dall'archivio su nastro) è sia un formato di file (sotto forma di un tipo di flusso di bit di archivio) sia il nome del programma utilizzato per gestire tali file. Il formato è stato standardizzato da POSIX.1-1988 e successivamente POSIX.1-2001. Sviluppato inizialmente come formato raw, utilizzato per il backup su nastro e altri dispositivi di accesso sequenziale a scopo di backup, è ora comunemente utilizzato per raccogliere raccolte di file in un file più grande, per la distribuzione o l'archiviazione, preservando le informazioni del file system come utente e gruppo autorizzazioni, date e strutture di directory.


4

tar è UNIX come UNIX è tar

A mio parere il motivo dell'uso ancoratar oggi è che è uno dei casi (probabilmente rari) in cui l'approccio UNIX lo ha reso perfettamente perfetto sin dall'inizio.

Dando uno sguardo più da vicino alle fasi coinvolte nella creazione degli archivi, spero che sarai d'accordo sul fatto che il modo in cui avviene la separazione dei diversi compiti qui è la filosofia UNIX al suo meglio:

  • uno strumento ( tarper dargli un nome qui) specializzato nel trasformare qualsiasi selezione di file, directory e collegamenti simbolici inclusi tutti i metadati rilevanti come timestamp, proprietari e permessi in un flusso di byte.

  • e solo un altro strumento arbitrariamente intercambiabile ( gzip bz2 xzper citare solo alcune opzioni) che trasforma qualsiasi flusso di input di byte in un altro flusso di output (si spera) più piccolo.

L'utilizzo di tale approccio offre un paio di vantaggi sia all'utente che allo sviluppatore:

  • estensibilità Permette di accoppiarsi tarcon qualsiasi algoritmo di compressione già esistente o qualsiasi algoritmo di compressione ancora da sviluppare senza dover modificare nulla sul funzionamento interno del tartutto.

    Non appena esce il nuovissimo "hyper-zip-utra" o strumento di compressione whater, sei già pronto per usarlo abbracciando il tuo nuovo servitore con tutta la potenza di tar.

  • stabilità tar è stata ampiamente utilizzata fin dai primi anni '80, testata ed eseguita su numerosi sistemi operativi e macchine.

    Prevenire la necessità di reinventare la ruota nell'implementazione di proprietà di archiviazione, autorizzazioni, timestamp e simili più e più volte per ogni nuovo strumento di archiviazione non solo consente di risparmiare molto tempo (altrimenti inutilmente speso) nello sviluppo, ma garantisce anche la stessa affidabilità per ogni nuova applicazione.

  • coerenza L'interfaccia utente rimane sempre la stessa.

    Non c'è bisogno di ricordare che per ripristinare i permessi usando lo strumento A devi passare l'opzione --i-hope-you-rember-this-onee usando lo strumento B devi usare--this-time-its-another-one mentre usi lo strumento C è `--hope-you-didnt-try-with-tool-as-switch.

    Considerando che utilizzando lo strumento D avresti davvero sbagliato se non lo avessi usato --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.


3

il catrame è popolare principalmente per ragioni storiche. Ci sono diverse alternative prontamente disponibili. Alcuni di loro sono in circolazione da quasi quanto tar, ma non potrebbero superare tar in popolarità per diversi motivi.

  • cpio (sintassi aliena; teoricamente più coerente, ma alle persone piace quello che sanno, prevale tar)
  • ar (popolare molto tempo fa, ora utilizzato per comprimere i file di libreria)
  • shar (script di shell autoestraenti, aveva tutti i tipi di problemi; era popolare, mai meno)
  • zip (a causa di problemi di licenza non era prontamente disponibile su molti Unix)

Uno dei principali vantaggi (e svantaggi) di tar è che non ha né intestazioni di file né directory centrali dei contenuti. Per molti anni quindi non ha mai sofferto di limitazioni nella dimensione dei file (fino a questo decennio in cui un limite di 8 Gb sui file all'interno dell'archivio è diventato un problema, risolto anni fa).

Apparentemente l'unico aspetto negativo di tar.gz (o ar.Z per quella materia), che è che devi decomprimere l'intero archivio per estrarre singoli file ed elencare i contenuti dell'archivio, non ferire mai le persone abbastanza da renderle difettose da tar in numeri significativi .


Le vecchie versioni di tar non avevano informazioni di intestazione; le nuove versioni (compatibili con POSIX, USTAR) di tar (es. GNU tar) lo fanno. Il comando "file" lo capisce.
Jonathan Leffler

2

gzip e bzip2 sono semplicemente un compressore, non un software di archiviazione. Da qui la combinazione. Hai bisogno del software tar per raggruppare tutti i file.

ZIP stesso e anche RAR sono una combinazione dei due processi.


2

Di solito nel mondo * nux, i bundle di file sono distribuiti come tarball e quindi opzionalmente compressi con gzip. Gzip è un semplice programma di compressione di file che non fa il file bundling che fa tar o zip.

Un tempo, zip non gestiva correttamente alcune delle cose che i file system Unix tar e unix consideravano normali, come collegamenti simbolici, file con maiuscole e minuscole, ecc. Non so se è cambiato, ma è per questo che usiamo tar.


1
* nux - Linux, Unux, Solarnux?
mackenir

1
@mackenir - non dimenticare POSUX. :-)
Paul Tomblin

1
@mackenir - O dovrebbe essere POSNUX?
Paul Tomblin,

1

Tar = Raggruppa i file in 1 file

GZip = Comprimi il file

Hanno diviso il processo in 2. Questo è tutto.

Nell'ambiente Windows potresti essere più abituato a usare WinZip o WinRar che fanno uno Zip. Il processo Zip di questi software raggruppa il file e lo zippare ma semplicemente non vedi quel processo.


3
Non è la spiegazione migliore, dato che i file "zip" a cui è abituato l'OP in Windows incorporano già il raggruppamento.
Gareth

1

Per lo stesso motivo per cui gli utenti Mac amano le immagini del disco: sono un modo davvero conveniente per archiviare le cose e poi passarle, caricarle / scaricarle o inviarle via e-mail, ecc.

E più facile da usare e più portatile delle zip IMHO.


1

Nei miei giorni con Altos-XENIX (1982) abbiamo iniziato a usare tar (archiviatore di nastri) per estrarre file da 5 1/4 floppy o nastri in streaming e per copiarli su questi supporti. La sua funzionalità è molto simile ai comandi BACKUP.EXE e RESTORE.EXE in DOS 5.0 e 6.22 come supplementi, consentendo di estendere più supporti se non è possibile inserirne uno solo. Lo svantaggio era che se uno dei più supporti aveva problemi, l'intera cosa era inutile. tar e dd provengono da UNIX SYstem III ed è rimasta un'utilità di rilascio standard con un sistema operativo simile a UNIX, probabilmente per motivi di compatibilità con le versioni precedenti.


0

Tar non è solo un formato di file, ma è un formato di nastro. I nastri memorizzano i dati bit per bit. Ogni implementazione dello storage era personalizzata. Tar era il metodo con cui si potevano estrarre i dati da un disco e memorizzarli su nastro in modo che altre persone potessero recuperarli senza il tuo programma personalizzato.

Successivamente, sono arrivati ​​i programmi di compressione e * nix aveva ancora un solo metodo per creare un singolo file che conteneva più file.

Credo che sia solo inerzia che è continuata con la tendenza tar.gz. Pkzip ha iniziato con la compressione e l'archiviazione in un colpo solo, ma poi i sistemi DOS in genere non avevano unità a nastro collegate!

Da wikipedia per Tar_ (file_format)

In informatica, tar (derivato dall'archivio su nastro) è sia un formato di file (sotto forma di un tipo di flusso di bit di archivio) sia il nome del programma utilizzato per gestire tali file. Il formato è stato standardizzato da POSIX.1-1988 e successivamente POSIX.1-2001. Sviluppato inizialmente come formato raw, utilizzato per il backup su nastro e altri dispositivi di accesso sequenziale a scopo di backup, è ora comunemente utilizzato per raccogliere raccolte di file in un file più grande, per la distribuzione o l'archiviazione, preservando le informazioni del file system come utente e gruppo autorizzazioni, date e strutture di directory.


A rigor di termini tar è un formato di file - è solo che su unix i nastri sono solo un altro file.
Martin Beckett,

In realtà, all'inizio tar non era un formato di file. I nastri non avevano file system, quindi tar è stato creato come patch per non avere un file system.
Kieveli

0

Come sviluppatore Windows è comprensibile come i tarball sembrino strani. La parola tarsta per Tape Archive. Pensa ai registratori a bobina.

Nel mondo Windows vengono generalmente installati programmi con setup.exeo install.exeche funzionano tutti i tipi di magie nel registro, creando directory e installando file .dll(Dynamic Link Library).

In Linux, Ubuntu in particolare per esperienza personale, i gestori di pacchetti si occupano di prendere un'applicazione e installarla la maggior parte del tempo . In Ubuntu lo sviluppatore crea un pacchetto che termina con .deb(Debian, su cui si basa Ubuntu). La sintassi di base per installare a .debè:

sudo apt install <package_name>

Sebbene questo sia relativamente semplice per un utente, è molto lavoro per gli sviluppatori creare un file .deb pacchetto e associare PPA.

Un metodo più semplice per gli sviluppatori è creare un tarball. Quindi l'onere dell'installazione è condiviso dall'utente finale. Essi devono:

  • scarica il tarball (di solito termina con .tar.gz ).
  • decomprimere il codice sorgente in una directory.
  • compilare il codice sorgente (inaudito nel mondo Windows for Profit).
  • si spera di annotare ciò che hanno fatto nel caso in cui debbano ripetere in futuro perché non esiste un aptdatabase (si pensi all'elenco dei programmi installati di Windows) di cui è possibile eseguire il backup.

Poiché un'altra risposta afferma già a un'altra domanda che hai posto, PUOI creare un tarball e comprimere i dati allo stesso tempo. NON è richiesto un processo in due passaggi.

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.