Pregunta

Como desarrollador principalmente de Windows, tal vez 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 comprimido . ¿Por qué el proceso de dos pasos? ¿ zipping no logra la agrupación de archivos? ¿Hay algún otro beneficio del que no tenga conocimiento?

¿Fue útil?

Solución

bzip y gzip funcionan en archivos individuales, no en grupos de archivos. Los zip (y pkzip ) antiguos funcionan en grupos de archivos y tienen el concepto del 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 hay dos herramientas aquí que tienen tareas específicas, y están diseñadas para encajar bien juntas. También significa que puede usar tar para agrupar archivos y luego puede elegir una herramienta de compresión ( bzip , gzip , etc.).

Otros consejos

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 tarballs, se aplican a toda la concatenación.

Los archivos ZIP son una concatenación de archivos comprimidos individualmente, con algunos encabezados. En realidad, tanto el zip como el gzip utilizan el algoritmo DEFLATE, y con el ajuste binario apropiado, puede tomar la carga útil de un flujo de gzip y colocarlo en un archivo zip con las entradas apropiadas del encabezado y el diccionario.

Esto significa que los dos tipos diferentes de archivo tienen diferentes compensaciones. Para grandes colecciones 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 significativamente de los errores a mitad del flujo. Por lo tanto, los archivos ZIP son más resistentes a la corrupción, ya que parte del archivo seguirá siendo accesible.

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

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

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

También puede usar el compresor de su elección siempre que sea compatible con ' -c ' (para stdout o desde stdin) y ' -d ' (descomprimir) opciones:

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

Esto le permitiría especificar cualquier compresor alternativo.

