Il concetto alla base dell’ar­chi­via­zio­ne dei dati è quello di mettere in sicurezza i file o intere cartelle e di salvarle in un luogo sicuro, spesso in forma compressa. Per motivi di sicurezza dei dati, sin da subito è stata at­tri­bui­ta una grande im­por­tan­za all’ar­chi­via­zio­ne negli ambienti server: ori­gi­na­ria­men­te i dati sul server venivano salvati su nastri magnetici, un sistema di backup che viene ancora uti­liz­za­to in presenza di grandi quantità di dati.

Per gestire questo pro­ce­di­men­to di ar­chi­via­zio­ne nella maniera più ef­fi­cien­te possibile, per i sistemi UNIX è stato svi­lup­pa­to già nel 1979 il pacchetto tar (in inglese tape archiver, let­te­ral­men­te “Archivio su nastro”) grazie al quale si possono com­pri­me­re in un unico file dati e cartelle, per poi poterli ri­pri­sti­na­re. È da notare che i permessi utente rimangono gli stessi, a patto che il file di origine e quello di de­sti­na­zio­ne sup­por­ti­no i permessi dei sistemi Unix e Linux.

Per ottenere ulteriore spazio durante il processo di ar­chi­via­zio­ne, i file .tar vengono spesso anche compressi con diversi strumenti come gzip, bzip2 o lzop. Ma in cosa si dif­fe­ren­zia­no i singoli programmi di com­pres­sio­ne e i vari formati? E perché tar è ancora molto im­por­tan­te nei sistemi Linux?

My­De­fen­der
Massima sicurezza per tutti i tuoi di­spo­si­ti­vi
  • Pro­te­zio­ne antivirus
  • Backup au­to­ma­ti­ci e recupero dei file persi

I programmi di com­pres­sio­ne più co­no­sciu­ti per Linux

Ci sono numerosi tool di com­pres­sio­ne gratuiti per le di­stri­bu­zio­ni Linux che, in par­ti­co­la­re, hanno una ca­rat­te­ri­sti­ca in comune: si possono uti­liz­za­re tramite la riga di comando o dal terminale. Con comandi brevi si possono così generare ve­lo­ce­men­te file compressi, ad esempio sotto forma di documenti HTML, ri­spar­mia­re spazio e banda larga al momento dell’invio tra le reti o ridurre il so­vrac­ca­ri­co della con­nes­sio­ne Internet. Inoltre esistono di default anche in­ter­fac­ce grafiche per questi tool e gestori di archivio, che uniscono più programmi di com­pres­sio­ne, da in­stal­la­re in un’in­ter­fac­cia utente visiva. L’utilizzo tramite in­ter­fac­ce grafiche pre­sup­po­ne lo­gi­ca­men­te risorse di sistema ag­giun­ti­ve, perciò il terminale rap­pre­sen­ta teo­ri­ca­men­te la scelta ottimale da compiere per ef­fet­tua­re la com­pres­sio­ne dei dati.

La dif­fe­ren­za ele­men­ta­re tra i singoli programmi consiste nel grado di com­pres­sio­ne garantito, che va di pari passo con una diversa durata del processo di com­pres­sio­ne. So­li­ta­men­te nel tool stesso possono essere scelte anche diverse modalità, per garantire, ad esempio, da una parte il maggior risparmio di spazio possibile e dall’altra una com­pres­sio­ne veloce. Un’ulteriore ca­rat­te­ri­sti­ca che con­trad­di­stin­gue e dif­fe­ren­zia tra loro i vari software di com­pres­sio­ne è il formato di output. Infatti, per via dei diversi algoritmi uti­liz­za­ti, i file compressi pos­sie­do­no diversi formati di ar­chi­via­zio­ne e ri­chie­do­no perciò anche programmi specifici per la de­com­pres­sio­ne.

gzip

