gzip: comprimere file su Linux, decomprimere gzip e usare gunzip e zcat

Ambiente di testFamiglia RHELAlmaLinux 9.8account rootVerificato il 2026-11-05
Comandi di compressione · archiviazionegzipgunzipzcatPosizione/usr/bin/gzip
Comprimere file su Linux e decomprimere gzip

gzip è il comando Linux che comprime un singolo file in un file .gz; per decomprimere aggiungi -d allo stesso comando oppure usa gunzip. Su un server AlmaLinux 9 un log di accesso di 31.878 byte è sceso a 4.424 byte, e dopo la decompressione sono tornati la dimensione e l'orario di modifica originali.

L'output qui sotto proviene da una cartella di prova su un server AlmaLinux 9.8, eseguito come root, con orari in UTC. I log di accesso, le note e i file di configurazione sono file di esempio creati per la prova, e anche gli indirizzi IP nei log sono valori di esempio per la documentazione.

1️⃣ Come usare il comando gzip

  • ↪️ Comprimere un file e mantenere l'originale (-k)

Nella cartella di prova ci sono due log di accesso, due file di note, una cartella config con file di configurazione e una cartella restore vuota.

ls -l
total 88
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.log
-rw-r--r-- 1 root root 47748 Oct 27 23:59 access.log-20261027
drwxr-xr-x 2 root root    39 Oct 29 00:19 config
-rw-r--r-- 1 root root    45 Oct 28 14:30 memo.txt
-rw-r--r-- 1 root root   426 Oct 27 09:10 readme.txt
drwxr-xr-x 2 root root     6 Oct 29 00:19 restore

Se scrivi un nome di file dopo gzip, quel file diventa un file compresso con .gz aggiunto in fondo al nome. Il comando qui sotto comprime access.log e alla fine non stampa nulla.

gzip access.log

Dopo la compressione, ls -l non mostra più access.log ma solo access.log.gz. Il log di 31.878 byte è diventato di 4.424 byte, e l'orario di modifica è ancora quello del file originale.

ls -l access.log access.log.gz
ls: cannot access 'access.log': No such file or directory
-rw-r--r-- 1 root root 4424 Oct 28 23:50 access.log.gz

Con -v, gzip mostra per ogni file la percentuale di riduzione e il nuovo nome. Il [81.5%] sulla riga di readme.txt indica di quanto si è ridotta la dimensione originale, e [replaced with] significa che il file originale è stato sostituito dal file .gz.

gzip -v readme.txt
readme.txt:	 81.5% -- replaced with readme.txt.gz

Per mantenere il file originale, aggiungi -k. Se comprimi memo.txt con -k, memo.txt e memo.txt.gz restano uno accanto all'altro.

gzip -k memo.txt
ls -l memo.txt memo.txt.gz
-rw-r--r-- 1 root root 45 Oct 28 14:30 memo.txt
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gz

Il memo.txt di 45 byte dopo la compressione è perfino cresciuto a 71 byte. Secondo il manuale ufficiale, gzip comprime anche quando il risultato è più grande dell'originale e salva nel file compresso il nome e l'orario del file originale.

Se indichi più file insieme, ognuno produce il proprio file .gz. Comprimendo i due file di configurazione della cartella config si ottengono due file, app.conf.gz e site.conf.gz.

gzip -v config/app.conf config/site.conf
config/app.conf:	 78.7% -- replaced with config/app.conf.gz
config/site.conf:	 87.7% -- replaced with config/site.conf.gz
ls -l config/
total 8
-rw-r--r-- 1 root root 206 Oct 20 11:00 app.conf.gz
-rw-r--r-- 1 root root  93 Oct 20 11:05 site.conf.gz

2️⃣ Decomprimere gzip

  • ↪️ gzip -d e gunzip, decomprimere in un'altra cartella (-c)

Decomprimendo access.log.gz con -d non compare nulla, access.log torna e access.log.gz non resta.

gzip -d access.log.gz
ls -l access.log access.log.gz
ls: cannot access 'access.log.gz': No such file or directory
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.log

L'access.log ripristinato è di 31.878 byte, e l'orario di modifica è lo stesso di prima della compressione, Oct 28 23:50.

gunzip fa la stessa cosa di gzip -d. Con -k decomprime mantenendo il file compresso, e [created] sulla riga di -v significa che è stato creato un nuovo file senza cancellare il file .gz.

