Skip to main content
Back to blog
· 6 min read

Gzip y Tar: compresión y empaquetado de archivos en Linux

Guía técnica de los comandos gzip y tar en Linux: compresión, empaquetado, banderas esenciales, ejemplos prácticos y flujos de trabajo para desarrolladores y administradores de sistemas.

linux terminal sre

gzip y tar son dos comandos fundamentales en el ecosistema Unix/Linux que suelen usarse en conjunto. tar agrupa múltiples archivos y directorios en un único archivo (tarball), mientras que gzip comprime ese archivo para reducir su tamaño. Dominar ambos comandos es esencial para tareas cotidianas como la creación de backups, la distribución de paquetes de código y la transferencia eficiente de datos entre servidores.

Verificación e instalación

Ambas herramientas vienen preinstaladas en la mayoría de distribuciones Linux. Para verificar su disponibilidad:

gzip --version
tar --version

En caso de no estar instaladas (poco común), se pueden obtener desde el gestor de paquetes:

# Debian/Ubuntu
sudo apt install gzip tar

# RHEL/Fedora
sudo dnf install gzip tar

Comando gzip

gzip (GNU Zip) es una herramienta diseñada para comprimir un único archivo. Genera un archivo con extensión .gz y, por defecto, elimina el archivo original después de comprimir.

Sintaxis

gzip [OPCIONES] [ARCHIVO]

Banderas principales

BanderaDescripción
-dDescomprime el archivo (equivale a gunzip)
-kConserva el archivo original después de comprimir o descomprimir
-rComprime de forma recursiva los archivos en subdirectorios
-vMuestra información detallada con el porcentaje de compresión
-lMuestra estadísticas del archivo comprimido (tamaño original, ratio, etc.)
-1Compresión más rápida (menor ratio)
-9Compresión máxima (más lenta)
-tVerifica la integridad del archivo comprimido

Ejemplos de uso

# Comprimir un archivo (elimina el original)
gzip notas.txt
# Resultado: notas.txt.gz

# Comprimir conservando el archivo original
gzip -k data.log
# Resultado: data.log y data.log.gz

# Comprimir con máxima compresión y salida detallada
gzip -9 -v backup.sql
# Resultado: backup.sql.gz  72.3% -- replaced with backup.sql.gz

# Descomprimir un archivo
gzip -d notas.txt.gz
# Resultado: notas.txt

# Descomprimir conservando el archivo comprimido
gzip -d -k notas.txt.gz
# Resultado: notas.txt y notas.txt.gz

# Comprimir recursivamente todos los archivos de un directorio
gzip -r ./logs/

# Ver estadísticas de un archivo comprimido
gzip -l backup.sql.gz

# Verificar integridad sin descomprimir
gzip -t backup.sql.gz

Lectura de archivos comprimidos

Para leer el contenido de un archivo .gz sin descomprimirlo, se puede usar zcat, zless o zgrep:

# Mostrar contenido en stdout
zcat access.log.gz

# Paginar contenido comprimido
zless access.log.gz

# Buscar patrones dentro de archivos comprimidos
zgrep "ERROR" application.log.gz

Comando tar

tar (Tape ARchiver) agrupa múltiples archivos o directorios en un solo archivo llamado tarball. Por defecto, el archivo resultante no está comprimido — la compresión se aplica combinándolo con herramientas como gzip o bzip2. Los archivos creados con tar tienen extensión .tar, y al comprimirse con gzip, .tar.gz o .tgz.

Sintaxis

tar [OPCIONES] [NOMBRE_ARCHIVO_SALIDA] [ARCHIVOS_O_CARPETAS_ENTRADA]

Banderas principales

La bandera -f siempre debe ir al final del bloque de opciones, seguida inmediatamente por el nombre del archivo de salida.