gzip (GNU zip) è uno dei metodi di com­pres­sio­ne più uti­liz­za­ti su Linux. Questo strumento, che si basa sull’algoritmo Deflate ed è stato svi­lup­pa­to ori­gi­na­ria­men­te come suc­ces­so­re dell’antenato di Unix compress per la piat­ta­for­ma GNU, ricopre un ruolo im­por­tan­te so­prat­tut­to nello sviluppo web. Quest’ap­pli­ca­zio­ne scritta in C non solo può essere uti­liz­za­ta, grazie a diverse varianti, per la com­pres­sio­ne e la de­com­pres­sio­ne di file su Linux, ma anche sui sistemi Windows e macOS. gzip crea blocchi di file con una di­men­sio­ne di 32.000 byte (32 kB), motivo per cui, rispetto ai programmi di com­pres­sio­ne moderni, viene percepito come datato.

Per quanto riguarda la velocità, il programma di com­pres­sio­ne libero fa parte dei software più veloci e perciò i web server moderni, come Apache, IIS o NGINX, lo hanno im­ple­men­ta­to, so­li­ta­men­te sotto forma di propri moduli, per riuscire a ri­spon­de­re in bre­vis­si­mo tempo con pacchetti di dati compressi. Trovate in­for­ma­zio­ni det­ta­glia­te sul fun­zio­na­men­to e sull’utilizzo del tool di com­pres­sio­ne con licenza GPL in questo articolo di ap­pro­fon­di­men­to.

Vantaggi Svantaggi
Processo di com­pres­sio­ne veloce Di­men­sio­ni dei pacchetti ridotte
Web server standard Grado di com­pres­sio­ne basso

bzip2

Per una com­pres­sio­ne dei file di alta qualità e senza perdite su Linux risulta ap­pro­pria­to anche bzip2, ri­la­scia­to con licenza simile a quella BSD. L’ap­pli­ca­zio­ne si serve di un processo di com­pres­sio­ne a tre gradi: prima di tutto avviene, grazie alla tra­sfor­ma­ta di Burrows-Wheeler, una ri­par­ti­zio­ne dei file in entrata nei diversi blocchi, che hanno una di­men­sio­ne pari a 900.000 byte (900 kB) e vengono con­te­stual­men­te in­cor­po­ra­ti in un algoritmo Move-to-front. Infine la codifica di Huffman si occupa della com­pres­sio­ne dei dati vera e propria. Con bzip2, i file compressi terminano con l’esten­sio­ne .bz2.

Il programma svi­lup­pa­to da Julian Seward supera di gran lunga gli altri tool per quanto riguarda la com­pres­sio­ne in senso ampio, ma il processo richiede molto più tempo, se pa­ra­go­na­to agli altri strumenti. Uno dei più grandi vantaggi consiste nella de­com­pres­sio­ne bz2, che può fun­zio­na­re anche in presenza di archivi par­zial­men­te dan­neg­gia­ti. Grazie a bzip2recover si possono almeno estrarre tutti i blocchi ancora leggibili e quindi de­com­pri­mer­li. bzip2 è il suc­ces­so­re ufficiale di bzip, che sfruttava una codifica arit­me­ti­ca e per motivi legati alla licenza non è stato più svi­lup­pa­to.

Vantaggi Svantaggi
Grado di com­pres­sio­ne elevato Molto lento
Possibile in parte la de­com­pres­sio­ne di archivi dan­neg­gia­ti  

p7zip

p7zip è un’im­ple­men­ta­zio­ne del programma di ar­chi­via­zio­ne 7-Zip con licenza LGPL per le piat­ta­for­me POSIX. Questa im­ple­men­ta­zio­ne è l’unico modo per sup­por­ta­re com­ple­ta­men­te su Linux il formato .7z. Il programma di com­pres­sio­ne ricorre all’algoritmo Lempel-Ziv-Markov (LZMA), svi­lup­pa­to nel 1998 da Igor Wik­to­ro­wi­tsch Pawlow, che lavora con un pro­ce­di­men­to a di­zio­na­rio e che può prin­ci­pal­men­te essere visto come un ulteriore sviluppo di Deflate (ben il 50 percento in più di com­pres­sio­ne). Un archivio di file può essere suddiviso, se ne­ces­sa­rio, in un numero il­li­mi­ta­to di parti, dotato di una password e op­zio­nal­men­te crit­to­gra­fa­to tramite AES a 256 bit (header).

