¿Qué es más eficiente: compresión de alquitrán o zip? ¿Cuál es la diferencia entre tar y zip?

68

Estoy trabajando en un entorno Linux y quiero saber acerca de los comandos tar y zip.

¿Qué es más eficiente: alquitrán o cremallera? También necesito saber las diferencias entre los comandos tar y zip. ¿Alguien puede explicarme?

rekha_sri
fuente

Respuestas:

77

tarsolo crea un solo archivo a partir de múltiples archivos, no realiza compresión a menos que combine un programa de compresión como gzipo bzip2(al que puede llamar desde dentro tarutilizando las opciones -zo -j, respectivamente). zipcombina el archivo y la compresión en un solo programa.

Wim
fuente
60

alquitrán

  • Supone que leerá de un extremo al otro: "Tape ARchive". (La edad del comando muestra ...)
  • No hace la compresión, pero puede comprimir toda la secuencia resultante al canalizarla, por ejemplo, a través de gzip y bzip2 (hecho internamente con -z o -j)
  • Almacena los atributos del archivo unix : uid, gid, permisos (más notablemente ejecutables). El valor predeterminado puede depender de su distribución y puede alternarse con opciones.

Código Postal

  • Almacena los atributos de MSDOS . (Archivo, Solo lectura, Oculto, Sistema)
  • Comprime cada archivo, luego los agrega a un archivo
  • Incluye una tabla de archivos al final del archivo
  • y como resultado de los dos primeros, permite leer solo las partes exactas del archivo que necesita.

El hecho de que zip comprima los archivos por separado afectará las relaciones de compresión, particularmente en muchos archivos pequeños similares.

(Al menos esto era exactamente correcto hace una década).

MaHuJa
fuente
22

Tar conserva muchos más metadatos que Zip, mira mi comparación (está un poco desactualizado):

ingrese la descripción de la imagen aquí

(Haga clic para ampliar)

El alquitrán pasa el 65% de las pruebas, donde Zip solo pasa el 17%. Puse a disposición el paquete de pruebas en github con licencia BSD para que pueda probarlo usted mismo si tiene Mac. Para Linux no estoy seguro de si hay metadatos, por lo que estas pruebas pueden no ser relevantes.

neoneye
fuente
¡Interesante! +1 por esto. Pero, de nuevo, ese fue un gran programa. ¿Escribiste esto para otro propósito? Sólo curioso.
CppLearner
Escribí las pruebas para un administrador de archivos en el que estaba trabajando hace algunos años. Sin embargo, nunca lo lancé.
neoneye
1
Linux también tiene metadatos, por lo que debería funcionar para ello.
zeitue
14

La eficiencia se puede medir de diferentes maneras:

  1. ¿Cuánto tiempo tarda el proceso?
  2. ¿Qué tan grandes son los archivos resultantes?

También hay otras preguntas, como "¿Qué tan comunes son las herramientas para manipular los archivos resultantes?"

Entonces, por ejemplo, bzip2crea archivos más pequeños que gzip, pero puede llevar mucho más tiempo. Además, en mi experiencia, gzipes universal en sistemas similares a Unix, pero bzip2aún no lo es (aunque es muy común y generalmente es fácil de obtener).

Telémaco
fuente
3
7zip ( 7-zip.org ) es otra buena opción para obtener una excelente compresión a expensas del tiempo de CPU. Menos común que bzip2 (no está instalado de manera predeterminada en cualquier lugar que conozca) pero fácil de instalar en la mayoría de los lugares (está en los repositorios estándar para la mayoría de las distribuciones de Linux y hay un paquete de instalación simple para Windows. Al igual que tar + gzip, lleva el ventana de compresión a través de los archivos de entrada por lo que pone aún mayores ahorros de más de postal al incluir muchos archivos pequeños.
David Spillett
3
La eficiencia también se puede medir por lo bien que conserva los datos, vea mi respuesta a esta pregunta. Tar es mucho mejor que zip para preservar los datos.
neoneye
1
Una medida más podría ser la compatibilidad fuera de UNIX. Windows está bien con zip (integrado en Windows), generalmente puede procesar fácilmente tar.gz con shareware, pero es raro encontrar bzip2. Lamentablemente, la pregunta original no mencionó estos criterios, por lo que no puedo ver si son relevantes.
Rich Homolka
1
Una vez hice una revisión exhaustiva de la relación de compresión versus el tiempo requerido para algunos compresores comunes, y cuál sería el más eficiente dependiendo de cómo se valore el espacio versus el tiempo: blog.grandtrunk.net/2004/07/practical-compressor-test
Wim
9

Como señaló Wim, el alquitrán no se comprime. Si agrega comprimir el tar (por ejemplo, para obtener un .tar.gz o .tar.bz2), está comprimiendo todo el archivo tar de una vez. Por el contrario, zip comprime cada archivo individualmente.

La eficiencia depende de la carga de trabajo. Específicamente, zip le permite acceder a archivos individuales directamente. Con tar, primero debe buscar a través de los archivos no deseados (comprimidos) antes. El rendimiento de la compresión depende de lo que esté comprimiendo. tara bzip2menudo es mejor para una gran cantidad de archivos similares (por ejemplo, un directorio fuente). zippodría ser mejor si cada archivo tiene un contenido muy diferente.

Matthew Flaschen
fuente
44
... por otro lado, debe obtener todo el archivo zip antes de poder acceder al contenido, porque el toc se coloca al final. por el contrario, puede descomprimir un alquitrán tan rápido como los bytes llegan ...
Akira
6

Los archivos Zip contienen un directorio central de sus contenidos al final (lo más probable es que evite tener que crear el directorio de antemano, donde aún no sabe qué habrá dentro). Esto permite extraer rápidamente archivos individuales sin tener que descomprimir todo el archivo: simplemente lea el directorio de archivos y extraiga solo lo que necesita. Sin embargo, esto requiere que todo el archivo sea accesible, y requiere acceso aleatorio que solo está disponible en dispositivos de bloque (disquetes, discos duros). Además, el directorio de archivo es vulnerable: si el archivo se trunca por algún motivo, se requiere mucha magia para extraer algo útil del archivo.

Los archivos zip se crearon para el uso de BBS, donde era importante poder agrupar el contenido de un directorio en un solo archivo (y comprimido), en lugar de tener que descargar posiblemente miles de archivos individuales. Al igual que la mayoría de los sitios web, agrupan sus descargas incluso hoy en día, por las mismas razones.

Los archivos de alquitrán se diseñaron para agrupar copias de seguridad que se utilizarán para unidades de cinta, por lo tanto, para acceso secuencial . No hay directorio central; en cambio, el archivo contiene bloques de encabezado a intervalos regulares que indican qué archivos seguirán en los siguientes bloques. Los archivos de alquitrán están destinados a ser leídos de una sola vez; Si solo se va a extraer un solo archivo, el archivo se lee secuencialmente, comenzando desde el principio hasta que se encuentra el archivo solicitado (que también puede estar al final). La compresión se aplica encima de eso; cada uno de los diversos programas de compresión que se aplican a los archivos de alquitrán ( compress, gzip,bzip2etc.) son compresores de flujo y no alteran la naturaleza secuencial del archivo en ningún asunto. En el peor de los casos, necesitaría un poco más de bloques hasta que pueda comenzar a extraer.

Esto puede sonar como una diferencia trivial, pero de hecho representa un polo opuesto en filosofía. Con los archivos zip, siempre existe la necesidad de tener todo el archivo a mano para hacer algo útil con él, mientras que un archivo tar se puede transmitir a una tubería. Puedo descargar un archivo tar grande y comenzar a extraerlo desde el principio, tan pronto como lleguen los primeros bloques (y tal vez interrumpa la descarga tan pronto como obtenga el archivo que estoy buscando). Para un archivo Zip, tengo que esperar hasta que aparezca el directorio del archivo, que aparece al final del archivo. Pero una vez que lo tenga todo el archivo a la mano, la extracción de contenido parcial de ella será mucho más rápido de un archivo tar.

Ambos formatos tienen un punto muy fuerte para ellos, dependiendo de dónde y cómo se usen. Dado que las tuberías (y, por lo tanto, la noción de transmisión de datos de un proceso a otro) solo existen realmente en el mundo de Unix, la ventaja principal de los archivos tar se pierde en otros sistemas, por lo que los archivos Zip son mucho más populares allí. Pero los archivos de alquitrán son más flexibles, por eso los prefiero cada vez que tengo una opción.

Vucar Timnärakrul
fuente
5

Como el otro ya dijo, tar crea un gran "bloque" de todos los archivos que se pueden comprimir con un compresor de flujo como gzip o bzip2.

La desventaja de esto es que tiene que descomprimir todo el archivo para acceder a un archivo dentro del archivo.

La ventaja de esto es que la relación de compresión suele ser mayor, especialmente cuando los archivos comprimidos son muy similares.

Otros empacadores como "rar" tienen un "modo de bloqueo" (o similar) para tener el mismo efecto.

IanH
fuente