Come archiviare e comprimere i file su Linux

Il concetto alla base dell’archiviazione 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 attribuita una grande importanza all’archiviazione negli ambienti server: originariamente i dati sul server venivano salvati su nastri magnetici, un sistema di backup che viene ancora utilizzato in presenza di grandi quantità di dati.

Per gestire questo procedimento di archiviazione nella maniera più efficiente possibile, per i sistemi UNIX è stato sviluppato già nel 1979 il pacchetto tar (in inglese tape archiver, letteralmente “Archivio su nastro”) grazie al quale si possono comprimere in un unico file dati e cartelle, per poi poterli ripristinare. È da notare che i permessi utente rimangono gli stessi, a patto che il file di origine e quello di destinazione supportino i permessi dei sistemi Unix e Linux.

Per ottenere ulteriore spazio durante il processo di archiviazione, i file .tar vengono spesso anche compressi con diversi strumenti come gzip, bzip2 o lzop. Ma in cosa si differenziano i singoli programmi di compressione e i vari formati? E perché tar è ancora molto importante nei sistemi Linux?

I programmi di compressione più conosciuti per Linux

Ci sono numerosi tool di compressione gratuiti per le distribuzioni Linux che, in particolare, hanno una caratteristica in comune: si possono utilizzare tramite la riga di comando o dal terminale. Con comandi brevi si possono così generare velocemente file compressi, ad esempio sotto forma di documenti HTML, risparmiare spazio e banda larga al momento dell’invio tra le reti o ridurre il sovraccarico della connessione Internet. Inoltre esistono di default anche interfacce grafiche per questi tool e gestori di archivio, che uniscono più programmi di compressione, da installare in un’interfaccia utente visiva. L’utilizzo tramite interfacce grafiche presuppone logicamente risorse di sistema aggiuntive, perciò il terminale rappresenta teoricamente la scelta ottimale da compiere per effettuare la compressione dei dati.

La differenza elementare tra i singoli programmi consiste nel grado di compressione garantito, che va di pari passo con una diversa durata del processo di compressione. Solitamente 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 compressione veloce. Un’ulteriore caratteristica che contraddistingue e differenzia tra loro i vari software di compressione è il formato di output. Infatti, per via dei diversi algoritmi utilizzati, i file compressi possiedono diversi formati di archiviazione e richiedono perciò anche programmi specifici per la decompressione.

gzip

gzip (GNU zip) è uno dei metodi di compressione più utilizzati su Linux. Questo strumento, che si basa sull’algoritmo Deflate ed è stato sviluppato originariamente come successore dell’antenato di Unix compress per la piattaforma GNU, ricopre un ruolo importante soprattutto nello sviluppo web. Quest’applicazione scritta in C non solo può essere utilizzata, grazie a diverse varianti, per la compressione e la decompressione di file su Linux, ma anche sui sistemi Windows e macOS. gzip crea blocchi di file con una dimensione di32.000 byte (32 kB), motivo per cui, rispetto ai programmi di compressione moderni, viene percepito come datato.

Per quanto riguarda la velocità, il programma di compressione libero fa parte dei software più veloci e perciò i web server moderni, come Apache, IIS o NGINX, lo hanno implementato, solitamente sotto forma di propri moduli, per riuscire a rispondere in brevissimo tempo con pacchetti di dati compressi. Trovate informazioni dettagliate sul funzionamento e sull’utilizzo del tool di compressione con licenza GPL in questo articolo di approfondimento.

Vantaggi Svantaggi
Processo di compressione veloce Dimensioni dei pacchetti ridotte
Web server standard Grado di compressione basso

bzip2

Per una compressione dei file di alta qualità e senza perdite su Linux risulta appropriato anche bzip2, rilasciato con licenza simile a quella BSD. L’applicazione si serve di un processo di compressione a tre gradi: prima di tutto avviene, grazie alla trasformata di Burrows-Wheeler, una ripartizione dei file in entrata nei diversi blocchi, che hanno una dimensione pari a 900.000 byte (900 kB) e vengono contestualmente incorporati in un algoritmo Move-to-front. Infine la codifica di Huffman si occupa della compressione dei dati vera e propria. Con bzip2, i file compressi terminano con l’estensione .bz2.