gunzip -kv readme.txt.gz
readme.txt.gz:	 81.5% -- created readme.txt
ls -l readme.txt readme.txt.gz
-rw-r--r-- 1 root root 426 Oct 27 09:10 readme.txt
-rw-r--r-- 1 root root 108 Oct 27 09:10 readme.txt.gz

gzip non ha un'opzione per scegliere la cartella di destinazione, quindi per decomprimere in un'altra cartella usa -c per mandare il contenuto decompresso allo standard output e scrivi il percorso del nuovo file dopo [>]. Il comando qui sotto decomprime memo.txt.gz in memo.txt nella cartella restore.

gzip -dc memo.txt.gz > restore/memo.txt
ls -l restore/
total 4
-rw-r--r-- 1 root root 45 Oct 29 00:19 memo.txt

Decomprimendo con -c, memo.txt.gz resta dov'è. Il nuovo restore/memo.txt ha come orario di modifica Oct 29 00:19, il momento in cui il file è stato creato.

3️⃣ Opzioni del comando gzip

  • ↪️ -l, -t, livello di compressione, -r

-l stampa su una riga, senza decomprimere, la dimensione compressa, la dimensione originale, la percentuale di riduzione e il nome che avrà il file una volta decompresso. Ricomprimendo access.log con -k e controllando con -l, il risultato è questo.

gzip -k access.log
gzip -l access.log.gz
         compressed        uncompressed  ratio uncompressed_name
               4424               31878  86.2% access.log

Aggiungendo -v, davanti compaiono il metodo di compressione (defla, abbreviazione di deflate), il CRC dei dati originali e la data e l'ora del file originale.

gzip -lv access.log.gz
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla b49b41c4 Oct 28 23:50                4424               31878  86.2% access.log

-t controlla solo che il file compresso non sia danneggiato e termina. Usato con -v, mostra [OK] dopo ogni file senza problemi.

gzip -tv access.log.gz
access.log.gz:	 OK

I numeri da -1 a -9 indicano il livello di compressione, e secondo il manuale ufficiale il valore predefinito è -6. Lo stesso access.log è stato compresso tre volte con -c e le dimensioni sono state confrontate con wc -c.

gzip -c -1 access.log | wc -c
5564
gzip -c -6 access.log | wc -c
4424
gzip -c -9 access.log | wc -c
4164
Livello di compressioneDimensione .gzRispetto all'originale
File originale (access.log)31.878 byte100%
-1 (il più veloce)5.564 byte17.5%
-6 (predefinito)4.424 byte13.9%
-9 (il più piccolo)4.164 byte13.1%

-9 era 260 byte più piccolo del predefinito, e -1 era 1.140 byte più grande del predefinito.

Se scrivi solo il nome di una cartella, compare [is a directory -- ignored] e la cartella viene saltata.

gunzip config
gzip: config is a directory -- ignored

Per elaborare tutti i file di una cartella, aggiungi -r. Decomprimendo con gunzip -r la cartella config, dove erano stati compressi i due file di configurazione, i due file vengono decompressi uno dopo l'altro.

gunzip -rv config
config/app.conf.gz:	 78.7% -- replaced with config/app.conf
config/site.conf.gz:	 87.7% -- replaced with config/site.conf
ls -l config/
total 8
-rw-r--r-- 1 root root 840 Oct 20 11:00 app.conf
-rw-r--r-- 1 root root 528 Oct 20 11:05 site.conf

-r comprime o decomprime uno per uno i file di una cartella e non riunisce più file in uno solo. Per trasformare una cartella in un unico file compresso, usa il comando tar, che raggruppa e comprime in un solo passaggio. Comprimendo la cartella config con tar -czf, la cartella e i due file finiscono in un unico config.tar.gz.

tar -czf config.tar.gz config
tar -tzvf config.tar.gz
drwxr-xr-x root/root         0 2026-10-29 00:19 config/
-rw-r--r-- root/root       840 2026-10-20 11:00 config/app.conf
-rw-r--r-- root/root       528 2026-10-20 11:05 config/site.conf

📌 Opzioni principali: risultati di questo articolo