L’algoritmo LZMA, grazie al suo alto tasso di com­pres­sio­ne, ga­ran­ti­sce dei risultati di alta qualità e si con­trad­di­stin­gue anche per quanto riguarda la velocità. Il tool di ar­chi­via­zio­ne, però, richiede dei requisiti di sistema molto elevati. Spe­cial­men­te per i più alti gradi di com­pres­sio­ne sono necessari un buon pro­ces­so­re (almeno da 2 GHz) e una RAM suf­fi­cien­te (da 2 GB o superiore). Oltre all’utilizzo tramite terminale o gestore di archivio, esiste anche una GUI per p7zip, cioè una propria in­ter­fac­cia grafica per l’im­ple­men­ta­zio­ne dell’ap­pli­ca­zio­ne 7-Zip.

Vantaggi Svantaggi
Ec­ce­zio­na­le rapporto tra grado e velocità di com­pres­sio­ne Requisiti di sistema molto elevati
Pos­si­bi­li­tà di pro­te­zio­ne con password e crit­to­gra­fia dell’header  

lzop

Il programma di com­pres­sio­ne lzop (Lempel-Ziv-Oberhumer-Packer) si concentra, come gzip, sulla velocità del processo di com­pres­sio­ne e de­com­pres­sio­ne, ottenendo in media risultati migliori rispetto al tool GNU. Di base si parte dall’algoritmo Lempel-Ziv-Oberhumer (LZO), da cui prende il nome e che è stato ugual­men­te ri­la­scia­to nel 1996 con licenza GNU General Public License (GPL). La com­pres­sio­ne sfrutta poche risorse e lavora secondo il pro­ce­di­men­to a di­zio­na­rio: le sequenze di caratteri che si ripetono vengono so­sti­tui­te da un simbolo che rimanda alla voce cor­ri­spon­den­te della stessa sequenza di caratteri, che compare per prima nel di­zio­na­rio. I dati vengono perciò elaborati in blocchi da 256.000 byte (256 kB). Come da im­po­sta­zio­ne standard, il file originale rimane invariato durante il processo.

Oltre ad un’alta velocità di com­pres­sio­ne e alla com­pa­ti­bi­li­tà con gzip, nello sviluppo di lzop anche la por­ta­bi­li­tà del software ha assunto un ruolo im­por­tan­te. Per questo motivo esistono versioni per quasi tutte le piat­ta­for­me, macOS e Windows inclusi. I file compressi vengono tra­sfor­ma­ti nel formato .lzo.

Vantaggi Svantaggi
Com­pres­sio­ne molto veloce Grado di com­pres­sio­ne piuttosto basso per via dell’elevata velocità
Alta por­ta­bi­li­tà  

Gli strumenti e i formati più comuni in una tabella di confronto

  gzip bzip2 p7zip lzop
Sistema operativo Mul­ti­piat­ta­for­ma Linux/Unix, Windows Sistemi simili a Unix Mul­ti­piat­ta­for­ma
Licenza GNU GPL Simile a BSD GNU LGPL GNU GPL
Processo di com­pres­sio­ne Algoritmo Deflate Tra­sfor­ma­ta di Burrows-Wheeler, algoritmo Move-to-Front, codifica di Huffman Algoritmo LZMA Algoritmo LZO
Formato del file .gz .bz2 .7z .lzo
Crit­to­gra­fia     AES a 256 bit  
Modalità di com­pres­sio­ne 42979 42979 0-9 1, 3, 7-9
Punti di forza Molto veloce Ottimo grado di com­pres­sio­ne Ec­cel­len­te grado di com­pres­sio­ne, cartelle com­pri­mi­bi­li Molto veloce, cartelle com­pri­mi­bi­li
Punti deboli Com­pri­mi­bi­li solo alcuni file Velocità media, com­pri­mi­bi­li solo alcuni file Richiesti al sistema requisiti elevati Basso grado di com­pres­sio­ne