Il programma sviluppato da Julian Seward supera di gran lunga gli altri tool per quanto riguarda la compressione in senso ampio, ma il processo richiede molto più tempo, se paragonato agli altri strumenti. Uno dei più grandi vantaggi consiste nella decompressione bz2, che può funzionare anche in presenza di archivi parzialmente danneggiati. Grazie a bzip2recover si possono almeno estrarre tutti i blocchi ancora leggibili e quindi decomprimerli. bzip2 è il successore ufficiale di bzip, che sfruttava una codifica aritmetica e per motivi legati alla licenza non è stato più sviluppato.

Vantaggi Svantaggi
Grado di compressione elevato Molto lento
Possibile in parte la decompressione di archivi danneggiati  

p7zip

p7zip è un’implementazione del programma di archiviazione 7-Zip con licenza LGPL per le piattaforme POSIX. Questa implementazione è l’unico modo per supportare completamente su Linux il formato .7z. Il programma di compressione ricorre all’algoritmo Lempel-Ziv-Markov (LZMA), sviluppato nel 1998 da Igor Wiktorowitsch Pawlow, che lavora con un procedimento a dizionario e che può principalmente essere visto come un ulteriore sviluppo di Deflate (ben il 50 percento in più di compressione). Un archivio di file può essere suddiviso, se necessario, in un numero illimitato di parti, dotato di una password e opzionalmente crittografato tramiteAES a 256 bit (header).

L’algoritmo LZMA, grazie al suo alto tasso di compressione, garantisce dei risultati di alta qualità e si contraddistingue anche per quanto riguarda la velocità. Il tool di archiviazione, però, richiede dei requisiti di sistema molto elevati. Specialmente per i più alti gradi di compressione sono necessari un buon processore (almeno da 2 GHz) e una RAM sufficiente (da 2 GB o superiore). Oltre all’utilizzo tramite terminale o gestore di archivio, esiste anche una GUI per p7zip, cioè una propria interfaccia grafica per l’implementazione dell’applicazione 7-Zip.

Vantaggi Svantaggi
Eccezionale rapporto tra grado e velocità di compressione Requisiti di sistema molto elevati
Possibilità di protezione con password e crittografia dell’header  

lzop

Il programma di compressione lzop (Lempel-Ziv-Oberhumer-Packer) si concentra, come gzip, sulla velocità del processo di compressione e decompressione, 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 ugualmente rilasciato nel 1996 con licenza GNU General Public License (GPL). La compressione sfrutta poche risorse e lavora secondo il procedimento a dizionario: le sequenze di caratteri che si ripetono vengono sostituite da un simbolo che rimanda alla voce corrispondente della stessa sequenza di caratteri, che compare per prima nel dizionario. I dati vengono perciò elaborati in blocchi da 256.000 byte (256 kB). Come da impostazione standard, il file originale rimane invariato durante il processo.

Oltre ad un’alta velocità di compressione e alla compatibilità con gzip, nello sviluppo di lzop anche la portabilità del software ha assunto un ruolo importante. Per questo motivo esistono versioni per quasi tutte le piattaforme, macOS e Windows inclusi. I file compressi vengono trasformati nel formato .lzo.

Vantaggi Svantaggi
Compressione molto veloce Grado di compressione piuttosto basso per via dell’elevata velocità
Alta portabilità  

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

  gzip bzip2 p7zip lzop
Sistema operativo Multipiattaforma Linux/Unix, Windows Sistemi simili a Unix Multipiattaforma
Licenza GNU GPL Simile a BSD GNU LGPL GNU GPL
Processo di compressione Algoritmo Deflate Trasformata di Burrows-Wheeler, algoritmo Move-to-Front, codifica di Huffman Algoritmo LZMA Algoritmo LZO
Formato del file .gz .bz2 .7z .lzo
Crittografia     AES a 256 bit  
Modalità di compressione 42979 42979 0-9 1, 3, 7-9
Punti di forza Molto veloce Ottimo grado di compressione Eccellente grado di compressione, cartelle comprimibili Molto veloce, cartelle comprimibili
Punti deboli Comprimibili solo alcuni file Velocità media, comprimibili solo alcuni file Richiesti al sistema requisiti elevati Basso grado di compressione

