¿Por qué la gente usa tarballs?


Como desarrollador principalmente de Windows, quizás me falta algo cultural en la comunidad Linux, pero siempre me ha confundido.

Al descargar algo, los archivos se colocan primero en un archivo .tar y luego se comprimen. ¿Por qué el proceso de dos pasos? ¿No logra comprimir la agrupación de archivos? ¿Hay algún otro beneficio del que no sea consciente?

Author: Ivan Aracki, 2008-11-17

16 answers

bzip y gzip trabajar en archivos individuales, no en grupos de archivos. zip (y pkzip) simples operan en grupos de archivos y tienen el concepto de archivo incorporado.

La filosofía *nix es una de las pequeñas herramientas que hacen trabajos específicos muy bien y se pueden encadenar juntas. Es por eso que hay dos herramientas aquí que tienen tareas específicas, y están diseñadas para encajar bien. También significa que puede usar tar para agrupar archivos y luego puede elegir una herramienta de compresión(bzip, gzip, sucesivamente).

 126
Author: Stewart Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-21 12:04:03

Es extraño que nadie más haya mencionado que las versiones modernas de GNU tar le permiten comprimir mientras está agrupando:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

También puede utilizar el compresor de su elección siempre que soporte las opciones' -c '(a stdout, o desde stdin) y' -d ' (descomprimir):

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

Esto le permitiría especificar cualquier compresor alternativo.

[Agregado: Si está extrayendo desde gzip o bzip2 archivos comprimidos, GNU tar los detecta automáticamente y ejecuta el programa apropiado. Es decir, se puede utilizar:

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

Y estos serán manejados correctamente. Si usa un compresor no estándar, debe especificarlo cuando realice la extracción.]