OpzioneCompitoRisultato in questo articolo
-cManda il risultato allo standard output e lascia il file originale com'èL'output di -dc mandato a restore/memo.txt ha creato un memo.txt di 45 byte
-dDecomprimere (come gunzip)access.log.gz sparisce e torna access.log di 31878 byte
-kMantiene il file originale dopo la compressione o la decompressionememo.txt (45 byte) e memo.txt.gz (71 byte) restano affiancati
-vMostra per ogni file la percentuale di riduzione e il nuovo nomereadme.txt: 81.5% -- replaced with readme.txt.gz
-lElenca dimensione, percentuale e nome dopo la decompressione dei file compressiDimensione compressa 4424, dimensione originale 31878, percentuale 86.2%, nome access.log
-tControlla che il file compresso non sia danneggiatoCon -tv access.log.gz: OK, e unexpected end of file per broken.gz, con la fine tagliata
-rComprime o decomprime tutti i file di una cartellaUn solo gunzip -rv config ha decompresso config/app.conf.gz e config/site.conf.gz
-fSovrascrive senza chiedere anche se esiste un file con lo stesso nomeSovrascritto senza domanda: non c'è più memo.txt, resta solo memo.txt.gz (71 byte)
-1 ~ -9Livello di compressione (-1 il più veloce, -9 il più piccolo, predefinito -6)Gli output compressi con -1, -6 e -9 contati con wc -c: 5564, 4424, 4164

📎 Altre opzioni: secondo il manuale ufficiale

OpzioneCompito
-NIn compressione salva il nome e l'orario del file originale (predefinito in compressione) e in decompressione ripristina il nome e l'orario salvati
-nIn compressione non salva il nome e l'orario del file originale e in decompressione usa il nome senza .gz (predefinito in decompressione)
-qNon mostra alcun avviso
-S suffissoComprime aggiungendo il suffisso indicato al posto di .gz e in decompressione cerca prima quel suffisso
--rsyncableComprime in modo che, sincronizzando file compressi con un altro server tramite rsync, vengano inviate solo le parti modificate

🔲 Simulatore del comando gzip

Nel simulatore qui sotto puoi digitare tu stesso i comandi per comprimere con gzip, decomprimere e vedere il contenuto con zcat e zgrep.

Simulatore del comando gzipgzip 1.12
[root@server work]#
Funziona solo nel browser e non comprime file reali. Le dimensioni compresse sono valori misurati, mentre per i contenuti creati nel simulatore si usano valori stimati. Con ↑↓ richiami i comandi precedenti.

4️⃣ Vedere il contenuto dei file gzip

  • ↪️ zcat · zgrep

I vecchi log conservati con la data nel nome occupano meno spazio se li comprimi con gzip. Il comando qui sotto comprime access.log-20261027, il log del giorno prima.

gzip access.log-20261027

Un log compresso si mostra a schermo con zcat senza decomprimerlo. zcat è lo stesso comando di gunzip -c (secondo il manuale ufficiale), quindi il file .gz resta dov'è.

zcat access.log-20261027.gz | head -3
192.0.2.50 - - [27/Oct/2026:00:00:00 +0000] GET / HTTP/1.1 200 15929
192.0.2.54 - - [27/Oct/2026:00:00:07 +0000] GET / HTTP/1.1 200 17699
192.0.2.4 - - [27/Oct/2026:00:00:14 +0000] GET / HTTP/1.1 200 13813

L'output di zcat si può passare ad altri comandi con una pipe, e contato con wc -l questo log ha 600 righe.

zcat access.log-20261027.gz | wc -l
600

Per cercare un testo preciso in un log compresso, usa zgrep. Con -c compare solo il numero di righe che contengono [ 404 ]; per vedere le righe, eseguilo senza -c.

zgrep -c ' 404 ' access.log-20261027.gz
37
zgrep ' 404 ' access.log-20261027.gz | head -3
192.0.2.23 - - [27/Oct/2026:00:02:06 +0000] GET /old-page-6/ HTTP/1.1 404 229
192.0.2.38 - - [27/Oct/2026:00:04:40 +0000] GET /old-page-2/ HTTP/1.1 404 217
192.0.2.22 - - [27/Oct/2026:00:07:42 +0000] GET /old-page-6/ HTTP/1.1 404 414

Se zcat riceve un file non compresso, stampa [not in gzip format] e si ferma.

zcat access.log | head -1

gzip: access.log: not in gzip format

zgrep legge così come sono anche i file non compressi, quindi puoi cercare in una volta nel log attuale e nei vecchi log compressi. Con due o più file, il nome del file compare davanti al numero di righe.

zgrep -c wp-login.php access.log access.log-20261027.gz
access.log:36
access.log-20261027.gz:52

5️⃣ Errori di gzip

  • ↪️ not in gzip format e unexpected end of file