Come si rileva dalla tabella, non c’è un unico strumento di compressione di cui non si può fare a meno, ma per scegliere il programma più appropriato tutto dipende molto dall’utilizzo previsto. p7zip presenta, ad esempio, dei chiari vantaggi per quanto riguarda il grado di compressione e consente inoltre la crittografia dei dati AES a 256 bit, aspetto di estrema importanza laddove la sicurezza ricopre un ruolo importante. Inoltre, sia con p7zip che con lzop, è possibile comprimere intere cartelle, mentre con gzip e bzip2 si possono ridurre le dimensioni solo di singoli file. D’altra parte strumenti di questo tipo richiedono prestazioni elevate del sistema e perciò p7zip risulta meno adatto per la compressione in ambiti più piccoli.

Come funziona la compressione dei file con i tool di Linux

I programmi di compressione citati si differenziano considerevolmente per quanto riguarda il tasso di compressione e di velocità. Quando si prendono in considerazione la sintassi e l’utilizzo di questi utili strumenti, a prevalere sono soprattutto gli elementi in comune. Così tutti quanti sono utilizzabili anche senza un’interfaccia grafica specifica o un gestore di archivio dalla riga di comando, dove anche i principianti prenderanno in fretta dimestichezza con i diversi parametri e i vari comandi. Vi mostriamo a questo punto un esempio di come comprimere filecon bzip2 su Linux e come decomprimerli di nuovo nel formato .bz2.

La forma della sintassi generale di bzip2 è la seguente:

bzip2 opzioni file

Per il processo di compressione standard non è necessario indicare delle opzioni. Queste sono obbligatorie solo se volete modificare le impostazioni di compressione, aprire il menu generale o decomprimere un file .bz2. Ad esempio, solo per comprimere facilmente il documento di testo test.txt, basta il comando

bzip2 test.txt

che elimina il file originale e lo sostituisce con il file compresso test.txt.bz2. Mettendo in fila i documenti corrispondenti, potete anche comprimere più file con un unico comando:

bzip2 test.txt test2.txt test3.txt

Se volete decomprimere un documento compresso, è necessario, come già accennato, inserire il parametro dell’opzione corrispondente:

bzip2 -d test.txt

Di seguito una panoramica delle altre opzioni di comando di bzip2:

Opzione Descrizione
-1 … -9 Viene fornito il grado di compressione 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 preimpostato è 5
-f La compressione avviene anche se esiste già un file .bz2 con lo stesso nome; se fosse questo il caso, il file già presente viene sovrascritto
-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 informazioni aggiuntive come il tasso di compressione per tutti i file elaborati
-t Viene verificata l’integrità del file scelto
-k Se al comando di compressione viene aggiunto questo parametro, il file originale rimane invariato
-h Il menu generale viene aperto

Perché il programma di compressione tar è così richiesto

Il programma di archiviazione tar è utilizzato 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’archiviazione, ma soprattutto deriva dalla possibilità di comprimere cartelle intere. Infatti questo particolare rende tar un’ottima scelta tra gli strumenti di compressione, al contrario di gzip e bzip2 che possono comprimere 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 alterazioni. Nel secondo passaggio avviene il processo di compressione vero e proprio, grazie ad uno specifico programma. Da questa compressione, che viene indicata come progressiva o anche compatta e solida, ne consegue che i file di archivio ricevono estensioni di formato avanzate come .tar.gz (abbreviato: .tgz) e .tar.bz2 (abbreviato: .tbz2). Il programma di archiviazione rende inoltre possibile decomprimere un file simile, ad esempio a partire dal formato .tar .gz.

Archivi tar: come comprimere e decomprimere i file .tar.gz e gli altri