La razón de la separación es, como en la respuesta seleccionada, la separación de deberes. Entre otras cosas, significa que la gente podría usar el programa 'cpio ' para empaquetar los archivos (en lugar de tar) y luego usar el compresor de su elección (érase una vez, el preferido compressor fue pack, más tarde fue compress (que fue mucho más efectivo que pack), y luego gzip que corrió alrededor de sus predecesores, y es completamente competitivo con zip (que ha sido portado a Unix, pero no es nativo allí), y ahora bzip2 que, en mi experiencia, generalmente tiene una ventaja del 10-20% sobre gzip.

[Added : alguien señaló en su respuesta que cpio tiene convenciones divertidas. Eso es cierto, pero hasta que GNU tar obtuvo las opciones relevantes ('-T -'), cpio fue el mejor comando cuando no quería archivar todo lo que estaba debajo de un directorio dado you en realidad podía elegir exactamente qué archivos se archivaron. La desventaja de cpioera que no solo podíaelegir los archivos you usted tenía para elegirlos. Todavía hay un lugar donde cpio puntúa; puede hacer una copia in situ de una jerarquía de directorios a otro sin ningún almacenamiento intermedio:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

Por cierto, la opción' -depth ' en find es importante en este contexto - copia el contenido de los directorios antes de establecer los permisos en los propios directorios. Cuando revisé el comando antes de ingresar la adición a esta respuesta, copié algunos directorios de solo lectura (permiso 555); cuando fui a eliminar la copia, tuve que relajar los permisos en los directorios antes de que 'rm -fr /new/place' pudiera terminar. Sin la opción -depth, el comando cpio habría fallado. Sólo recordé esto cuando fui a hacer el limpieza - la fórmula citada es que automática para mí (principalmente en virtud de muchas repeticiones durante muchos años). ]

 26
Author: Jonathan Leffler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-21 07:15:44

Una distinción importante está en la naturaleza de los dos tipos de archivos.

Los archivos TAR son poco más que una concatenación del contenido del archivo con algunas cabeceras, mientras que gzip y bzip2 son compresores de flujo que, en tarballs, se aplican a toda la concatenación.

Los archivos ZIP son una concatenación de archivos comprimidos individualmente, con algunas cabeceras. En realidad, el algoritmo de DESINFLAR es utilizado tanto por zip como por gzip, y con el ajuste binario apropiado, podría tomar el carga útil de un flujo gzip y ponerlo en un archivo zip con entradas de encabezado y diccionario apropiadas.

Esto significa que los dos tipos de archivo diferentes tienen diferentes compensaciones. Para grandes colecciones de archivos pequeños, TAR seguido por un compresor de flujo normalmente resultará en una relación de compresión más alta que ZIP porque el compresor de flujo tendrá más datos para construir sus frecuencias de diccionario, y por lo tanto será capaz de exprimir más información redundante. Por otra parte, un (archivo-longitud-preservación) error en un archivo ZIP solo corromper los archivos cuyos datos comprimidos se vieron afectados. Normalmente, los compresores de flujo no pueden recuperarse significativamente de errores a mitad de flujo. Por lo tanto, los archivos ZIP son más resistentes a la corrupción, ya que parte del archivo seguirá siendo accesible.

 24
Author: Barry Kelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 15:49:29

Lo curioso es que puedes obtener un comportamiento no anticipado por los creadores de tar y gzip. Por ejemplo, usted no sólo puede gzip un archivo tar, también puede tar gzip archivos, para producir un files.gz.tar (esto podría ser técnicamente más cerca de la forma pkzip funciona). O puede poner otro programa en la canalización, por ejemplo, algo de criptografía, y puede elegir un orden arbitrario de alquitranado, gzipping y cifrado. Quien escribió el programa de criptografía no tiene que tener la más mínima idea cómo se usaría su programa, todo lo que necesita hacer es leer desde la entrada estándar y escribir a la salida estándar.

 15
Author: Svante,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 19:46:03

En el mundo Unix, la mayoría de las aplicaciones están diseñadas para hacer una cosa, y hacerlo bien. Las utilidades zip más populares en Unix, gzip y bzip2, solo hacen compresión de archivos. tar hace la concatenación de archivos. Canalizar la salida de tar en una utilidad de compresión hace lo que se necesita, sin agregar complejidad excesiva a ninguna pieza de software.

 8
Author: Harper Shelby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 15:31:10

Otra razón por la que es tan frecuente es que tar y gzip están en casi toda la base de instalación *NIX que hay. Creo que esta es probablemente la razón más grande. También es por eso que los archivos zip son extremadamente frecuentes en Windows, porque el soporte está integrado, independientemente de las rutinas superiores en RAR o 7z.

GNU tar también le permite crear / extraer estos archivos de un comando (un paso):

  • Crear un Archivo:
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • Extraer un archivo: (la parte-C es opcional, por defecto es el directorio actual)

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

Esto es lo que he guardado en la memoria desde mis muchos años en Linux y recientemente en Nexenta (OpenSolaris).

 7
Author: Bryan Rehbein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 16:14:09

Creo que estabas buscando más contexto histórico para esto. El zip original era para un solo archivo. Tar se utiliza para colocar varios archivos en un solo archivo. Por lo tanto, el alquitranado y el cierre es el proceso de dos pasos. Por qué sigue siendo tan dominante hoy en día es una suposición de cualquiera.

De wikipedia para Tar_ (formato de archivo)

En informática, tar (derivado del archivo de cinta) es tanto un formato de archivo (en forma de un tipo de flujo de bits de archivo) como el nombre del programa se utiliza para manejar tales archivos. El formato fue estandarizado por POSIX.1-1988 y posteriores POSIX.1-2001. Inicialmente desarrollado como un formato raw, utilizado para copias de seguridad de cinta y otros dispositivos de acceso secuencial con fines de copia de seguridad, ahora se usa comúnmente para recopilar colecciones de archivos en un archivo más grande, para su distribución o archivado, mientras preserva la información del sistema de archivos, como permisos de usuario y grupo, fechas y estructuras de directorios.

 5
Author: martinatime,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 15:34:11

Tar es popular principalmente por razones históricas. Hay varias alternativas disponibles. Algunos de ellos están alrededor por casi tanto tiempo como el alquitrán, pero no podría superar al alquitrán en popularidad por varias razones.

  • cpio (sintaxis alienígena; teóricamente más consistente, pero a la gente le gusta lo que saben, el tar prevaleció)
  • ar (popular hace mucho tiempo, ahora se usa para empaquetar archivos de biblioteca)
  • shar (scripts de shell autoextraíbles, tenía todo tipo de problemas; solía ser popular nunca menos)
  • zip (debido a problemas de licencia, no estaba disponible en muchas Unidades)

Una gran ventaja (y desventaja) de tar es que no tiene encabezado de archivo, ni directorio central de contenidos. Por lo tanto, durante muchos años nunca sufrió limitaciones en el tamaño de los archivos (hasta esta década, donde un límite de 8 Gb en los archivos dentro del archivo se convirtió en un problema, resuelto hace años).

Aparentemente el único inconveniente del alquitrán.gz (o ar.Z para el caso), que es que tienes que descomprimir todo el archivo para extraer archivos individuales y enumerar el contenido del archivo, nunca lastimar a la gente lo suficiente como para hacerlos desertar de tar en números significativos.

 3
Author: edgar.holleis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 17:07:21

Tar es UNIX como UNIX es tar

En mi opinión, la razón de que siga usando hoy en día es que es uno de los casos (probablemente raros) en los que el enfoque UNIX lo hizo perfectamente correcto desde el principio.

Echando un vistazo más de cerca a las etapas involucradas en la creación de archivos, espero que esté de acuerdo en que la forma en que se lleva a cabo la separación de diferentes tareas aquí es La filosofía de UNIX en su mejor momento:

  • Una herramienta (tar para dar es un nombre aquí) especializado en transformar cualquierselección de archivos, directorios y enlaces simbólicos incluyendo todos los metadatos relevantes como marcas de tiempo, propietarios y permisos en un flujo de bytes.

  • Y otra herramienta arbitrariamente intercambiable (gzip bz2 xz para nombrar solo algunas opciones) que transforma cualquier flujo de entrada de bytes en otro (con suerte) flujo de salida más pequeño.

Uso de tal y enfoque ofrece un par de beneficios para el usuario, así como para el desarrollador:

  • Extensibilidad Permitiendo acoplar tar con cualquier algoritmo de compresión ya existente o cualquier algoritmo de compresión aún por desarrollar sin que tenga que cambiar nada en el funcionamiento interno de tar en absoluto.

    Tan pronto como salga la nueva herramienta de compresión" hyper-zip-utra " o whater, ya está listo para usarla abrazando a tu nuevo siervo con todo el poder de tar.

  • Estabilidad tar ha estado en uso pesado desde principios de los 80 probados y se ha ejecutado en numerosos sistemas operativos y máquinas.

    Evitando la necesidad de reinventar la rueda en la implementación de la propiedad de almacenamiento, permisos, marcas de tiempo y similares una y otra vez para cada nueva herramienta de archivo no solo ahorra una gran cantidad de tiempo (de lo contrario innecesariamente gastado) en desarrollo, pero también garantiza la misma fiabilidad para cada nueva aplicación.

  • Consistency La interfaz de usuario permanece igual todo el tiempo.

    No hay necesidad de recordar que para restaurar permisos usando la herramienta A tienes que pasar la opción --i-hope-you-rember-this-one y usando la herramienta B tienes que usar --this-time-its-another-one mientras usas la herramienta C es `hope hope-you-didnt-try-with-tool-as-switch.

    Considerando que al utilizar la herramienta D realmente la habrías estropeado si no usaste --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.

 3
Author: mikyra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-19 03:39:57

Gzip y bzip2 es simplemente un compresor, no un software de archivo. De ahí la combinación. Necesita el software tar para agrupar todos los archivos.

ZIP en sí, y RAR también son una combinación de los dos procesos.

 2
Author: jishi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 15:28:48

Normalmente en el mundo *nux, los paquetes de archivos se distribuyen como tarballs y luego opcionalmente se comprimen con gzip. Gzip es un simple programa de compresión de archivos que no hace la agrupación de archivos que hace tar o zip.

En un momento, zip no manejaba correctamente algunas de las cosas que los sistemas de archivos Unix tar y Unix consideraban normales, como enlaces simbólicos, archivos de casos mixtos, etc. No se si eso ha cambiado, pero por eso usamos alquitrán.

 2
Author: Paul Tomblin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 15:29:21

Tar = Agrupa archivos en 1 archivos

GZip = Comprime el archivo

Dividen el proceso en 2. Eso es.

En el entorno de Windows que podría estar más acostumbrado a usar el WinZip o WinRAR que hacen un Zip. El proceso Zip de estos software agrupan el archivo y comprimir, pero simplemente no ve ese proceso.

 1
Author: Patrick Desjardins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 15:27:48

Por la misma razón por la que a los usuarios de mac les encantan las imágenes de disco: Son una forma muy conveniente de archivar cosas y luego pasarlas, subirlas/descargarlas o enviarlas por correo electrónico, etc.

Y más fácil de usar y más portátil que las cremalleras en mi humilde opinión.

 1
Author: Tobias,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-09 18:18:35

En mis días Altos-XENIX (1982) comenzamos a usar tar (tape archiver) para extraer archivos de 5 disquetes 1/4 o transmitir cinta, así como copiar a estos medios. Su funcionalidad es muy similar a la COPIA de SEGURIDAD.EXE y RESTAURAR.Comandos EXE en DOS 5.0 y 6.22 como suplementos, lo que le permite abarcar múltiples medios si no podía caber en solo uno. El inconveniente era que si uno de los múltiples medios tenía problemas, todo era inútil. tar y dd se originan en UNIX SYstem III y han permanecido una utilidad de versión estándar con sistema operativo tipo UNIX probablemente por razones de compatibilidad con versiones anteriores.

 1
Author: Frank R.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-27 05:23:08

Tar no es solo un formato de archivo, sino que es un formato de cinta. Las cintas almacenan datos bit a bit. Cada implementación de almacenamiento era personalizada. Tar era el método por el cual se podía tomar datos de un disco, y almacenarlos en cinta de una manera que otras personas podrían recuperarlos sin su programa personalizado.

Más tarde, los programas de compresión llegaron, y *nix todavía solo tenía un método para crear un solo archivo que contenía varios archivos.

Creo que es solo la inercia que ha continuado con la alquitrán.gz trend. Pkzip comenzó con compresión y archivo de un solo golpe, pero entonces los sistemas DOS no tenían típicamente unidades de cinta conectadas.

De wikipedia para Tar_ (formato de archivo)

En informática, tar (derivado del archivo de cinta) es tanto un formato de archivo (en forma de un tipo de flujo de bits de archivo) como el nombre del programa utilizado para manejar dichos archivos. El formato fue estandarizado por POSIX.1-1988 y posteriores POSIX.1-2001. Inicialmente desarrollado como un formato raw, utilizado para copia de seguridad de cinta y otros dispositivos de acceso secuencial con fines de copia de seguridad, ahora se usa comúnmente para recopilar colecciones de archivos en un archivo más grande, para su distribución o archivado, mientras preserva la información del sistema de archivos, como permisos de usuario y grupo, fechas y estructuras de directorios.

 0
Author: Kieveli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-28 03:04:23

Como desarrollador de Windows es comprensible cómo los tarballs parecen extraños. La palabra tar significa Archivo de cinta. Piense en grabadoras de cinta de carrete a carrete.

En el mundo Windows los programas generalmente se instalan con un setup.exe o install.exe que funcionan todo tipo de magia en el registro, creando directorios e instalando archivos .dll (Dynamic Link Library).

En Linux, Ubuntu en particular desde mi propia experiencia, los administradores de paquetes se encargan de tomar una aplicación e instalarlo la mayor parte del tiempo. En Ubuntu el desarrollador crea un paquete que termina en .deb (Debian, en el que se basa Ubuntu). La sintaxis básica para instalar un .deb es:

sudo apt install <package_name>

Aunque esto es relativamente sencillo para un usuario, es mucho trabajo para los desarrolladores crear un paquete .deb y asociar PPA.

Un método más fácil para los desarrolladores es crear un tarball. La carga de la instalación es compartida por el usuario final. Le debe:

  • descargue el archivo tar (normalmente termina en .tar.gz).
  • descomprimir el código fuente a un directorio.
  • compilar el código fuente (inaudito en Windows for Profit world).
  • esperemos que escriba lo que han hecho en caso de que necesiten repetir en el futuro porque no hay una base de datos apt (piense en la lista de programas instalados de Windows) que se pueda respaldar.

Como otra respuesta ya indica a otra pregunta que hizo, puede crear un tarball y comprimir datos al mismo tiempo. NO se requiere un proceso de dos pases.

 0
Author: WinEunuuchs2Unix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-25 00:29:24