gzip: comprimir archivos en Linux, descomprimir gzip y usar gunzip y zcat
gzip es el comando de Linux que comprime un solo archivo en un archivo .gz; para descomprimir, añade -d al mismo comando o usa gunzip. En un servidor AlmaLinux 9, un registro de acceso de 31.878 bytes quedó en 4.424 bytes, y al descomprimirlo volvieron el tamaño y la hora de modificación originales.
La salida de abajo se obtuvo en una carpeta de prueba de un servidor AlmaLinux 9.8 con la cuenta root, y las horas están en UTC. Los registros de acceso, las notas y los archivos de configuración son archivos de ejemplo creados para la prueba, y las direcciones IP de los registros también son valores de ejemplo para documentación.
1️⃣ Cómo usar el comando gzip
La carpeta de prueba contiene dos registros de acceso, dos archivos de notas, una carpeta config con archivos de configuración y una carpeta restore vacía.
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 restoreSi escribes un nombre de archivo después de gzip, ese archivo se convierte en un archivo comprimido con .gz añadido al final del nombre. El comando de abajo comprime access.log y no muestra nada al terminar.
gzip access.logDespués de comprimir, ls -l ya no muestra access.log, solo access.log.gz. El registro de 31.878 bytes pasó a 4.424 bytes, y la hora de modificación sigue siendo la del archivo original.
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 muestra para cada archivo el porcentaje de reducción y el nombre del nuevo archivo. El [81.5%] de la línea de readme.txt es cuánto se redujo respecto al tamaño original, y [replaced with] significa que el archivo original se sustituyó por el archivo .gz.
gzip -v readme.txtreadme.txt: 81.5% -- replaced with readme.txt.gzPara conservar el archivo original, añade -k. Si comprimes memo.txt con -k, quedan memo.txt y memo.txt.gz uno al lado del otro.
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.gzEl memo.txt de 45 bytes incluso creció a 71 bytes tras comprimirlo. Según el manual oficial, gzip comprime aunque el resultado sea mayor que el original, y guarda dentro del archivo comprimido el nombre y la hora del archivo original.
Si indicas varios archivos a la vez, cada uno genera su propio archivo .gz. Al comprimir los dos archivos de configuración de la carpeta config se obtienen dos archivos, app.conf.gz y 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️⃣ Descomprimir gzip
Al descomprimir access.log.gz con -d no se muestra nada, vuelve a aparecer access.log y access.log.gz desaparece.
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.logEl access.log recuperado mide 31.878 bytes, y su hora de modificación es la misma que antes de comprimir, Oct 28 23:50.
gunzip hace lo mismo que gzip -d. Si añades -k, descomprime conservando el archivo comprimido, y el [created] de la línea de -v significa que creó un archivo nuevo sin borrar el archivo .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 no tiene una opción para elegir la carpeta de destino, así que para descomprimir en otra carpeta usa -c para enviar el contenido descomprimido a la salida estándar y escribe la ruta del nuevo archivo después de [>]. El comando de abajo descomprime memo.txt.gz en memo.txt dentro de la carpeta 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.txtAl descomprimir con -c, memo.txt.gz se queda tal cual. La hora de modificación del nuevo restore/memo.txt es Oct 29 00:19, cuando se creó el archivo.
3️⃣ Opciones del comando gzip
-l muestra en una línea, sin descomprimir, el tamaño comprimido, el tamaño original, el porcentaje de reducción y el nombre que tendrá el archivo al descomprimirlo. Si vuelves a comprimir access.log con -k y lo compruebas con -l, se ve así.
gzip -k access.loggzip -l access.log.gz compressed uncompressed ratio uncompressed_name
4424 31878 86.2% access.logSi añades -v, delante aparecen el método de compresión (defla, abreviatura de deflate), el CRC de los datos originales y la fecha y hora del archivo original.
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 solo comprueba que el archivo comprimido no esté dañado y termina. Si lo usas con -v, aparece [OK] después de cada archivo sin problemas.
gzip -tv access.log.gzaccess.log.gz: OKLos números del -1 al -9 indican el nivel de compresión, y según el manual oficial el valor predeterminado es -6. Se comprimió tres veces el mismo access.log con -c y se compararon los tamaños con wc -c.
gzip -c -1 access.log | wc -c5564gzip -c -6 access.log | wc -c4424gzip -c -9 access.log | wc -c4164| Nivel de compresión | Tamaño .gz | Respecto al tamaño original |
|---|---|---|
| Archivo original (access.log) | 31.878 bytes | 100% |
| -1 (el más rápido) | 5.564 bytes | 17.5% |
| -6 (predeterminado) | 4.424 bytes | 13.9% |
| -9 (el más pequeño) | 4.164 bytes | 13.1% |
-9 fue 260 bytes más pequeño que el predeterminado, y -1 fue 1.140 bytes más grande que el predeterminado.
Si escribes solo el nombre de una carpeta, aparece [is a directory -- ignored] y la carpeta se omite.
gunzip configgzip: config is a directory -- ignoredPara procesar todos los archivos de una carpeta, añade -r. Al descomprimir con gunzip -r la carpeta config, donde se habían comprimido los dos archivos de configuración, los dos archivos se descomprimen uno tras otro.
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 descomprime por separado cada archivo de la carpeta y no junta varios archivos en uno. Para convertir una carpeta en un único archivo comprimido, usa el comando tar para empaquetarla y comprimirla a la vez. Al comprimir la carpeta config con tar -czf, la carpeta y los dos archivos quedan dentro de un solo 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📌 Opciones principales: resultados de este artículo
| Opción | Tarea | Resultado en este artículo | |
|---|---|---|---|
| -c | Envía el resultado a la salida estándar y deja el archivo original como está | Al pasar la salida de -dc a restore/memo.txt se creó un memo.txt de 45 bytes | |
| -d | Descomprimir (igual que gunzip) | access.log.gz desaparece y vuelve access.log de 31878 bytes | |
| -k | Conserva el archivo original tras comprimir o descomprimir | Quedan memo.txt (45 bytes) y memo.txt.gz (71 bytes) uno al lado del otro | |
| -v | Muestra el porcentaje de reducción y el nombre del nuevo archivo para cada archivo | readme.txt: 81.5% -- replaced with readme.txt.gz | |
| -l | Muestra en lista el tamaño, el porcentaje y el nombre al descomprimir de los archivos comprimidos | Tamaño comprimido 4424, tamaño original 31878, porcentaje 86.2%, nombre access.log | |
| -t | Comprueba que el archivo comprimido no esté dañado | Con -tv, access.log.gz: OK, y broken.gz, con el final cortado, da unexpected end of file | |
| -r | Comprime o descomprime todos los archivos de una carpeta | Un solo gunzip -rv config descomprime config/app.conf.gz y config/site.conf.gz | |
| -f | Sobrescribe sin preguntar aunque exista un archivo con el mismo nombre | Se sobrescribe sin preguntar: no queda memo.txt y solo queda memo.txt.gz (71 bytes) | |
| -1 ~ -9 | Nivel de compresión (-1 el más rápido, -9 el más pequeño, predeterminado -6) | Al contar con wc -c la salida comprimida con -1, -6 y -9: 5564, 4424 y 4164 |
📎 Otras opciones: según el manual oficial
| Opción | Tarea | |
|---|---|---|
| -N | Al comprimir guarda el nombre y la hora del archivo original (predeterminado al comprimir), y al descomprimir restaura el nombre y la hora guardados | |
| -n | Al comprimir no guarda el nombre ni la hora del archivo original, y al descomprimir usa el nombre sin .gz (predeterminado al descomprimir) | |
| -q | No muestra ningún aviso | |
| -S sufijo | Comprime añadiendo el sufijo indicado en lugar de .gz, y al descomprimir busca primero ese sufijo | |
| --rsyncable | Comprime de forma que, al sincronizar archivos comprimidos con otro servidor mediante rsync, solo se envíen las partes cambiadas |
🔲 Simulador del comando gzip
En el simulador de abajo puedes escribir tú mismo los comandos para comprimir con gzip, descomprimir y ver el contenido con zcat y zgrep.
4️⃣ Ver el contenido de un archivo gzip
Los registros antiguos guardados con fecha ocupan menos espacio si los comprimes con gzip. El comando de abajo comprime access.log-20261027, el registro del día anterior.
gzip access.log-20261027Un registro comprimido se muestra en pantalla con zcat sin descomprimirlo. zcat es el mismo comando que gunzip -c (según el manual oficial), así que el archivo .gz se queda tal cual.
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 13813La salida de zcat se puede pasar a otros comandos con una tubería, y al contarlo con wc -l este registro tiene 600 líneas.
zcat access.log-20261027.gz | wc -l600Para buscar un texto concreto en un registro comprimido, usa zgrep. Con -c solo aparece el número de líneas que contienen [ 404 ]; para ver las líneas, ejecútalo sin -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 414Si zcat recibe un archivo sin comprimir, muestra [not in gzip format] y se detiene.
zcat access.log | head -1
gzip: access.log: not in gzip formatzgrep también lee tal cual los archivos sin comprimir, así que puedes buscar a la vez en el registro actual y en los registros antiguos comprimidos. Si indicas dos o más archivos, el nombre del archivo aparece delante del número de líneas.
zgrep -c wp-login.php access.log access.log-20261027.gzaccess.log:36
access.log-20261027.gz:525️⃣ Errores de gzip
Si vuelves a comprimir un archivo que ya termina en .gz, aparece [already has .gz suffix -- unchanged] y el archivo se queda igual.
gzip access.log.gzgzip: access.log.gz already has .gz suffix -- unchangedAl revés, si descomprimes con -d un archivo que no termina en .gz, aparece [unknown suffix -- ignored].
gzip -d memo.txtgzip: memo.txt: unknown suffix -- ignoredUn archivo que solo se llama .gz pero no se comprimió con gzip termina con [not in gzip format]. Este mensaje apareció al copiar el archivo de texto memo.txt con el nombre notgzip.gz y descomprimirlo.
cp memo.txt notgzip.gzgzip -d notgzip.gz
gzip: notgzip.gz: not in gzip formatUn archivo .gz con el final cortado, por ejemplo por una descarga interrumpida, termina con [unexpected end of file]. Este es el resultado de comprobar con -t broken.gz, que conservó solo los primeros 2.000 bytes de un registro antiguo comprimido.
head -c 2000 access.log-20261027.gz > broken.gzgzip -t broken.gz
gzip: broken.gz: unexpected end of fileIncluso de un archivo cortado, zcat puede sacar el contenido hasta el punto del corte. De las 600 líneas del registro quedaron 162 en restore/broken.log, y el manual oficial también aconseja usar zcat para rescatar la primera parte de un archivo comprimido dañado.
zcat broken.gz > restore/broken.logwc -l restore/broken.log
gzip: broken.gz: unexpected end of file
162 restore/broken.logSi ya existe un archivo con el mismo nombre que el .gz que se va a crear, gzip pregunta si quieres sobrescribirlo. Si escribes n, termina con [not overwritten] sin cambiar nada.
gzip memo.txtgzip: memo.txt.gz already exists; do you wish to overwrite (y or n)? n
not overwrittenCon -f, gzip sobrescribe directamente sin preguntar. Como no se añadió -k, memo.txt desaparece y solo queda 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.gzLos mensajes de error que salieron al trabajar con la compresión y lo que conviene comprobar después son estos.
| Salida | Significado | Qué revisar después |
|---|---|---|
| already has .gz suffix -- unchanged | El archivo ya termina en .gz, así que no se vuelve a comprimir | Si escribiste el nombre del archivo original que quieres comprimir |
| unknown suffix -- ignored | Se intentó descomprimir un archivo que no termina en .gz | El nombre del archivo .gz con ls |
| not in gzip format | Se llama .gz pero no se comprimió con gzip | El formato real (zip, tar) y el comando que le corresponde |
| unexpected end of file | El final del archivo comprimido está cortado | Comparar el tamaño con el original y volver a descargar · rescatar la primera parte con zcat |
| already exists; do you wish to overwrite | Ya existe un archivo con el mismo nombre que el que se va a crear | y o -f si se puede sobrescribir · -c con otro nombre para conservarlo |
| is a directory -- ignored | Se escribió el nombre de una carpeta en lugar de un archivo | -r para los archivos de una carpeta · tar para juntarlos en uno |
🔢 FAQ & contenido recomendado
Buscar
Comando grep de Linux
El comando grep para buscar una cadena en archivos de texto como los registros, con ejemplos que lo combinan con tail y find mediante tuberías.
Disco
Comando du: comprobar el espacio en disco de archivos
El comando du para comprobar cuánto espacio en disco ocupan los archivos y directorios.
Ver archivos
Comando head y comando tail de Linux
Los comandos head y tail para ver las primeras y las últimas líneas de un archivo, muy usados para revisar los registros de acceso del servidor.
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.