[ Agregado : si está extrayendo archivos comprimidos gzip o bzip2 , GNU tar detecta automáticamente estos y ejecuta el programa apropiado. Es decir, puede 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 correctamente. 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 deberes. Entre otras cosas, significa que las personas podrían usar el programa ' cpio ' para empaquetar los archivos (en lugar de tar ) y luego usar el compresor de su elección (una vez , el compresor preferido era pack , luego era compress (que era mucho más efectivo que pack ), y luego gzip que se ejecuta alrededor de sus dos predecesores, y es completamente competitivo con zip (que se ha portado a Unix, pero no es nativo allí), y ahora bzip2 que, en mi experiencia, generalmente tiene una ventaja del 10-20% sobre gzip .

[ Agregado : alguien notó en su respuesta que cpio tiene convenciones divertidas. Eso es cierto, pero hasta que GNU tar obtuviera las opciones relevantes (' -T - '), cpio era el mejor comando cuando no deseaba para archivar todo lo que estaba debajo de un directorio dado, en realidad podría elegir exactamente qué archivos se archivaron. La desventaja de cpio era que no solo podía elegir los archivos, sino que 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 otra 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 directorios mismos. 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. Solo recordé esto cuando fui a hacer la limpieza: la fórmula citada es esa automática para mí (principalmente en virtud de muchas repeticiones durante muchos años). ]

Lo curioso es que puede obtener un comportamiento no previsto por los creadores de tar y gzip . Por ejemplo, no solo puede comprimir un archivo tar, sino también archivos tar comprimidos, para producir un files.gz.tar (esto técnicamente estaría más cerca de la forma en que pkzip obras). O puede poner otro programa en proceso, por ejemplo, algo de criptografía, y puede elegir un orden arbitrario de tarring, gzipping y cifrado. Quien escribió 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.

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. Instalar la salida de alquitrán en una utilidad de compresión hace lo que se necesita, sin agregar una complejidad excesiva a ninguna pieza de software.

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

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 zarpado y la compresión son los dos pasos del proceso. Por qué todavía es tan dominante hoy en día, nadie lo sabe.

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 flujo de bits de archivo) como el nombre del programa utilizado para manejar dichos archivos. El formato fue estandarizado por POSIX.1-1988 y posterior POSIX.1-2001. Inicialmente desarrollado como un formato sin formato, utilizado para la copia de seguridad en cinta y otros dispositivos de acceso secuencial para fines de copia de seguridad, ahora se utiliza comúnmente para recopilar colecciones de archivos en un archivo más grande, para distribución o archivado, al tiempo que conserva la información del sistema de archivos, como el usuario y el grupo permisos, fechas y estructuras de directorios.

tar es UNIX como UNIX es tar

En mi opinión, la razón de que todavía use tar hoy es que es uno de los casos (probablemente raros) en los que el enfoque UNIX lo hizo perfectamente desde el principio comienzo.

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

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

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

El uso de este tipo de enfoque ofrece un par de beneficios para el usuario y para el desarrollador:

  • extensibilidad Permitir acoplar tar con cualquier algoritmo de compresión ya existente o cualquier algoritmo de compresión aún por desarrollar sin tener que cambiar cualquier cosa en el funcionamiento interno de tar en absoluto.

    Tan pronto como el nuevo "hyper-zip-utra" o sale una herramienta de compresión, ya estás listo para usarla, abrazando a tu nuevo servidor con todo el poder de tar .

  • estabilidad tar ha sido de uso intensivo desde principios de los años 80 probado y ejecutado en numerosos sistemas operativos y máquinas.

    Prevención de la necesidad de reinventar la rueda en la implementación del almacenamiento de propiedad, permisos, marcas de tiempo y similares una y otra vez para cada nuevo archivo la herramienta no solo ahorra una gran cantidad de tiempo (de otra manera innecesariamente invertida) en 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-one y 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 lo habrías estropeado si no hubieras utilizado --si-hubieras utilizado-tool-bs-switch-your-files-would-have-been- eliminado-ahora .

tar es popular principalmente por razones históricas. Hay varias alternativas disponibles. Algunos de ellos existen por casi el mismo tiempo que el alquitrán, pero no pudieron superar su popularidad por varias razones.

  • cpio (sintaxis alienígena; teóricamente más consistente, pero a las personas les gusta lo que saben, prevaleció el alquitrán)
  • ar (popular hace mucho tiempo, ahora usado para empacar archivos de biblioteca)
  • shar (scripts de shell autoextraíbles, tenía todo tipo de problemas; sin embargo, solía ser popular)
  • zip (debido a problemas de licencia no estaba disponible en muchos Unices)

Una ventaja importante (y desventaja) de tar es que no tiene encabezado de archivo ni directorio central de contenido. Durante muchos años, por lo tanto, nunca sufrió limitaciones en el tamaño del archivo (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 de tar.gz (o ar.Z para el caso), es que debe descomprimir todo el archivo para extraer archivos individuales y enumerar el contenido del archivo, nunca perjudica a las personas lo suficiente como para que se conviertan en defectos del tar en cantidades significativas.

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 y RAR también son una combinación de los dos procesos.

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

En un momento, zip no manejó 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 cambió, pero es por eso que usamos alquitrán.

Tar = Agrupa archivos en 1 archivos

GZip = Comprimir 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.

Por la misma razón por la que los usuarios de Mac aman las imágenes de disco: son una forma realmente 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.

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 copiarlos a 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 múltiples medios si no cabe en uno solo. El inconveniente era que si uno de los múltiples medios tenía problemas, todo el asunto no tenía valor. tar y dd se originan en UNIX SYstem III y ha seguido siendo una utilidad de lanzamiento estándar con sistemas operativos tipo UNIX 'probablemente por razones de compatibilidad con versiones anteriores.

Tar no es solo un formato de archivo, sino que es un formato de cinta. Las cintas almacenan datos bit por bit. Cada implementación de almacenamiento fue personalizada. Tar era el método por el cual podía extraer datos de un disco y almacenarlos en 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 múltiples archivos.

Creo que es solo la inercia la 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 generalmente 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 flujo de bits de archivo) como el nombre del programa utilizado para manejar dichos archivos. El formato fue estandarizado por POSIX.1-1988 y posterior POSIX.1-2001. Inicialmente desarrollado como un formato sin formato, utilizado para la copia de seguridad en cinta y otros dispositivos de acceso secuencial para fines de copia de seguridad, ahora se utiliza comúnmente para recopilar colecciones de archivos en un archivo más grande, para distribución o archivado, al tiempo que conserva la información del sistema de archivos, como el usuario y el grupo permisos, fechas y estructuras de directorios.

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

En el mundo de Windows, los programas generalmente se instalan con un setup.exe o install.exe que funcionan con todo tipo de hechicería en el registro, creando directorios e instalando .dll (Biblioteca de enlaces 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 un .deb es:

sudo apt install <package_name>

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

Un método más fácil para los desarrolladores es crear un tarball. Luego, el usuario final comparte la carga de la instalación. Deben:

  • descargue el tarball (generalmente termina en .tar.gz ).
  • descomprime el código fuente en un directorio.
  • compila el código fuente (inaudito en Windows for Profit world).
  • con suerte 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 puede hacer una copia de seguridad.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top