¿Por qué la gente usa tarballs?

90

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

Al descargar algo, los archivos se guardan primero en un .tararchivo y luego se comprimen . ¿Por qué el proceso de dos pasos? ¿No logra la compresión de archivos la agrupación de archivos? ¿Existe algún otro beneficio del que no tenga conocimiento?

Brian Sullivan
fuente
3
Por lo general, solo combina la compresión y la agrupación de archivos en un solo comando. tar -zcf file.tar.gz algunos nombres de archivos
Juha Syrjälä
1
Nadie mencionó que transferir 1000000 archivos con un tamaño de 1 byte es más caro que transferir 1 archivo con un tamaño de 1000000 bytes.
Milo LaMar

Respuestas:

137

bzipy gziptrabajar en archivos individuales, no en grupos de archivos. Los viejos zip(y pkzip) 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 muy bien trabajos específicos y se pueden encadenar. Es por eso que aquí hay dos herramientas que tienen tareas específicas y están diseñadas para encajar bien entre sí. También significa que usted puede usar tar para archivos de grupo y entonces usted tiene la opción de una herramienta de compresión ( bzip, gzip, etc.).

Stewart Johnson
fuente
2
Respondió más rápido y un poco mejor que yo, ¡supongo que volveré al trabajo!
Harper Shelby
9
Te gané por 4 minutos, y eso es una eternidad en tiempo de desbordamiento de pila. :-)
Stewart Johnson
1
Vale la pena señalar que tanto tar como gzip son útiles por sí mismos y es por eso que están separados. Con un uso inteligente de las tuberías, una vez moví una carpeta de una computadora a otra colocando tarros, cremallera y tuberías sobre SSH, luego descomprimiéndola y destapando en el destino. Un comando, sin archivos temporales.
rmeador
1
También podría decir que se apegan a lo que se ha demostrado que funciona bien, en lugar de cambiar las cosas y romper la compatibilidad. .tar.gz se puede hacer en un solo paso independientemente de las llamadas herramientas y técnicas modernas (Registre WinZip).
JeeBee
2
No puedo creer que nadie haya editado la pregunta o haya dejado un comentario mencionando el (imo) punto de usar tararchivos: soporte de permisos del sistema de archivos de Linux . ¿Qué pasaría si descargara un paquete Debian, su administrador de paquetes lo instaló, pero ninguno de los ejecutables fuera ejecutable? Esa es la verdadera razón por la que todo el mundo usa tarballs ...;)
JamesTheAwesomeDude
28

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 algunos encabezados, mientras que gzip y bzip2 son compresores de flujo que, en los tarballs, se aplican a toda la concatenación.

Los archivos ZIP son una concatenación de archivos comprimidos individualmente, con algunos encabezados. En realidad, zip y gzip utilizan el algoritmo DEFLATE, y con el ajuste binario adecuado, puede tomar la carga útil de una secuencia gzip y colocarla en un archivo zip con las entradas de diccionario y encabezado adecuadas.

Esto significa que los dos tipos de archivos diferentes tienen diferentes compensaciones. Para colecciones grandes de archivos pequeños, TAR seguido de un compresor de flujo normalmente dará como resultado 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, podrá extraer más información redundante. Por otro lado, un error (preservación de la longitud del archivo) en un archivo ZIP solo dañará aquellos archivos cuyos datos comprimidos se vieron afectados. Normalmente, los compresores de flujo no pueden recuperarse de manera significativa de los errores a mitad de camino. Por lo tanto, los archivos ZIP son más resistentes a la corrupción, ya que parte del archivo seguirá siendo accesible.

Barry Kelly
fuente
¡Gracias por la distinción entre zip y tar + gzip!
Lucas
1
+1 para la distinción entre "comprimir un archivo agregado" y "agregar archivos comprimidos".
Jesse Chisholm
La razón por la que el alquitrán permite mejores relaciones de compresión y la cremallera es más resistente, por otro lado, se explica por el hecho de que el alquitrán es un tipo de compresión sólida, mientras que la cremallera no es sólida.
gaboroso
@Barry, en conclusión, ¿quién gana? (asumiendo que estamos usando sistemas operativos modernos)
Pacerier
@Pacerier No creo que haya ninguna victoria. Las cremalleras son mejores para acceso aleatorio y para uso de personas en Windows. Los Tarballs tienen una mayor compatibilidad lista para usar en Linux y Unix. Los tarballs tienen una compresión ligeramente más alta, pero necesitas descomprimir todo para acceder a cualquier cosa. Ambos admiten algoritmos de compresión arbitrarios, pero es mucho más fácil de mezclar y combinar con tarballs. Dependiendo del objetivo, cualquiera podría ser mejor.
Barry Kelly
26

