gzip sin alquitrán? ¿Por qué se usan juntos?

60

¿Por qué tar y gzip casi siempre se usan juntos, y no solo gzip? ¿Hay alguna ventaja en ese método?

Mehrdad
fuente

Respuestas:

72

TAR crea un único archivo archivado a partir de muchos archivos, pero no los comprime.

Detalles de formato

Un archivo tar es la concatenación de uno o más archivos. Cada archivo está precedido por un registro de encabezado de 512 bytes. Los datos del archivo se escriben sin modificaciones, excepto que su longitud se redondea a un múltiplo de 512 bytes y el espacio adicional se llena con cero. El final de un archivo está marcado por al menos dos registros consecutivos llenos de cero.

GZIP comprime un solo archivo en otro archivo único, pero no crea archivos.

Formato de archivo

... Aunque su formato de archivo también permite que se concatenen múltiples secuencias de este tipo (los archivos comprimidos simplemente se descomprimen concatenados como si fueran originalmente un solo archivo), gzip se usa normalmente para comprimir solo archivos individuales. [4] Los archivos comprimidos generalmente se crean al reunir colecciones de archivos en un único archivo tar y luego comprimir ese archivo con gzip.

Matt Ball
fuente
12
No existe un archivo "tgz". Es un tar.gz. El trabajo de gzip es comprimir o descomprimir su contenido (en este caso, un archivo tar). Luego lo desarchiva con tar. Es la típica filosofía de canalización de Unix y, por lo tanto, apenas única.
luis.espinal
55
No, .tar.gz no es único: .tar.bz2, .cpio.gz, etc. funcionan de la misma manera.
user46971
3
@ user36310 Sé lo que quieres decir en principio, pero en la práctica las herramientas te permiten extraer un solo archivo. tar -xzvf tarball.tar.gz single/file.txt. Detrás de escena necesita hacer un poco de trabajo extra, pero para las apariencias extrae un solo archivo.
Rich Homolka
44
Haga "mucho trabajo extra" si el archivo está al final de un archivo grande. Claramente, si necesita acceso aleatorio, zip / rar / xar / 7z / lzh / arj / cab / sit etc.son formatos superiores.
LaC
3
Para ser precisos, un .tar.*archivo comprimido siempre es "sólido", es decir. consiste en una sola corriente comprimida. Un .ziparchivo por otro lado no es sólido en absoluto, el algoritmo de compresión se inicia de nuevo para cada archivo. Se sacrifica la eficiencia de compresión para acelerar el acceso aleatorio. .7zlos archivos pueden ser sólidos, no sólidos o tener bloques sólidos.
Daniel B
17

Gzip / Bzip2 son compresores de flujo. Comprimen una secuencia de datos en algo más pequeño. Podrían usarse en archivos individuales, pero no en grupos de archivos por sí mismos.

Tar, por otro lado, tiene la capacidad de convertir una lista de archivos, con rutas, permisos e información de propiedad, en una sola secuencia continua, y viceversa.

Es por eso que, para archivar archivos (y si también se necesita compresión), generalmente se usa tar + algún método de compresión.

Dan
fuente
12

Tar está a cargo de hacer una y solo una cosa bien: (des) archivar en (de) un solo archivo de almacenamiento. ¿De que? De una y solo una cosa: un conjunto de archivos.

Gzip está a cargo de hacer una y solo una cosa bien: (des) comprimir. ¿De que? De una cosa y solo una cosa: un solo archivo de cualquier tipo ... y eso incluye un archivo creado con tar.

Se remonta a la filosofía de tuberías de UNIX, la arquitectura subyacente de "tuberías y filtros"; el tratamiento de todo como un archivo y el objetivo arquitectónico de sonido de "una cosa hace una cosa solo y hace bien" (lo que resulta en una especie de plug-n-play muy elegante y simple .)

En su simplicidad, es casi de naturaleza algebraica (un objetivo considerable en el diseño de sistemas). Y eso no es tarea fácil.

En muchos sentidos (y no sin sus defectos), esto es casi un pináculo en la componibilidad, modularidad, acoplamiento flojo y alta cohesión. Si entiendes estos cuatro (y quiero decir realmente entiendes ), entiendes, será obvio por qué tar y gzip funcionan así en pares.