BanderaDescripción
-cCrea un nuevo archivo .tar
-xExtrae los archivos del archivo .tar
-tLista el contenido del archivo sin extraerlo
-vMuestra el progreso y los nombres de los archivos procesados
-fEspecifica el nombre del archivo .tar que se va a crear o utilizar
-zComprime o descomprime usando gzip (.tar.gz / .tgz)
-jComprime o descomprime usando bzip2 (.tar.bz2)
-JComprime o descomprime usando xz (.tar.xz)
-CCambia al directorio especificado antes de extraer
-pPreserva los permisos originales de los archivos
--excludeExcluye archivos o directorios que coincidan con el patrón indicado

Ejemplos de uso

# Crear un tarball comprimido con gzip
tar -cvzf copia.tar.gz /ruta/a/carpeta/

# Extraer un tarball comprimido con gzip
tar -xvzf copia.tar.gz

# Extraer en un directorio específico
tar -xvzf copia.tar.gz -C /tmp/destino/

# Crear un archivo .tar sin compresión
tar -cvf backup.tar /home/datos/

# Listar el contenido de un tarball sin extraer
tar -tvf copia.tar.gz

# Crear un tarball excluyendo directorios
tar -cvzf proyecto.tar.gz ./proyecto --exclude='node_modules' --exclude='.git'

# Crear un tarball comprimido con bzip2
tar -cvjf backup.tar.bz2 /home/datos/

# Crear un tarball comprimido con xz (mayor compresión)
tar -cvJf backup.tar.xz /home/datos/

# Extraer preservando permisos originales
tar -xvzpf backup.tar.gz

Casos de uso reales

Backup de un directorio de proyecto

# Crear backup excluyendo dependencias y archivos temporales
tar -cvzf proyecto-$(date +%Y%m%d).tar.gz \
  ./proyecto \
  --exclude='node_modules' \
  --exclude='.git' \
  --exclude='dist'

Transferencia entre servidores

# Comprimir, transferir por SSH y extraer en destino
tar -czf - /var/www/app | ssh usuario@servidor 'tar -xzf - -C /var/www/'

Backup incremental de logs

# Comprimir logs individuales del día anterior
find /var/log/app/ -name "*.log" -mtime 1 -exec gzip -9 {} \;

Restaurar un backup específico

# Extraer solo un archivo particular del tarball
tar -xvzf backup.tar.gz ruta/al/archivo.conf

Comparar algoritmos de compresión

# gzip: balance entre velocidad y compresión
tar -cvzf backup.tar.gz ./datos/

# bzip2: mejor compresión, más lento
tar -cvjf backup.tar.bz2 ./datos/

# xz: máxima compresión, el más lento
tar -cvJf backup.tar.xz ./datos/

Resumen de combinaciones frecuentes

TareaComando
Comprimir carpetatar -cvzf archivo.tar.gz /ruta/carpeta/
Extraer tarballtar -xvzf archivo.tar.gz
Extraer en ruta específicatar -xvzf archivo.tar.gz -C /destino/
Listar contenidotar -tvf archivo.tar.gz
Comprimir archivo únicogzip -k archivo.log
Descomprimir archivo únicogzip -dk archivo.log.gz
Verificar integridadgzip -t archivo.gz

Buenas prácticas

  • Usa -k con gzip para conservar originales — evita perder el archivo fuente accidentalmente durante la compresión.
  • Excluye directorios innecesarios — en proyectos de desarrollo, omite node_modules, .git, dist y otros directorios generados.
  • Incluye la fecha en el nombre del backup — facilita la identificación y rotación de archivos, por ejemplo backup-$(date +%Y%m%d).tar.gz.
  • Verifica tarballs después de crearlos — usa tar -tvf para listar el contenido y confirmar que incluye los archivos esperados.
  • Usa gzip -t para verificar integridad — especialmente útil después de transferir archivos comprimidos entre servidores.
  • Preserva permisos con -p — al restaurar backups de servidores, asegura que los permisos de archivos se mantengan intactos.
  • Prefiere xz para almacenamiento a largo plazo — ofrece la mejor compresión cuando el tiempo de compresión no es crítico.