¿Cómo comprimir y descomprimir archivos en Linux? (tar, gzip, zip)
¿Por qué es importante comprimir archivos en un servidor Linux?
Si administras un servidor, ya sea para hosting, una aplicación web o una base de datos, tarde o temprano necesitarás comprimir archivos. Las razones más comunes son:
- Ahorrar espacio en disco: Los logs, las copias de seguridad y los archivos estáticos (imágenes, vídeos) ocupan mucho espacio. Comprimirlos puede reducir su tamaño hasta en un 80%.
- Transferir archivos más rápido: Un archivo comprimido pesa menos, por lo que tarda menos en subirse o descargarse mediante FTP o SCP.
- Crear copias de seguridad (backups): Es la práctica estándar para empaquetar un directorio completo (por ejemplo,
/var/www/html) en un solo archivo fácil de mover y almacenar. - Agrupar muchos archivos en uno solo: En lugar de descargar 500 archivos sueltos, descargas un único
.tar.gz.
La buena noticia es que Linux incluye herramientas de serie para hacer esto. Las tres más importantes son tar, gzip y zip. A continuación te explico cómo usarlas paso a paso, con ejemplos prácticos que puedes aplicar hoy mismo.
Conceptos básicos: ¿Qué es tar, gzip y zip?
Antes de lanzarnos a los comandos, es importante entender la diferencia, porque es la causa del 90% de las confusiones.
tar: No comprime, solo empaqueta. Junta muchos archivos y carpetas en un solo archivo (como una caja de cartón). El resultado es un archivo.tarque pesa prácticamente lo mismo que la suma de los originales.gzip: Es un compresor. Coge un único archivo (por ejemplo, un.tar) y lo comprime. El resultado es un archivo.gz. Al combinarlos, obtenemos el famoso.tar.gz(también llamado "tarball").zip: Hace ambas cosas a la vez: empaqueta y comprime. Es el formato más común en Windows y macOS, y Linux también lo soporta perfectamente.
En resumen: tar empaqueta, gzip comprime, y zip hace las dos cosas. En la práctica, casi siempre usarás tar con la opción -z para que también comprima con gzip.
Cómo comprimir archivos con tar y gzip (comando tar gzip)
Esta es la combinación más usada en servidores Linux. Para crear un archivo comprimido con comandos tar gzip, usa la siguiente sintaxis:
tar -czvf nombre-del-archivo.tar.gz /ruta/al/directorio/
Vamos a desglosar las opciones para que no sea un jeroglífico:
-c: create (crear un nuevo archivo).-z: gzip (comprimir con gzip).-v: verbose (mostrar el progreso en pantalla, es opcional pero útil).-f: file (especificar el nombre del archivo resultante).
Ejemplo práctico: comprimir una web completa
Imagina que quieres hacer un backup tar linux de tu sitio web alojado en /var/www/midominio.com. El comando sería:
tar -czvf backup-midominio.tar.gz /var/www/midominio.com
Al ejecutarlo, verás una lista de todos los archivos que se están añadiendo. Al final, tendrás un archivo llamado backup-midominio.tar.gz en el directorio donde ejecutaste el comando.
Comprimir varios directorios a la vez
Si necesitas incluir más de una carpeta o archivo, solo tienes que listarlos uno detrás de otro:
tar -czvf backup-completo.tar.gz /var/www/midominio.com /etc/nginx /var/log/midominio
Excluir archivos innecesarios
Es muy común querer excluir carpetas pesadas que no necesitas en el backup, como node_modules o cache. Usa la opción --exclude:
tar -czvf backup-midominio.tar.gz --exclude='node_modules' --exclude='cache' /var/www/midominio.com
[TIP] Si vas a hacer backups de forma recurrente, te recomiendo añadir la fecha al nombre del archivo: backup-midominio-$(date +%Y-%m-%d).tar.gz. Así tendrás un historial ordenado.
Cómo descomprimir archivos tar.gz en Linux
Descomprimir es igual de sencillo. Solo cambia la opción -c por -x (extract). La sintaxis básica es:
tar -xzvf nombre-del-archivo.tar.gz
-x: extract (extraer).-z: descomprime con gzip.-v: muestra los archivos mientras se extraen.-f: nombre del archivo.
Descomprimir en un directorio específico
Por defecto, extrae los archivos en el directorio actual. Si quieres que lo haga en una carpeta concreta, usa -C (mayúscula):
tar -xzvf backup-midominio.tar.gz -C /home/usuario/restauracion/
Descomprimir solo algunos archivos
Si no quieres extraer todo el tarball, puedes listar el contenido primero:
tar -tzvf backup-midominio.tar.gz
Ese comando te mostrará todos los archivos sin extraerlos. Para extraer solo uno, por ejemplo index.php:
tar -xzvf backup-midominio.tar.gz var/www/midominio.com/index.php
[WARNING] Ojo con las rutas dentro del tar. Si al comprimir usaste una ruta absoluta (como /var/www/midominio.com), al descomprimir se restaurará esa misma ruta. Si usaste una relativa (como midominio.com), se extraerá en tu directorio actual. Para evitar sustos, en los backups siempre es mejor usar rutas relativas.
Cómo comprimir y descomprimir con zip en Linux
Aunque tar.gz es el estándar en Linux, el formato zip es imprescindible si tienes que intercambiar archivos con usuarios de Windows o macOS. La herramienta se llama zip y, si no la tienes instalada, puedes hacerlo con:
sudo apt install zip unzip # En Debian/Ubuntu
sudo yum install zip unzip # En CentOS/RHEL
Comprimir archivos en zip
Para comprimir archivos servidor con zip, usa:
zip -r nombre-del-archivo.zip /ruta/al/directorio/
-r: recursive, incluye todas las subcarpetas. Es imprescindible para directorios.
Ejemplo: comprimir una carpeta con zip
zip -r mi-web.zip /var/www/midominio.com
Añadir archivos a un zip existente
Si quieres añadir más archivos sin rehacer el zip:
zip -r mi-web.zip /var/www/otra-carpeta
Comprimir con contraseña
Para proteger el zip con contraseña (muy útil para backups con datos sensibles):
zip -r -P mi-clave-secreta backup.zip /var/www/midominio.com
[TIP] La opción -P es visible en el historial del shell. Si te preocupa la seguridad, usa -e para que te pida la contraseña de forma interactiva.
Descomprimir zip en Linux
Para descomprimir zip linux, el comando es igual de simple:
unzip nombre-del-archivo.zip
Descomprimir en un directorio concreto
unzip nombre-del-archivo.zip -d /ruta/donde/quiero/extraer/
Ver el contenido sin extraer
unzip -l nombre-del-archivo.zip
Comparativa rápida: ¿Cuándo usar tar.gz y cuándo zip?
Para que lo tengas claro de un vistazo:
| Situación | Herramienta recomendada | Motivo |
|---|---|---|
| Backup de un sitio web en tu servidor | tar -czvf | Mejor compresión, preserva permisos y enlaces simbólicos. |
| Enviar archivos a un cliente de Windows | zip | Formato nativo en Windows, no necesita programas extra. |
| Comprimir logs antiguos | gzip (solo) | Los logs son un único archivo, no necesitas empaquetar. |
| Migrar un servidor completo | tar -czvf | Puedes incluir permisos, propietarios y estructura exacta. |
Trucos avanzados para comprimir archivos en servidores
1. Comprimir con máxima compresión
Si el espacio es crítico, puedes usar bzip2 (opción -j en tar) que comprime más que gzip, aunque tarda más:
tar -cjvf backup.tar.bz2 /var/www/midominio.com
2. Comprimir y transferir en un solo paso
Puedes combinar tar con SSH para hacer un backup y enviarlo a otro servidor sin guardarlo en disco:
tar -czvf - /var/www/midominio.com | ssh usuario@otro-servidor "cat > /backups/backup.tar.gz"
3. Comprimir solo archivos modificados en los últimos días
Muy útil para backups incrementales:
tar -czvf backup-reciente.tar.gz $(find /var/www/midominio.com -name "*.php" -mtime -7)
Errores comunes y cómo solucionarlos
"gzip: stdout: No space left on device"
El disco donde estás comprimiendo está lleno. Libera espacio o comprime en otra partición.
"tar: Exiting with failure status due to previous errors"
Normalmente significa que algún archivo cambió durante la compresión. No es grave, pero el backup puede ser inconsistente. Para evitarlo, para los servicios que escriben archivos (como MySQL) antes de hacer el backup.
"unzip: cannot find zipfile directory"
El archivo no es un zip válido, o está corrupto. Intenta descargarlo de nuevo.
Preguntas frecuentes (FAQ)
¿Cómo comprimir una carpeta sin incluir la ruta completa?
Entra primero en el directorio padre y comprime con el nombre de la carpeta:
cd /var/www
tar -czvf mi-web.tar.gz midominio.com
Así el tar contendrá midominio.com/ en lugar de var/www/midominio.com/.
¿Cómo comprimir varios archivos en un solo tar.gz?
Solo tienes que listarlos:
tar -czvf mis-archivos.tar.gz archivo1.txt archivo2.log archivo3.conf
¿Cómo comprimir un archivo individual con gzip?
gzip archivo.log
Esto reemplazará archivo.log por archivo.log.gz. Para descomprimir: gunzip archivo.log.gz.
¿Cómo saber el tamaño de un archivo comprimido sin descomprimirlo?
du -sh backup.tar.gz
¿Puedo comprimir y descomprimir desde un panel de control como Syspanel?
Sí, si usas un panel de gestión como Syspanel (antes conocido como HestiaCP), puedes acceder a través del puerto 2106 (por ejemplo, https://tu-servidor:2106). En su gestor de archivos, encontrarás botones para comprimir y descomprimir archivos en formatos .tar.gz y .zip sin necesidad de usar la terminal. Sin embargo, para backups avanzados o automatizados, los comandos que te he enseñado son mucho más potentes y flexibles.
¿Cuál es la mejor opción para hacer backups automáticos?
Combina tar con cron. Por ejemplo, para hacer un backup diario a las 3 de la madrugada:
crontab -e
Y añade esta línea:
0 3 * * * tar -czvf /backups/mi-web-$(date +\%Y-\%m-\%d).tar.gz /var/www/midominio.com
Resumen final
Comprimir y descomprimir archivos en Linux es una habilidad básica pero esencial para cualquier administrador de servidores. Con solo tres comandos (tar, gzip y zip), puedes:
- Crear backup tar linux completos de tus webs y bases de datos.
- Comprimir archivos servidor para transferirlos rápidamente.
- Descomprimir zip linux que te envíen clientes o colaboradores.
- Automatizar todo con cron y scripts.
Mi recomendación: empieza usando tar -czvf para tus backups diarios y zip para intercambiar archivos con otros sistemas. En menos de una semana, lo harás sin pensar. Y si tienes un panel como Syspanel (puerto 2106), úsalo para tareas puntuales, pero no dependas de él para backups críticos.
¿Tienes alguna duda concreta sobre algún comando? Déjala en los comentarios y te ayudaré a resolverla.