luis.espinal
fuente
1
Esta filosofía de UNIX es hermosa, de acuerdo, pero estoy observando que se queda corta, creando archivos no sólidos. (Extraer un solo archivo de un tar.gz de 1 GB no debería ser una molestia, y por lo que he entendido aquí, ZIP es bastante superior a tar.gz ... ¿verdad?)
Mehrdad
@Mehrad - Primero , ¿qué es un archivo no sólido? Como se le atribuye a Voltaire, "Si quieres conversar conmigo, primero debes definir tus términos". . En segundo lugar , sí, la arquitectura de tuberías y filtros se queda corta en casos específicos, al igual que cualquier otra arquitectura, independientemente de su belleza. Eso es un hecho con un mínimo de ingeniería, y no es el argumento que se está haciendo. Tercero , zip es superior a gzip y tar, pero eso no fue lo que pediste. Preguntó por qué el zip y el alquitrán funcionan de la manera en que lo hacen y si hubo alguna ventaja, y recibió una respuesta técnica.
luis.espinal
@Mehrad - además, no sé qué tipo de problemas encuentras al descomprimir | descomprimir un archivo 1gig tar.gz. Lo he hecho muchas veces, hasta 2GB con instalaciones antiguas de gzip (y hasta 4gb con versiones más nuevas de gzip). Si lo está haciendo a través del cable o en un soporte NFS, entonces ¡duh! Te encontrarás con problemas de rendimiento similares a los de un simple zip. Demonios, incluso me desaté de una tubería a un proceso remoto escupiendo la entrada gzip en un zócalo. Intenta eso con zip. Para cada problema, use la herramienta adecuada (ya sea tar | gz o zip.)
luis.espinal
8

En primer lugar, TAR no se creó para crear archivos de archivos. Es Tape ARchiver . Su trabajo es escribir o cargar en un archivo a / desde cinta.

La opción -f hace que use un archivo como "cinta virtual", que luego puede ser comprimido por otro programa. De hecho, dicha compresión también ocurre en las unidades grabadas del mundo real.

Por supuesto, la filosofía de usar un programa para hacerlo bien también cuenta en este caso, pero uno podría perderse por qué los archivos TAR están estructurados como una secuencia en lugar de un directorio de contenido + contenido.

p_l
fuente
3
Correcto ... los archivos ZIP colocan toda la información del archivo en un encabezado unificado, luego todo el contenido del archivo ... eso hace que sea imposible agregar más archivos a un archivo ZIP ... debe reescribir todo el archivo ... con Formato TAR, el encabezado de cada archivo está separado, por lo que puede agregar fácilmente más archivos sin tener que volver a escribir toda la cinta
JoelFan
5

Tradicionalmente, los sistemas Unix usaban un programa para realizar una tarea según la filosofía de Unix : tarera solo un medio para empaquetar múltiples archivos en un solo archivo, originalmente para copia de seguridad en cinta (por lo tanto tar, t ape ar chive). tarno proporciona compresión; el archivo no comprimido resultante se comprime típicamente con algún otro programa tal como gzip, bzip2o xz. En los viejos tiempos, usaban el compresscomando para hacer esto; Los algoritmos de compresión más nuevos son mucho más efectivos que esto.

El enfoque altamente modularizado dictado por la filosofía de Unix significa que cada programa puede usarse individualmente según corresponda, o combinarse para realizar tareas más complejas, incluida la creación de archivos comprimidos como se describe aquí. Para este tipo de tareas, también facilita el intercambio de herramientas individuales según sea necesario; simplemente cambiaría el programa de compresión para usar un algoritmo de compresión diferente, sin tener que reemplazar la tarpropia utilidad.

Este enfoque modular no está exento de desventajas. Como se mencionó en los comentarios a otras respuestas, un formato de archivo comprimido dedicado como .zipes más capaz de manejar la extracción de archivos individuales; los tarball comprimidos deben descomprimirse casi en su totalidad para extraer archivos cerca del final del archivo, mientras que los .ziparchivos permiten un acceso aleatorio a sus contenidos. (Algunos formatos más nuevos, como por ejemplo .7z, admiten archivos sólidos y no sólidos, así como bloques sólidos de tamaño variable en archivos más grandes). El uso continuo tarjunto con una utilidad de compresión separada es una cuestión de tradición y compatibilidad; Además, .7zy .zipno son compatibles con los metadatos del sistema de archivos Unix, como los permisos.

bwDraco
fuente