>_ Sistemi operativi e Linux

Archivi e compressione su Linux: tar, gzip, xz, zstd e zip

Come creare ed estrarre archivi su Linux con tar, cosa cambia tra gzip, bzip2, xz e zstd, quando usare zip e come controllare un archivio prima di aprirlo.

Chi arriva da Windows è abituato a pensare a «zip» come a un'unica operazione. Su Linux le cose sono separate in due passaggi: prima si archivia, cioè si raccolgono molti file in uno solo conservando struttura delle cartelle, permessi e date; poi si comprime, riducendo le dimensioni. Il primo lavoro lo fa tar, il secondo uno dei vari compressori. Capire questa divisione rende chiari i nomi dei file, come .tar.gz o .tar.zst, e le opzioni da usare.

tar: l'archiviatore

Il nome viene da tape archive: nacque per scrivere dati su nastro. Oggi tar crea un file che contiene altri file, con tutti i loro metadati. Le tre operazioni fondamentali hanno una lettera ciascuna:

  • c crea un archivio;
  • x estrae;
  • t elenca il contenuto senza estrarre.

A queste si aggiungono f, seguita dal nome del file d'archivio, e v, che mostra i file man mano che vengono elaborati. Per esempio:

tar -cvf progetto.tar progetto/
tar -tvf progetto.tar
tar -xvf progetto.tar

Il file progetto.tar non è compresso: occupa più o meno quanto i file originali.

Aggiungere la compressione

tar può passare i dati direttamente a un compressore con una lettera in più:

Opzione Compressore Estensione tipica
z gzip .tar.gz o .tgz
j bzip2 .tar.bz2
J xz .tar.xz
--zstd zstd .tar.zst

Quindi, per creare un archivio compresso con gzip:

tar -czvf backup-sito.tar.gz /var/www/sito

In estrazione le versioni recenti di GNU tar riconoscono da sole il tipo di compressione, quindi tar -xf archivio.tar.xz funziona senza specificare J.

Quale compressore scegliere

I compressori fanno compromessi diversi tra velocità e dimensione del risultato:

  • gzip è il più diffuso e compatibile, veloce in compressione e decompressione, con un rapporto discreto. È la scelta sicura quando l'archivio va mandato a qualcuno o aperto su un sistema qualsiasi.
  • bzip2 comprime un po' meglio di gzip ma è più lento; oggi è usato meno.
  • xz produce file tra i più piccoli, ma la compressione è lenta e richiede molta memoria ai livelli alti. Molti progetti lo usano per distribuire il codice sorgente, perché si comprime una volta e si scarica molte volte.
  • zstd offre una decompressione molto veloce e un'ampia scelta di livelli, dal rapidissimo al molto compatto. Diverse distribuzioni lo usano per i propri pacchetti. Per backup frequenti è spesso il miglior compromesso.

Tutti accettano un livello: gzip -9 per la compressione massima, zstd -19 per un archivio molto compatto. Si può anche usare più di un processore: zstd -T0 sfrutta tutti i core disponibili, e xz -T0 fa lo stesso.

Una cosa da sapere: comprimere file già compressi, come foto JPEG, video, PDF o archivi ZIP, non porta quasi nessun guadagno. In quei casi basta tar senza compressione, che almeno raccoglie tutto in un file unico.

Opzioni pratiche di tar

Qualche opzione che uso spesso:

  • -C cartella estrae in una cartella diversa da quella corrente: tar -xzf archivio.tar.gz -C /tmp/prova;
  • --exclude salta file o cartelle: --exclude='*.log' --exclude='node_modules';
  • indicare uno o più percorsi dopo il nome dell'archivio estrae solo quei file: tar -xzf backup.tar.gz progetto/config.yml;
  • -p conserva i permessi in estrazione, comportamento predefinito quando si opera come root.

Un dettaglio sui percorsi: GNU tar rimuove la / iniziale dai percorsi assoluti al momento della creazione, e lo segnala con un messaggio. Così in estrazione i file finiscono nella cartella corrente e non sovrascrivono quelli di sistema.

Controllare prima di estrarre

Un archivio ricevuto da altri va elencato prima di essere estratto:

tar -tzf archivio.tar.gz | head

Ci sono due problemi da evitare. Il primo è l'archivio che non ha una cartella principale: estratto nella cartella home, sparge decine di file tra i tuoi. Il secondo, più serio, sono i percorsi che contengono ../, che proverebbero a scrivere fuori dalla cartella di destinazione. Le versioni moderne di tar li bloccano o li segnalano, ma l'abitudine di guardare prima resta la difesa migliore. Estrarre in una cartella vuota creata apposta, con -C, risolve entrambi.

zip e 7z: per scambiare con altri sistemi

Per mandare file a chi usa Windows o macOS, lo ZIP resta il formato più comodo, perché entrambi i sistemi lo aprono senza programmi aggiuntivi:

zip -r documenti.zip documenti/
unzip -l documenti.zip
unzip documenti.zip -d destinazione/

ZIP comprime ogni file separatamente e non conserva bene i permessi Unix, quindi non è adatto per un backup di sistema. Il formato 7z, gestito dal comando 7z, comprime molto bene e supporta la cifratura AES degli archivi; è utile quando si devono scambiare file con chi usa 7-Zip.

Verificare l'integrità

Prima di cancellare gli originali, verifica che l'archivio sia leggibile: gzip -t archivio.tar.gz, xz -t, zstd -t o unzip -t controllano che i dati si decomprimano senza errori. Per un backup importante conviene anche estrarlo in una cartella di prova e confrontare qualche file.

In sintesi

  • tar raccoglie i file con i loro metadati; il compressore riduce le dimensioni.
  • c, x e t creano, estraggono ed elencano; z, J e --zstd aggiungono la compressione.
  • gzip per la compatibilità, xz per i file più piccoli, zstd per velocità e backup frequenti.
  • Un archivio altrui si elenca prima di estrarlo, meglio se in una cartella vuota.
  • ZIP è il formato per scambiare file con Windows e macOS, non per i backup di sistema.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica e in psicologia, unisce l'analisi tecnica alla comprensione del fattore umano.

Leggi anche