Come si rileva dalla tabella, non c’è un unico strumento di com­pres­sio­ne di cui non si può fare a meno, ma per scegliere il programma più ap­pro­pria­to tutto dipende molto dall’utilizzo previsto. p7zip presenta, ad esempio, dei chiari vantaggi per quanto riguarda il grado di com­pres­sio­ne e consente inoltre la crit­to­gra­fia dei dati AES a 256 bit, aspetto di estrema im­por­tan­za laddove la sicurezza ricopre un ruolo im­por­tan­te. Inoltre, sia con p7zip che con lzop, è possibile com­pri­me­re intere cartelle, mentre con gzip e bzip2 si possono ridurre le di­men­sio­ni solo di singoli file. D’altra parte strumenti di questo tipo ri­chie­do­no pre­sta­zio­ni elevate del sistema e perciò p7zip risulta meno adatto per la com­pres­sio­ne in ambiti più piccoli.

Come funziona la com­pres­sio­ne dei file con i tool di Linux

I programmi di com­pres­sio­ne citati si dif­fe­ren­zia­no con­si­de­re­vol­men­te per quanto riguarda il tasso di com­pres­sio­ne e di velocità. Quando si prendono in con­si­de­ra­zio­ne la sintassi e l’utilizzo di questi utili strumenti, a prevalere sono so­prat­tut­to gli elementi in comune. Così tutti quanti sono uti­liz­za­bi­li anche senza un’in­ter­fac­cia grafica specifica o un gestore di archivio dalla riga di comando, dove anche i prin­ci­pian­ti pren­de­ran­no in fretta di­me­sti­chez­za con i diversi parametri e i vari comandi. Vi mostriamo a questo punto un esempio di come com­pri­me­re file con bzip2 su Linux e come de­com­pri­mer­li di nuovo nel formato .bz2.

La forma della sintassi generale di bzip2 è la seguente:

bzip2 opzioni file

Per il processo di com­pres­sio­ne standard non è ne­ces­sa­rio indicare delle opzioni. Queste sono ob­bli­ga­to­rie solo se volete mo­di­fi­ca­re le im­po­sta­zio­ni di com­pres­sio­ne, aprire il menu generale o de­com­pri­me­re un file .bz2. Ad esempio, solo per com­pri­me­re fa­cil­men­te il documento di testo test.txt, basta il comando

bzip2 test.txt

che elimina il file originale e lo so­sti­tui­sce con il file compresso test.txt.bz2. Mettendo in fila i documenti cor­ri­spon­den­ti, potete anche com­pri­me­re più file con un unico comando:

bzip2 test.txt test2.txt test3.txt

Se volete de­com­pri­me­re un documento compresso, è ne­ces­sa­rio, come già accennato, inserire il parametro dell’opzione cor­ri­spon­den­te:

bzip2 -d test.txt

Di seguito una pa­no­ra­mi­ca delle altre opzioni di comando di bzip2:

Opzione De­scri­zio­ne
-1 … -9 Viene fornito il grado di com­pres­sio­ne in una scala da 1 a 9, dove 1 sta per il livello più basso e 9 per quello più alto; di default il valore pre­im­po­sta­to è 5
-f La com­pres­sio­ne avviene anche se esiste già un file .bz2 con lo stesso nome; se fosse questo il caso, il file già presente viene so­vra­scrit­to
-c Il documento compresso viene generato nell’output standard (in genere per il desktop)
-q Tutti gli avvisi di bzip2 vengono bloccati
-v Vengono indicate le in­for­ma­zio­ni ag­giun­ti­ve come il tasso di com­pres­sio­ne per tutti i file elaborati
-t Viene ve­ri­fi­ca­ta l’integrità del file scelto
-k Se al comando di com­pres­sio­ne viene aggiunto questo parametro, il file originale rimane invariato
-h Il menu generale viene aperto

