gzip: comprimere file su Linux, decomprimere gzip e usare gunzip e zcat
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
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 -ltotal 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 restoreSe 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.logDopo 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.gzls: cannot access 'access.log': No such file or directory
-rw-r--r-- 1 root root 4424 Oct 28 23:50 access.log.gzCon -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.txtreadme.txt: 81.5% -- replaced with readme.txt.gzPer 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.txtls -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.gzIl 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.confconfig/app.conf: 78.7% -- replaced with config/app.conf.gz
config/site.conf: 87.7% -- replaced with config/site.conf.gzls -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.gz2️⃣ Decomprimere gzip
Decomprimendo access.log.gz con -d non compare nulla, access.log torna e access.log.gz non resta.
gzip -d access.log.gzls -l access.log access.log.gzls: cannot access 'access.log.gz': No such file or directory
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.logL'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.gzreadme.txt.gz: 81.5% -- created readme.txtls -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.gzgzip 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.txtls -l restore/total 4
-rw-r--r-- 1 root root 45 Oct 29 00:19 memo.txtDecomprimendo 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 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.loggzip -l access.log.gz compressed uncompressed ratio uncompressed_name
4424 31878 86.2% access.logAggiungendo -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.gzmethod 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.gzaccess.log.gz: OKI 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 -c5564gzip -c -6 access.log | wc -c4424gzip -c -9 access.log | wc -c4164| Livello di compressione | Dimensione .gz | Rispetto all'originale |
|---|---|---|
| File originale (access.log) | 31.878 byte | 100% |
| -1 (il più veloce) | 5.564 byte | 17.5% |
| -6 (predefinito) | 4.424 byte | 13.9% |
| -9 (il più piccolo) | 4.164 byte | 13.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 configgzip: config is a directory -- ignoredPer 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 configconfig/app.conf.gz: 78.7% -- replaced with config/app.conf
config/site.conf.gz: 87.7% -- replaced with config/site.confls -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 configtar -tzvf config.tar.gzdrwxr-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
| Opzione | Compito | Risultato in questo articolo | |
|---|---|---|---|
| -c | Manda 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 | |
| -d | Decomprimere (come gunzip) | access.log.gz sparisce e torna access.log di 31878 byte | |
| -k | Mantiene il file originale dopo la compressione o la decompressione | memo.txt (45 byte) e memo.txt.gz (71 byte) restano affiancati | |
| -v | Mostra per ogni file la percentuale di riduzione e il nuovo nome | readme.txt: 81.5% -- replaced with readme.txt.gz | |
| -l | Elenca dimensione, percentuale e nome dopo la decompressione dei file compressi | Dimensione compressa 4424, dimensione originale 31878, percentuale 86.2%, nome access.log | |
| -t | Controlla che il file compresso non sia danneggiato | Con -tv access.log.gz: OK, e unexpected end of file per broken.gz, con la fine tagliata | |
| -r | Comprime o decomprime tutti i file di una cartella | Un solo gunzip -rv config ha decompresso config/app.conf.gz e config/site.conf.gz | |
| -f | Sovrascrive senza chiedere anche se esiste un file con lo stesso nome | Sovrascritto senza domanda: non c'è più memo.txt, resta solo memo.txt.gz (71 byte) | |
| -1 ~ -9 | Livello 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
| Opzione | Compito | |
|---|---|---|
| -N | In compressione salva il nome e l'orario del file originale (predefinito in compressione) e in decompressione ripristina il nome e l'orario salvati | |
| -n | In compressione non salva il nome e l'orario del file originale e in decompressione usa il nome senza .gz (predefinito in decompressione) | |
| -q | Non mostra alcun avviso | |
| -S suffisso | Comprime aggiungendo il suffisso indicato al posto di .gz e in decompressione cerca prima quel suffisso | |
| --rsyncable | Comprime 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.
4️⃣ Vedere il contenuto dei file gzip
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-20261027Un 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 -3192.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 13813L'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 -l600Per 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.gz37zgrep ' 404 ' access.log-20261027.gz | head -3192.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 414Se 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 formatzgrep 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.gzaccess.log:36
access.log-20261027.gz:525️⃣ Errori di gzip
Se ricomprimi un file che termina già con .gz, compare [already has .gz suffix -- unchanged] e il file resta com'è.
gzip access.log.gzgzip: access.log.gz already has .gz suffix -- unchangedAl contrario, se decomprimi con -d un file che non termina con .gz, compare [unknown suffix -- ignored].
gzip -d memo.txtgzip: memo.txt: unknown suffix -- ignoredUn 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.gzgzip -d notgzip.gz
gzip: notgzip.gz: not in gzip formatUn 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.gzgzip -t broken.gz
gzip: broken.gz: unexpected end of fileAnche 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.logwc -l restore/broken.log
gzip: broken.gz: unexpected end of file
162 restore/broken.logSe 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.txtgzip: memo.txt.gz already exists; do you wish to overwrite (y or n)? n
not overwrittenCon -f, gzip sovrascrive subito senza chiedere. Poiché -k non è stato aggiunto, memo.txt sparisce e resta solo memo.txt.gz.
gzip -f memo.txtls -l memo.txt memo.txt.gzls: cannot access 'memo.txt': No such file or directory
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gzEcco i messaggi di errore comparsi lavorando con la compressione e cosa controllare dopo.
| Output | Significato | Cosa controllare dopo |
|---|---|---|
| already has .gz suffix -- unchanged | Il file termina già con .gz, quindi non viene ricompresso | Se hai scritto il nome del file originale da comprimere |
| unknown suffix -- ignored | Si è provato a decomprimere un file che non termina con .gz | Il nome del file .gz con ls |
| not in gzip format | Si chiama .gz ma non è stato compresso con gzip | Il formato reale (zip, tar) e il comando adatto |
| unexpected end of file | La fine del file compresso è tagliata | Confrontare la dimensione con l'originale e riscaricare · salvare la parte iniziale con zcat |
| already exists; do you wish to overwrite | Esiste già un file con lo stesso nome di quello da creare | y o -f se si può sovrascrivere · -c con un altro nome per conservarlo |
| is a directory -- ignored | Nome di una cartella al posto di un file | -r per i file di una cartella · tar per riunirli in uno |
🔢 FAQ & contenuti consigliati
Cerca
Comando grep di Linux
Il comando grep per trovare una stringa in file di testo come i log, con esempi che lo collegano a tail e find tramite pipe.
Disco
Comando du: controllare lo spazio su disco dei file
Il comando du per controllare quanto spazio su disco occupano file e directory.
Visualizzazione dei file
Comandi head e tail di Linux
I comandi head e tail per vedere le prime e le ultime righe di un file, usati spesso per controllare i log di accesso del server.
ℹ️ 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.