La combinazione con file tar e uno strumento di compressione non è obbligatoria, così è possibile raggruppare i file in un archivio, che non sono stati compressi precedentemente. Se ad esempio volete incorporare insieme in uno stesso archivio con il nome archivio.tar i due documenti “test” non compressi test.txt e test2.txt, sarà necessario dare il seguente comando:

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

Per decomprimere di nuovo questo archivio su Linux, sostituite il parametro –c (generare un nuovo archivio) con –x (estrarre i file da un archivio). Se non dovete decomprimere solo una parte precisa dell’archivio, si omette l’indicazione del file:

tar -xf archivio.tar

Alternativamente, prendete in considerazione un archivio compresso; ad esempio sulla base di una compressione gzip, comprensiva dell’estensione del formato avanzato .tar.gz, tar offre anche delle valide possibilità. Visto che il software ha implementato opzioni per la compressione e la decompressione con i programmi di compressione 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 decomprimere un file .tar.gz si distingue da quello per cartelle non compresse solo tramite indicazione del parametro del programma di compressione:

tar -xzf archivio.tar.gz
Consiglio

Il parametro –f con cui si può scegliere il rispettivo file archivio, deve sempre trovarsi in ultima posizione, visto che i caratteri successivi vengono sempre interpretati conseguentemente come file.

I comandi più importanti del programma di archivio

Oltre alle opzioni appena elencate per un’archiviazione semplice dei file, esiste una serie di altri parametri con cui specificare per buona parte il processo di compressione e decompressione. Tra questi rientrano ad esempio i metodi di compressione nominati, ma anche le possibilità di impostazione per le cartelle, così come opzioni per la verifica e l’anteprima dell’archivio tar, come indicato in questa tabella:

Opzione Descrizione
--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 decompressi gli archivi con bzip2
-J Vengono compressi o decompressi gli archivi con xz
-k Viene evitato che i file esistenti vengano sovrascritti al momento dell’estrazione di un archivio
-p Viene fatto in modo che i permessi di accesso rimangano invariati anche dopo l’estrazione 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 aggiornati dall’ultima versione presente nell’archivio
-x Vengono decompressi i file da un archivio
-z Vengono compressi o decompressi gli archivi con gzip
-Z Vengono compressi o decompressi gli archivi con compress
-A Viene implementato il contenuto di un archivio in un altro
-C Ci si sposta nella cartella data per decomprimervi l’archivio scelto
-M Opzione per creare, mostrare o estrarre una delle parti dell‘archivio
-W Viene verificato l’archivio a conclusione del processo di compressione
Consiglio

Alcune opzioni come l’aggiunta di file ad un archivio già esistente (-r) non funzionano con archivi compressi, che devono quindi prima di tutto venir decompressi.

Esempi

Mostrare il contenuto di un archivio

tar -tf archivio.tar

Aggiornare il contenuto di un archivio (senza prendere in considerazione le sottocartelle)

tar -uf archivio.tar file

Ampliare il contenuto di un archivio

tar -rf archivio.tar nuovo file

Confrontare 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’interfaccia grafica per diversi strumenti di compressione e pacchetti di programmi che vengono eseguiti regolarmente tramite riga di comando. Il gestore di archivio è disponibile per gli ambienti desktop GNOME e Unity ed è distribuito dal 2011 con licenza GNU General Public License. Consente di mostrare il contenuto di diversi file di archivio e di decomprimere i file al suo interno, di eliminarli o di aggiungerne altri. Sono possibili anche la creazione di nuovi file e archivi compressi o inalterati e la conversione in un altro formato. Per questo, la finestra principale 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 è preinstallato di default in alcune distribuzioni Linux come Ubuntu, ma può anche essere installato successivamente grazie al rispettivo gestore di pacchetti o scaricato sulla pagina ufficiale del programma. Un’alternativa per l’ambiente desktop KDE è Ark.


Un momento! Prima di lasciarci scopri
la nostra offerta per il rientro dalle ferie:
dominio .it a 1 € per il primo anno!

Primo anno a 1 € IVA escl.,
poi 10 €/anno IVA escl.

Inserisci il dominio desiderato nella barra di ricerca per verificarne la disponibilità.