Se ricomprimi un file che termina già con .gz, compare [already has .gz suffix -- unchanged] e il file resta com'è.

gzip access.log.gz
gzip: access.log.gz already has .gz suffix -- unchanged

Al contrario, se decomprimi con -d un file che non termina con .gz, compare [unknown suffix -- ignored].

gzip -d memo.txt
gzip: memo.txt: unknown suffix -- ignored

Un file che si chiama soltanto .gz ma non è stato compresso con gzip termina con [not in gzip format]. Questo messaggio è comparso copiando il file di testo memo.txt con il nome notgzip.gz e decomprimendolo.

cp memo.txt notgzip.gz
gzip -d notgzip.gz

gzip: notgzip.gz: not in gzip format

Un file .gz con la fine tagliata, ad esempio per un download interrotto, termina con [unexpected end of file]. Questo è il risultato del controllo con -t di broken.gz, che conservava solo i primi 2.000 byte di un vecchio log compresso.

head -c 2000 access.log-20261027.gz > broken.gz
gzip -t broken.gz

gzip: broken.gz: unexpected end of file

Anche da un file tagliato, zcat riesce a estrarre il contenuto fino al punto del taglio. Delle 600 righe del log ne sono rimaste 162 in restore/broken.log, e anche il manuale ufficiale consiglia di salvare con zcat la parte iniziale di un file compresso danneggiato.

zcat broken.gz > restore/broken.log
wc -l restore/broken.log

gzip: broken.gz: unexpected end of file
162 restore/broken.log

Se esiste già un file con lo stesso nome del .gz da creare, gzip chiede se sovrascriverlo. Digitando n, il comando termina con [not overwritten] senza cambiare nulla.

gzip memo.txt
gzip: memo.txt.gz already exists; do you wish to overwrite (y or n)? n
	not overwritten

Con -f, gzip sovrascrive subito senza chiedere. Poiché -k non è stato aggiunto, memo.txt sparisce e resta solo memo.txt.gz.

gzip -f memo.txt
ls -l memo.txt memo.txt.gz
ls: cannot access 'memo.txt': No such file or directory
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gz

Ecco i messaggi di errore comparsi lavorando con la compressione e cosa controllare dopo.

OutputSignificatoCosa controllare dopo
already has .gz suffix -- unchangedIl file termina già con .gz, quindi non viene ricompressoSe hai scritto il nome del file originale da comprimere
unknown suffix -- ignoredSi è provato a decomprimere un file che non termina con .gzIl nome del file .gz con ls
not in gzip formatSi chiama .gz ma non è stato compresso con gzipIl formato reale (zip, tar) e il comando adatto
unexpected end of fileLa fine del file compresso è tagliataConfrontare la dimensione con l'originale e riscaricare · salvare la parte iniziale con zcat
already exists; do you wish to overwriteEsiste già un file con lo stesso nome di quello da crearey o -f se si può sovrascrivere · -c con un altro nome per conservarlo
is a directory -- ignoredNome di una cartella al posto di un file-r per i file di una cartella · tar per riunirli in uno

🔢 FAQ & contenuti consigliati

Dopo aver raggruppato la cartella config in x.tar con tar, averlo compresso con gzip -v e decompresso con gunzip -v, è stato tolto solo lo strato .gz ed è rimasto un x.tar di 10.240 byte. Per estrarre i file raggruppati bisogna aprirlo ancora una volta con tar. Ricomprimendo x.tar.gz ed estraendolo con tar -xzf nella cartella restore/t, la cartella config e i due file di configurazione sono usciti in un colpo solo.

Un file di 28.648.800 byte, ottenuto unendo 600 volte lo stesso log di accesso, è stato compresso due volte a ogni livello. -1 ha impiegato circa 0,3 secondi per 4.821.317 byte, il predefinito -6 circa 0,65 secondi per 3.625.500 byte e -9 circa 2,5 secondi per 3.376.224 byte. -9 era circa il 7% più piccolo di -6, ma ha richiesto quasi quattro volte il tempo.

gzip, quando comprime, salva il nome del file originale dentro il .gz. Dopo aver copiato readme.txt.gz nella cartella restore come backup-1.gz, gzip -lN ha mostrato il nome salvato readme.txt, e gunzip -N ha creato restore/readme.txt. Senza -N il nome è quello del file senza .gz (secondo il manuale ufficiale).

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 10   +   6   =