Perché il programma di com­pres­sio­ne tar è così richiesto

Il programma di ar­chi­via­zio­ne tar è uti­liz­za­to da oltre 30 anni ed è ancora sulla cresta dell’onda. Ciò dipende in parte dal fatto che con il tool si possono mantenere i permessi del file definiti durante l’ar­chi­via­zio­ne, ma so­prat­tut­to deriva dalla pos­si­bi­li­tà di com­pri­me­re cartelle intere. Infatti questo par­ti­co­la­re rende tar un’ottima scelta tra gli strumenti di com­pres­sio­ne, al contrario di gzip e bzip2 che possono com­pri­me­re solo singoli file.

Il programma raccoglie quindi nel primo passaggio tutti i file della cartella scelta in un unico file di archivio, unendo tra di loro i file contenuti lì senza al­te­ra­zio­ni. Nel secondo passaggio avviene il processo di com­pres­sio­ne vero e proprio, grazie ad uno specifico programma. Da questa com­pres­sio­ne, che viene indicata come pro­gres­si­va o anche compatta e solida, ne consegue che i file di archivio ricevono esten­sio­ni di formato avanzate come .tar.gz (ab­bre­via­to: .tgz) e .tar.bz2 (ab­bre­via­to: .tbz2). Il programma di ar­chi­via­zio­ne rende inoltre possibile de­com­pri­me­re un file simile, ad esempio a partire dal formato .tar .gz.

Archivi tar: come com­pri­me­re e de­com­pri­me­re i file .tar.gz e gli altri

La com­bi­na­zio­ne con file tar e uno strumento di com­pres­sio­ne non è ob­bli­ga­to­ria, così è possibile rag­grup­pa­re i file in un archivio, che non sono stati compressi pre­ce­den­te­men­te. Se ad esempio volete in­cor­po­ra­re insieme in uno stesso archivio con il nome archivio.tar i due documenti “test” non compressi test.txt e test2.txt, sarà ne­ces­sa­rio dare il seguente comando:

tar -cf archivio.tar test.txt test2.txt

Per de­com­pri­me­re di nuovo questo archivio su Linux, so­sti­tui­te il parametro –c (generare un nuovo archivio) con –x (estrarre i file da un archivio). Se non dovete de­com­pri­me­re solo una parte precisa dell’archivio, si omette l’in­di­ca­zio­ne del file:

tar -xf archivio.tar

Al­ter­na­ti­va­men­te, prendete in con­si­de­ra­zio­ne un archivio compresso; ad esempio sulla base di una com­pres­sio­ne gzip, com­pren­si­va dell’esten­sio­ne del formato avanzato .tar.gz, tar offre anche delle valide pos­si­bi­li­tà. Visto che il software ha im­ple­men­ta­to opzioni per la com­pres­sio­ne e la de­com­pres­sio­ne con i programmi di com­pres­sio­ne bzip2, xz, compress e gzip, si riesce ad ottenere questo risultato anche con un unico comando:

tar -czf archivio.tar.gz test.txt test2.txt

Il comando per de­com­pri­me­re un file .tar.gz si distingue da quello per cartelle non compresse solo tramite in­di­ca­zio­ne del parametro del programma di com­pres­sio­ne:

tar -xzf archivio.tar.gz
Consiglio
Il parametro –f con cui si può scegliere il ri­spet­ti­vo file archivio, deve sempre trovarsi in ultima posizione, visto che i caratteri suc­ces­si­vi vengono sempre in­ter­pre­ta­ti con­se­guen­te­men­te come file.

I comandi più im­por­tan­ti del programma di archivio

Oltre alle opzioni appena elencate per un’ar­chi­via­zio­ne semplice dei file, esiste una serie di altri parametri con cui spe­ci­fi­ca­re per buona parte il processo di com­pres­sio­ne e de­com­pres­sio­ne. Tra questi rientrano ad esempio i metodi di com­pres­sio­ne nominati, ma anche le pos­si­bi­li­tà di im­po­sta­zio­ne per le cartelle, così come opzioni per la verifica e l’anteprima dell’archivio tar, come indicato in questa tabella:

Opzione De­scri­zio­ne
--help Viene aperto il menu generale di tar
-c Viene generato un nuovo archivio
-d Vengono comparati tra di loro i file nell’archivio e nel file system
-f I file scelti vengono scritti in un archivio con i nomi dei file inseriti; vengono letti i dati con il nome inserito da un archivio
-j Vengono compressi o de­com­pres­si gli archivi con bzip2
-J Vengono compressi o de­com­pres­si gli archivi con xz
-k Viene evitato che i file esistenti vengano so­vra­scrit­ti al momento dell’estra­zio­ne di un archivio
-p Viene fatto in modo che i permessi di accesso rimangano invariati anche dopo l’estra­zio­ne dell’archivio
-r Vengono aggiunti file ad un archivio già esistente
-t Viene mostrato il contenuto dell’archivio scelto
-u Vengono allegati ad un archivio solo quei file che sono stati ag­gior­na­ti dall’ultima versione presente nell’archivio
-x Vengono de­com­pres­si i file da un archivio
-z Vengono compressi o de­com­pres­si gli archivi con gzip
-Z Vengono compressi o de­com­pres­si gli archivi con compress
-A Viene im­ple­men­ta­to il contenuto di un archivio in un altro
-C Ci si sposta nella cartella data per de­com­pri­mer­vi l’archivio scelto
-M Opzione per creare, mostrare o estrarre una delle parti dell‘archivio
-W Viene ve­ri­fi­ca­to l’archivio a con­clu­sio­ne del processo di com­pres­sio­ne
Consiglio
Alcune opzioni come l’aggiunta di file ad un archivio già esistente (-r) non fun­zio­na­no con archivi compressi, che devono quindi prima di tutto venir de­com­pres­si.

Esempi

Mostrare il contenuto di un archivio

tar -tf archivio.tar

Ag­gior­na­re il contenuto di un archivio (senza prendere in con­si­de­ra­zio­ne le sot­to­car­tel­le)

tar -uf archivio.tar file

Ampliare il contenuto di un archivio

tar -rf archivio.tar nuovo file

Con­fron­ta­re il contenuto di un archivio con il file system (eseguito all’interno dell’archivio)

tar -dvf archivio.tar

File Roller: il gestore di archivio per GNOME

File Roller è un’in­ter­fac­cia grafica per diversi strumenti di com­pres­sio­ne e pacchetti di programmi che vengono eseguiti re­go­lar­men­te tramite riga di comando. Il gestore di archivio è di­spo­ni­bi­le per gli ambienti desktop GNOME e Unity ed è di­stri­bui­to dal 2011 con licenza GNU General Public License. Consente di mostrare il contenuto di diversi file di archivio e di de­com­pri­me­re i file al suo interno, di eli­mi­nar­li o di ag­giun­ger­ne altri. Sono possibili anche la creazione di nuovi file e archivi compressi o inal­te­ra­ti e la con­ver­sio­ne in un altro formato. Per questo, la finestra prin­ci­pa­le del software offre diversi pulsanti e menu, oltre che una funzione drag&drop. Tra gli altri, File Roller supporta, oltre ai formati dell’archivio tar, come .tar.gz, i seguenti formati:

  • .7z
  • .tar
  • .gzip
  • .bzip2
  • .ar
  • .jar
  • .cpio

File Roller è pre­in­stal­la­to di default in alcune di­stri­bu­zio­ni Linux come Ubuntu, ma può anche essere in­stal­la­to suc­ces­si­va­men­te grazie al ri­spet­ti­vo gestore di pacchetti o scaricato sulla pagina ufficiale del programma. Un’al­ter­na­ti­va per l’ambiente desktop KDE è Ark.

Vai al menu prin­ci­pa­le