Es extraño que nadie más haya mencionado que las versiones modernas de GNU tarte permiten comprimir mientras estás 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 admita 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 gzipo bzip2comprimiendo archivos, GNU tarlos detecta automáticamente y ejecuta el programa apropiado. Es decir, puedes usar:

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

y estos se manejarán adecuadamente. Si utiliza un compresor no estándar, debe especificarlo cuando realice la extracción.]

El motivo de la separación es, como en la respuesta seleccionada, la separación de funciones. Entre otras cosas, significa que la gente podría usar el cpioprograma ' ' para empaquetar los archivos (en lugar de tar) y luego usar el compresor de su elección (una vez, el compresor preferido era pack, más tarde fuecompress (que fue mucho más efectivo que pack), y luego gzipque corrió en torno a sus predecesores, y es completamente competitivo con zip(que se ha portado a Unix, pero no es nativo allí), y ahora bzip2, en mi experiencia, generalmente tiene una ventaja del 10-20% sobre gzip.

[ Agregado : alguien señaló en su respuesta que cpiotiene convenciones divertidas. Eso es cierto, pero hasta que GNU tarobtuviera las opciones relevantes (' -T -'), cpioera el mejor comando cuando no deseaba archivar todo lo que estaba debajo de un directorio determinado; de hecho, podía elegir exactamente qué archivos se archivarían. La desventaja cpioera que no solo podía elegir los archivos, sino que tenía que elegirlos. Todavía hay un lugar donde las cpiopuntuaciones; puede hacer una copia in situ de una jerarquía de directorios a otra sin ningún almacenamiento intermedio:

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

Por cierto, la -depthopción " " activada findes importante en este contexto: copia el contenido de los directorios antes de establecer los permisos en los propios directorios. Cuando verifiqué 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 -depthopción, el cpiocomando habría fallado. Solo recordé esto cuando fui a hacer la limpieza; la fórmula citada es así de automática para mí (principalmente en virtud de muchas repeticiones durante muchos años). ]

Jonathan Leffler
fuente
Un formato ZIP expandido podría acomodar compresores de flujo enchufables tanto como TAR, pero sin un protocolo IPC adecuado probablemente sería más lento debido a la ejecución excesiva de subprocesos.
Barry Kelly
mi comando goto: tar -xfvz tarpkg.tar.gz (reemplace la z con aj para archivos comprimidos bz2)
Bryan Rehbein
1
@Redbeard: tar detecta automáticamente gzip y bzip2 en la extracción; para crear, tienes que decirle qué hacer, pero yo solo uso -xf (o -xvf) y el nombre del archivo tar.
Jonathan Leffler
15

Lo curioso es que puedes obtener un comportamiento no anticipado por los creadores de tary gzip. Por ejemplo, no solo puede gzip un archivo tar, también puede tar archivos comprimidos con gzip, para producir un files.gz.tar(esto técnicamente estaría más cerca de la forma en que pkzipfunciona). O puede poner otro programa en la tubería, por ejemplo algo de criptografía, y puede elegir un orden arbitrario de tarificación, gzip y encriptación. Quien haya escrito el programa de criptografía no tiene que tener la menor idea de cómo se usaría su programa, todo lo que necesita hacer es leer desde la entrada estándar y escribir en la salida estándar.

Svante
fuente
Al generar el archivo, recuerde cifrar después de comprimir, no antes, porque la salida del cifrado parece aleatoria y es difícil de comprimir.
Jonathan Leffler
8

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 comprimen archivos. tar hace la concatenación de archivos. Canalizar la salida de alquitrán a una utilidad de compresión hace lo que se necesita, sin agregar una complejidad excesiva a ninguna de las partes del software.

Harper Shelby
fuente
7

Otra razón por la que es tan frecuente es que tar y gzip están en casi toda la base de instalación de * NIX que existe. Creo que esta es probablemente la razón más importante. También es la razón por la 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 desde 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 me he comprometido con la memoria de mis muchos años en Linux y recientemente en Nexenta (OpenSolaris).

Bryan Rehbein
fuente
3
En realidad, es al revés: zip está integrado en Windows ahora porque prevalecía en DOS y las primeras versiones de Windows.
Christian Lescuyer
Me gusta usar RAR en Windows, tar.bz2 en Linux
Osama Al-Maadeed
Es posible que observe el análisis de opciones extraño (no compatible con getopt ()), y el guión es opcional porque tar es anterior a las convenciones estándar de las opciones de comando de Unix.
Jonathan Leffler
5

Creo que buscabas 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, tarring y zipping es el proceso de dos pasos. Por qué sigue siendo tan dominante hoy en día es una incógnita.

De wikipedia para Tar_ (file_format)

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 posteriormente POSIX.1-2001. Inicialmente desarrollado como un formato sin procesar, utilizado para copias de seguridad en cinta y otros dispositivos de acceso secuencial con fines de copia de seguridad, ahora se utiliza comúnmente para recopilar colecciones de archivos en un archivo más grande, para su distribución o archivo, mientras se conserva la información del sistema de archivos, como el usuario y el grupo. permisos, fechas y estructuras de directorio.

hora de martina
fuente
4

tar es UNIX como UNIX es tar

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

Al observar más de cerca 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 las diferentes tareas aquí es la filosofía UNIX en su máxima expresión:

  • una herramienta ( tarpara darle un nombre aquí) especializada en transformar cualquier selección de archivos, directorios y enlaces simbólicos, incluidos todos los metadatos relevantes como marcas de tiempo, propietarios y permisos en un flujo de bytes.

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

El uso de este enfoque ofrece un par de beneficios tanto para el usuario como para el desarrollador:

  • extensibilidad Permitiendo acoplarse tarcon cualquier algoritmo de compresión ya existente o con cualquier algoritmo de compresión aún por desarrollar sin tener que cambiar nada en el funcionamiento interno de taren absoluto.

    Tan pronto como salga el nuevo "hyper-zip-utra" o cualquier herramienta de compresión, ya estará listo para usarlo abrazando a su nuevo servidor con todo el poder de tar.

  • La estabilidad se tar ha utilizado mucho desde principios de los 80, probada y ejecutada en numerosos sistemas operativos y máquinas.

    Evitar la necesidad de reinventar la rueda al implementar el almacenamiento de propiedad, permisos, marcas de tiempo y similares una y otra vez para cada nueva herramienta de archivo no solo ahorra mucho tiempo (de otra manera innecesariamente gastado) en el desarrollo, sino que también garantiza la misma confiabilidad para cada Nueva aplicación.

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

    No es necesario recordar que para restaurar los permisos usando la herramienta A debe pasar la opción --i-hope-you-rember-this-oney usar la herramienta B debe usar--this-time-its-another-one mientras usa la herramienta C es `--hope-you-didnt-try-with-tool-as-switch.

    Mientras que al utilizar la herramienta D, realmente la habría estropeado si no la hubiera utilizado --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.

mikyra
fuente
3

tar es popular principalmente por razones históricas. Hay varias alternativas disponibles. Algunos de ellos duran casi tanto como el alquitrán, pero no pudieron 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, prevaleció el alquitrán)
  • 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 sin embargo)
  • zip (debido a problemas de licencia, no estaba disponible en muchos Unices)

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

Aparentemente, la única desventaja de tar.gz (o ar.Z para el caso), que es que debe descomprimir todo el archivo para extraer archivos individuales y enumerar el contenido del archivo, nunca lastimar a las personas lo suficiente como para que se desvíen del alquitrán en cantidades significativas. .

edgar.holleis
fuente
Las versiones antiguas de tar no tenían información de encabezado; las nuevas versiones (compatibles con POSIX, USTAR) de tar (por ejemplo, GNU tar) sí lo hacen. El comando 'archivo' entiende esto.
Jonathan Leffler
2

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

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

jishi
fuente
2

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

En un momento, zip no manejaba adecuadamente algunas de las cosas que los sistemas de archivos Unix tar y Unix consideraban normales, como enlaces simbólicos, archivos de mayúsculas y minúsculas, etc. No sé si eso ha cambiado, pero es por eso que usamos tar.

Paul Tomblin
fuente
1
* nux - ¿Linux, Unux, Solarnux?
mackenir
1
@mackenir - no te olvides de POSUX. :-)
Paul Tomblin
1
@mackenir - ¿O debería ser POSNUX?
Paul Tomblin
1

Tar = archivos de grupos en 1 archivos

GZip = Comprima el archivo

Dividieron el proceso en 2. Eso es todo.

En el entorno de Windows, es posible que esté más acostumbrado a usar WinZip o WinRar que hacen un Zip. El proceso Zip de este software agrupa el archivo y la compresión pero simplemente no ve ese proceso.

Patrick Desjardins
fuente
3
No es la mejor explicación, dado que los archivos "zip" a los que está acostumbrado el OP en Windows, ya incorporan la agrupación.
Gareth
1

Por la misma razón por la que a los usuarios de Mac les encantan las imágenes de disco: son una forma realmente conveniente de archivar cosas y luego pasarlas, 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.

Tobias
fuente
1

En mis días de Altos-XENIX (1982) comenzamos a usar tar (archivador de cinta) para extraer archivos de 5 1/4 disquetes o cintas de transmisión, así como para copiarlos en estos medios. Su funcionalidad es muy similar a los comandos BACKUP.EXE y RESTORE.EXE en DOS 5.0 y 6.22 como suplementos, lo que le permite abarcar varios medios si no caben en uno solo. 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 se ha mantenido como una utilidad de lanzamiento estándar con sistemas operativos similares a UNIX probablemente por razones de compatibilidad con versiones anteriores.

Frank R.
fuente
0

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 fue personalizada. El alquitrán era el método mediante el cual se podían extraer datos de un disco y almacenarlos en una cinta de manera que otras personas pudieran recuperarlos sin su programa personalizado.

Más tarde, llegaron los programas de compresión, 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 lo que ha continuado con la tendencia tar.gz. Pkzip comenzó con la compresión y el archivo de una sola vez, ¡pero luego los sistemas DOS normalmente no tenían unidades de cinta conectadas!

De wikipedia para Tar_ (file_format)

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 posteriormente POSIX.1-2001. Inicialmente desarrollado como un formato sin procesar, utilizado para copias de seguridad en cinta y otros dispositivos de acceso secuencial con fines de copia de seguridad, ahora se utiliza comúnmente para recopilar colecciones de archivos en un archivo más grande, para su distribución o archivo, mientras se conserva la información del sistema de archivos, como el usuario y el grupo. permisos, fechas y estructuras de directorio.

Kieveli
fuente
Estrictamente hablando, tar es un formato de archivo, es solo que en las cintas Unix hay solo otro archivo.
Martin Beckett
En realidad, tar no era un formato de archivo para empezar. Las cintas no tenían sistemas de archivos, por lo que se creó tar como un parche para no tener un sistema de archivos.
Kieveli
0

Como desarrollador de Windows, es comprensible lo extraños que parecen los tarballs . La palabratar significa Archivo de cinta. Piense en grabadoras de cinta de carrete a carrete.

En el mundo de Windows los programas generalmente se instalan con un setup.exeo install.exeque funcionan todo tipo de hechicería en el registro, creando directorios e instalando.dll archivos (Biblioteca de vínculos dinámicos).

En Linux, Ubuntu en particular desde mi propia experiencia, los administradores de paquetes se encargan de tomar una aplicación e instalarla 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 a .debes:

sudo apt install <package_name>

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

Un método más sencillo para los desarrolladores es crear un tarball. Entonces, la carga de la instalación la comparte el usuario final. Ellos deben:

  • descargar el tarball (que normalmente termina en .tar.gz ).
  • descomprime el código fuente en un directorio.
  • compilar el código fuente (inaudito en el mundo de Windows for Profit).
  • con suerte, anote lo que han hecho en caso de que necesiten repetirlo en el futuro porque no hay una aptbase de datos (piense en la lista de programas instalados de Windows) de la que se pueda hacer una copia de seguridad.

Como otra respuesta ya indica a otra pregunta que hizo, PUEDE crear un archivo comprimido y comprimir datos al mismo tiempo. NO se requiere un proceso de dos pasadas.

WinEunuuchs2Unix
fuente