Formato de archivo TAR/GZ: El estándar de compresión Unix explicado
TAR (Tape ARchive) es el formato de archivo fundamental de los sistemas Unix y Linux, con orígenes que se remontan a 1979. A diferencia de ZIP o RAR que combinan archivado y compresión, TAR separa estas preocupaciones: TAR maneja el empaquetado de ficheros y la preservación de metadatos, mientras que programas de compresión externos (gzip, bzip2, xz, zstd) manejan la compresión.
Estructura del archivo TAR
Un archivo TAR es un formato secuencial: cabeceras de fichero y bloques de datos se escriben uno tras otro sin índice central. Cada fichero archivado consiste en:
[Bloque de cabecera POSIX de 512 bytes]
Nombre de fichero: 100 bytes
Modo de fichero: 8 bytes (octal: 0000755 = rwxr-xr-x)
UID/GID: 8 bytes cada uno
Tamaño de fichero: 12 bytes (octal)
Tiempo de modificación: 12 bytes (timestamp Unix)
Suma de comprobación: 8 bytes
Indicador de tipo: 1 byte (0=regular, 2=enlace simbólico, 5=directorio)
[Datos del fichero, alineados a límite de 512 bytes]
[Siguiente bloque de cabecera...]
[Dos bloques de ceros de 512 bytes = marcador de fin de archivo]
Esta estructura secuencial implica que no hay acceso aleatorio — para extraer el fichero #1000, hay que leer a través de las 999 cabeceras precedentes. Pero es ideal para streaming: TAR puede enviarse por pipe directamente a herramientas de compresión y red sin ficheros temporales.
Algoritmos de compresión
TAR no almacena ninguna compresión — es un formato de archivo puro. La compresión se aplica enviando la salida de TAR por pipe a través de un compresor separado:
| Extensión | Compresor | Flag | Ratio | Velocidad | Mejor para |
|---|---|---|---|---|---|
| .tar.gz (.tgz) | gzip | -z | Medio | Rápido | Universal; mejor compatibilidad |
| .tar.bz2 | bzip2 | -j | Bueno | Lento | Archivos de texto/código fuente |
| .tar.xz | xz (LZMA2) | -J | Mejor | Muy lento | Paquetes de distribución |
| .tar.zst | zstd | --zstd | Bueno | Muy rápido | Distribuciones Linux modernas |
# Crear archivos (todos equivalentes, diferente compresión)
tar -czf archivo.tar.gz directorio/ # gzip
tar -cjf archivo.tar.bz2 directorio/ # bzip2
tar -cJf archivo.tar.xz directorio/ # xz
tar -c --zstd -f archivo.tar.zst directorio/ # zstd
# Extraer cualquier archivo tar (tar moderno auto-detecta compresión)
tar -xf archivo.tar.gz
tar -xf archivo.tar.bz2
tar -xf archivo.tar.xz
# Listar contenido sin extraer
tar -tf archivo.tar.gz
# Extraer fichero específico
tar -xf archivo.tar.gz ruta/al/fichero.txt
# Extraer a directorio específico
tar -xzf archivo.tar.gz -C /ruta/destino/
Preservación de metadatos
La principal ventaja de TAR sobre ZIP para uso en Unix/Linux es la preservación de metadatos:
# Preservar permisos, propietario, marcas de tiempo
tar -cpzf copia_seguridad.tar.gz /etc/
# Restaurar con propietario original (requiere root)
tar -xpzf copia_seguridad.tar.gz -C /
Los metadatos preservados incluyen: permisos de fichero (lectura/escritura/ejecución para propietario/grupo/otros), propietario y grupo (por UID/GID numérico o por nombre en PAX), marcas de tiempo, enlaces simbólicos, dispositivos de carácter y bloque, tuberías con nombre (FIFOs) y atributos extendidos.
Streaming TAR por SSH y tuberías
El formato secuencial de TAR lo hace ideal para streaming:
# Archivar y transferir por SSH en un solo comando
tar -czf - /datos/ | ssh usuario@remoto "cat > /copia/datos.tar.gz"
# Transferir árbol de directorio por SSH sin crear fichero de archivo
tar -cz /origen/ | ssh usuario@remoto "tar -xz -C /destino/"
# Archivar desde remoto, extraer localmente
ssh usuario@remoto "tar -cz /datos/remotos/" | tar -xz -C /datos/locales/
Copias de seguridad incrementales y diferenciales
GNU tar soporta copias de seguridad incrementales mediante ficheros de instantánea:
# Copia de seguridad de nivel 0 (completa)
tar --listed-incremental=/copia/instantanea.snar \
-czf /copia/completa_$(date +%Y%m%d).tar.gz /home/
# Nivel 1 (incremental — solo ficheros cambiados desde la última copia)
tar --listed-incremental=/copia/instantanea.snar \
-czf /copia/incr_$(date +%Y%m%d).tar.gz /home/
Comparación de compresión para TAR
Para un directorio mixto típico (código fuente + binarios + datos):
| Formato | Tamaño | Tiempo compress. | Tiempo descompress. |
|---|---|---|---|
| .tar (sin comprimir) | 100% | Base | Base |
| .tar.gz | ~35% | 15s | 3s |
| .tar.bz2 | ~30% | 45s | 12s |
| .tar.xz | ~25% | 120s | 5s |
| .tar.zst | ~30% | 8s | 2s |
Recomendación: .tar.zst (Zstandard) ofrece el mejor equilibrio para sistemas modernos — ratio de compresión cercano a bzip2, velocidad cercana a gzip.
Gestión de paquetes Linux y TAR
La mayoría de los formatos de paquete Linux están basados en TAR:
| Formato | Herramientas | Extensión | Compresión |
|---|---|---|---|
| Debian/Ubuntu | dpkg, apt | .deb | .tar.xz dentro de ar |
| Red Hat/Fedora | rpm, dnf | .rpm | .tar.xz dentro de CPIO |
| Arch Linux | pacman | .pkg.tar.zst | .tar.zst |
| Slackware | pkgtool | .txz | .tar.xz |
TAR vs. ZIP para diferentes casos de uso
| Caso de uso | Recomendación |
|---|---|
| Copias de seguridad Linux/Unix | tar.xz o tar.zst |
| Distribución de código fuente | tar.xz (estándar en lanzamientos GitHub) |
| Usuarios Windows compartiendo | ZIP (soporte nativo) |
| Capas Docker/contenedor | tar (especificación OCI usa TAR sin comprimir) |
| Compresión máxima | tar.xz |
| Streaming de copia rápida | tar.zst |
Resumen
El dominio de la familia TAR en entornos Linux/Unix proviene de su fidelidad de metadatos, capacidad de streaming y composabilidad con el modelo de tuberías Unix. Al separar el archivado de la compresión, TAR te permite elegir el compresor adecuado para tu caso de uso — gzip para compatibilidad universal, xz para máxima compresión, zstd para velocidad moderna. Para entornos de trabajo Linux, copias de seguridad de sistema o distribución de software, TAR con un compresor apropiado sigue siendo la herramienta correcta.
Conversiones relacionadas
Conversiones de archivos comprimidos más usadas: