Domanda

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

Quando si scarica qualcosa che i file vengono prima messi in un archivio .tar , quindi zippato . Perché il processo in due passaggi? zippare non raggiunge il raggruppamento dei file? C'è qualche altro vantaggio di cui non sono a conoscenza?

È stato utile?

Soluzione

bzip e gzip funzionano su singoli file, non su gruppi di file. I semplici zip (e pkzip ) funzionano su gruppi di file e hanno il concetto di archivio integrato.

La filosofia * nix è uno dei piccoli strumenti che fanno molto bene lavori specifici e possono essere concatenati. Ecco perché ci sono due strumenti che hanno compiti specifici e sono progettati per adattarsi bene insieme. Significa anche che puoi usare tar per raggruppare i file e quindi puoi scegliere uno strumento di compressione ( bzip , gzip , ecc.)

Altri suggerimenti

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 stream che, in 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 un'adeguata regolazione binaria, potresti prendere il payload di un flusso gzip e inserirlo in un file zip con intestazioni e voci di dizionario appropriate.

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

È strano che nessun altro abbia menzionato che le versioni moderne di GNU tar ti 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 ' -c ' (su stdout o da stdin) e ' -d ' (decomprimi) opzioni:

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

Ciò ti consentirebbe di specificare qualsiasi compressore alternativo.

