Esistono due attività distinte ma correlate. Il raggruppamento di un albero di file (inclusi nomi di file, struttura di directory, autorizzazioni del file system, proprietà e qualsiasi altro metadata) in un flusso di byte viene chiamato
archiviazione . La rimozione della ridondanza in un flusso di byte per produrre un flusso di byte più piccolo si chiama compressione .
Su Unix, le due operazioni sono separate, con strumenti distinti per ciascuna. Sulla maggior parte delle altre piattaforme (attuali e storiche) gli strumenti combinati eseguono sia l'archiviazione che la compressione.
(gzip e altri programmi che imitano l'interfaccia di gzip hanno spesso la possibilità di memorizzare il nome file originale nell'output compresso, ma questo, insieme a un CRC o un altro controllo per rilevare la corruzione, sono gli unici metadati che possono memorizzare.)
Ci sono vantaggi nel separare la compressione dall'archiviazione. L'archiviazione è specifica della piattaforma (i metadati del filesystem che devono essere conservati variano ampiamente), ma l'implementazione è semplice, in gran parte legata a I / O, e cambia poco nel tempo. La compressione è indipendente dalla piattaforma, ma le implementazioni sono legate alla CPU e gli algoritmi migliorano costantemente per sfruttare le maggiori risorse che l'hardware moderno può far fronte al problema.
L'archiviatore Unix più popolare è tar
, anche se ne esistono altri come cpio
e ar
. (I pacchetti Debian sono ar
archivi, mentre
cpio
è spesso usato per i ramdisk originali.) tar
È o è stato spesso combinato con strumenti di compressione come compress
(.Z), gzip
(.gz),
bzip2
(.bz2) e xz
(.xz), dal più vecchio al più giovane e non a caso dalla compressione peggiore a quella migliore.
Fare un tar
archivio e comprimerlo sono passaggi distinti: il compressore non sa nulla del tar
formato del file. Ciò significa che l'estrazione di un singolo file da un tar
archivio compresso richiede la decompressione di tutti i file precedenti. Questo è spesso chiamato un archivio "solido".
Allo stesso modo, poiché tar è un formato "streaming" - necessario per essere utile in una pipeline - non esiste un indice globale in un archivio tar e elencare il contenuto di un archivio tar è costoso quanto estrarlo.
Al contrario, Zip e RAR e 7-zip (gli archivi più popolari sulle moderne piattaforme Windows) di solito comprimono ogni file separatamente e comprimono i metadati leggermente se non del tutto. Ciò consente un elenco economico dei file in un archivio e l'estrazione di singoli file, ma significa che la ridondanza tra più file nello stesso archivio non può essere sfruttata per aumentare la compressione. Mentre in generale la compressione di un file già compresso non riduce ulteriormente le dimensioni del file, a volte potresti vedere un file zip all'interno di un file zip: il primo zippare ha trasformato molti file piccoli in un file grande (probabilmente con compressione disabilitata), che il secondo zippare quindi compresso come una singola entità.
Esiste una impollinazione incrociata tra le diverse piattaforme e filosofie: gzip
è essenzialmente zip
il compressore senza il suo archiviatore, ed xz
è essenzialmente 7-zip
il compressore senza il suo archiviatore.
Esistono altri compressori specializzati. Le varianti di PPM e il loro successore ZPAQ
sono ottimizzate per la massima compressione indipendentemente dal consumo di risorse. Possono facilmente masticare tutta la CPU e la RAM che puoi lanciare contro di loro, e la decompressione è tanto faticosa quanto la compressione (per contrasto, gli strumenti di compressione più utilizzati sono
asimmetrici : la decompressione è più economica della compressione).
D'altra estremità dello spettro, lzo
, snappy
e LZ4
sono compressori "leggeri" progettati per la massima velocità e minimo consumo di risorse, a costo di compressione. Sono ampiamente utilizzati nei filesystem e in altri negozi di oggetti, ma meno come strumenti autonomi.
Quindi quale dovresti scegliere?
Archiviazione:
Dato che sei su Ubuntu non c'è alcun motivo reale per usare altro che tar
per l'archiviazione, a meno che tu non stia provando a creare file facilmente leggibili altrove.
zip
è difficile da battere per l'ubiquità, ma non è incentrato su Unix e non manterrà le autorizzazioni del file system e le informazioni sulla proprietà e la sua compressione integrata è antiquata. 7-zip e RAR (e ZPAQ) hanno una compressione più moderna ma sono ugualmente inadatti all'archiviazione dei filesystem Unix (anche se non c'è nulla che ti impedisca di usarli come compressori); RAR è anche proprietario.
Compressione:
Per la massima compressione puoi dare un'occhiata a un benchmark, come quello enorme su http://mattmahoney.net/dc/text.html . Questo dovrebbe darti un'idea migliore dei compromessi coinvolti.
Tuttavia, probabilmente non vuoi la massima compressione. È troppo costoso.
xz
è lo strumento di compressione per uso generico più popolare sui moderni sistemi Unix. Credo che 7-zip possa leggere anche i file xz, poiché sono strettamente correlati.
Infine: se stai archiviando dati per qualcosa di diverso dall'archiviazione a breve termine, dovresti scegliere qualcosa di open source e preferibilmente diffuso, per ridurre al minimo i mal di testa in seguito.