[ Aggiunto : se stai estraendo da gzip o bzip2 file compressi, GNU tar rileva automaticamente questi 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 si utilizza un compressore non standard, è necessario specificarlo quando si esegue l'estrazione.]

Il motivo della separazione è, come nella risposta selezionata, la separazione dei doveri. Tra le altre cose, significa che le persone potrebbero usare il programma ' cpio ' per impacchettare i file (invece di tar ) e quindi usare il compressore preferito (c'era una volta , il compressore preferito era pack , in seguito era compress (che era molto più efficace di pack ), quindi gzip che correva attorno a entrambi i suoi predecessori ed è completamente competitivo con zip (che è stato portato su Unix, ma non è nativo lì), e ora bzip2 che, nella mia esperienza, di solito ha un vantaggio del 10-20% rispetto a gzip .

[ Aggiunto : qualcuno ha notato nella sua risposta che cpio ha convenzioni divertenti. È vero, ma fino a quando GNU tar non ha ottenuto le opzioni pertinenti (' -T - '), cpio era il comando migliore quando non volevi per archiviare tutto ciò che si trovava al di sotto di una determinata directory, in realtà è possibile scegliere esattamente quali file sono stati archiviati. Il rovescio della medaglia di cpio era che non solo potevi scegliere i file, ma dovevi sceglierli. C'è ancora un posto dove punteggi cpio ; 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'opzione ' -depth ' su find è importante in questo contesto: copia il contenuto delle directory prima di impostare le autorizzazioni 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'opzione -depth , il comando cpio non sarebbe riuscito. Me lo sono ricordato solo quando sono andato a fare la pulizia - la formula citata è quella automatica per me (principalmente in virtù di molte ripetizioni nel corso di molti anni). ]

La cosa divertente è che puoi ottenere comportamenti non previsti dai creatori di tar e gzip . Ad esempio, non puoi solo gzip un file tar, ma puoi anche tarare i file gzip, per produrre un files.gz.tar (questo sarebbe tecnicamente più vicino al modo pkzip funziona). Oppure puoi mettere un altro programma in cantiere, 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 verrà utilizzato il suo programma, tutto ciò che deve fare è leggere dallo standard input e scrivere nello standard output.

Nel mondo Unix, la maggior parte delle applicazioni sono progettate per fare una cosa e farlo 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.

Un altro motivo per cui è così prevalente è che tar e gzip si trovano su quasi l'intera base di installazione * NIX là fuori. Credo che questa sia probabilmente la ragione più grande. È anche il motivo per cui i file zip sono estremamente diffusi su Windows, poiché il supporto è integrato, indipendentemente dalle routine superiori in RAR o 7z.

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

  • 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

Questo è ciò che mi sono impegnato nella memoria dai miei molti anni su Linux e recentemente su Nexenta (OpenSolaris).

Penso che tu stia cercando più contesto storico per questo. Lo zip originale era per un singolo file. Tar viene utilizzato per posizionare più file in un singolo file. Pertanto, il tarring e zippare è il processo in due fasi. Perché è ancora così dominante oggi è l'ipotesi di chiunque.

Da wikipedia per Tar_ (file_format)

  

Nell'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. Inizialmente sviluppato come formato non elaborato, utilizzato per il backup su nastro e altri dispositivi ad accesso sequenziale a fini di backup, ora viene 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.

tar è UNIX come UNIX è tar

Secondo me il motivo per cui ancora usando tar oggi è che è uno dei casi (probabilmente rari) in cui l'approccio UNIX lo ha reso perfettamente giusto fin dall'inizio a cominciare.

Osservando più da vicino le fasi coinvolte nella creazione degli archivi, spero che concorderai sul fatto che il modo in cui avviene la separazione dei diversi compiti qui è filosofia UNIX al suo meglio:

  • uno strumento ( tar per dargli un nome qui) specializzato nella trasformazione di qualsiasi selezione di file, directory e collegamenti simbolici inclusi tutti metadati pertinenti come timestamp, proprietari e autorizzazioni in un flusso di byte.

  • e solo un altro strumento arbitrariamente intercambiabile ( gzip bz2 xz per nominare 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 e approccio offre tutta una serie di vantaggi sia all'utente che allo sviluppatore:

  • estensibilità Permettere di accoppiare tar con qualsiasi algoritmo di compressione già esistente o qualsiasi algoritmo di compressione ancora da sviluppare senza senza cambiare qualsiasi cosa sul funzionamento interno di tar .

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

  • stabilità tar è stato ampiamente utilizzato dai primi anni '80 e testato su numerosi sistemi operativi e macchine.

    Prevenire la necessità di reinventare la ruota nell'implementazione della memorizzazione di proprietà, autorizzazioni, timestamp e simili ripetutamente per ogni nuova archiviazione lo strumento 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 è necessario ricordare che per ripristinare i permessi usando lo strumento A devi passare l'opzione --i-hope-you-rember-this-one e usando lo strumento B devi usare - this-time-its-another-one mentre si utilizza lo strumento C è `--hope-you-didnt-try-with-tool-as-switch.

    Considerando che usando lo strumento D lo avresti davvero incasinato se non avessi usato --se-avessi-usato-lo-strumento-bs-cambi-i-tuoi-file-sarebbe-stato- -ora cancellato .

tar è popolare principalmente per motivi storici. Esistono diverse alternative prontamente disponibili. Alcuni di essi sono in circolazione quasi quanto il catrame, ma non sono riusciti a superare la popolarità del catrame per diversi motivi.

  • cpio (sintassi aliena; teoricamente più coerente, ma alla gente piace quello che sanno, ha prevalso il catrame)
  • ar (popolare molto tempo fa, ora utilizzato per impacchettare i file della libreria)
  • shar (script shell autoestraenti, presentava ogni sorta di problema; era popolare sempre meno)
  • zip (a causa di problemi di licenza non era prontamente disponibile su molti Unices)

Un grande vantaggio (e svantaggio) di tar è che non ha né intestazione del file, né directory centrale dei contenuti. Per molti anni quindi non ha mai sofferto di limiti nella dimensione dei file (fino a questo decennio in cui un limite di 8 Gb per i 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 e elencare i contenuti dell'archivio, non ferire mai abbastanza le persone da renderle difettose da tar in numero significativo.

gzip e bzip2 è semplicemente un compressore, non un software di archiviazione. Quindi, la combinazione. È necessario il software tar per raggruppare tutti i file.

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

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

Una volta, zip non gestiva correttamente alcune delle cose che Unix tar e unix file system consideravano normali, come collegamenti simbolici, file di casi misti, ecc. Non so se è cambiato, ma è per questo che usiamo tar.

Tar = Raggruppa i file in 1 file

GZip = Comprimi il file

Hanno diviso il processo in 2. Ecco fatto.

Nell'ambiente Windows che potresti essere più utilizzato per utilizzare WinZip o WinRar che eseguono una zip. Il processo Zip di questi software raggruppa il file e zippare ma semplicemente non lo vedi.

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

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

Nei miei giorni di Altos-XENIX (1982) abbiamo iniziato a usare tar (archiviatore di nastri) per estrarre file da 5 1/4 floppy o nastro in streaming, nonché copiarli su questi supporti. La sua funzionalità è molto simile ai comandi BACKUP.EXE e RESTORE.EXE in DOS 5.0 e 6.22 come integratori, consentendo di estendere più supporti se non è possibile inserirli in uno solo. Lo svantaggio era che se uno dei vari media 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 ragioni di retrocompatibilità.

Tar non è solo un formato di file, ma è un formato di nastro. I nastri memorizzano i dati bit per bit. Ogni implementazione di archiviazione era personalizzata. Tar è stato il metodo con cui è possibile estrarre i dati da un disco e archiviarli su nastro in modo che altre persone possano recuperarli senza il proprio programma personalizzato.

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

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

Da Wikipedia per Tar_ (file_format)

  

Nell'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. Inizialmente sviluppato come formato non elaborato, utilizzato per il backup su nastro e altri dispositivi ad accesso sequenziale a fini di backup, ora viene 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.

Come sviluppatore di Windows è comprensibile come tarballs sembri strano. La parola tar sta per Tape Archive. Pensa ai registratori da bobina a bobina.

Nel mondo di Windows i programmi sono generalmente installati con un setup.exe o install.exe che funzionano tutti i tipi di procedura guidata nel registro, creando directory e installando .dll (Libreria di collegamento dinamico).

In Linux, Ubuntu in particolare per esperienza personale, i gestori di pacchetti si occupano di prendere un'applicazione e installarla il più delle volte . In Ubuntu lo sviluppatore crea un pacchetto che termina in .deb (Debian, su cui si basa Ubuntu). La sintassi di base per installare un .deb è:

sudo apt install <package_name>

Sebbene ciò sia relativamente semplice per un utente, è molto difficile per gli sviluppatori creare un pacchetto .deb e associare PPA.

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

  • scarica il tarball (di solito termina con .tar.gz ).
  • decomprime il codice sorgente in una directory.
  • compila 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 database apt (si pensi all'elenco dei programmi installati su Windows) di cui è possibile eseguire il backup.

Come già indicato da un'altra risposta a un'altra domanda posta, è possibile creare un tarball e comprimere i dati contemporaneamente. NON è richiesto un processo a due passaggi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top