archives - downgrade a package arch linux
¿Por qué la gente usa tarballs? (16)
tar es UNIX como UNIX es tar
En mi opinión, el motivo por el que todavía se utiliza tar
hoy es que es uno de los casos (probablemente excepcionales) en que el enfoque de UNIX lo hizo perfectamente desde el principio.
Mirando más de cerca las etapas involucradas en la creación de archivos, espero que esté de acuerdo en que la separación de las diferentes tareas aquí es la filosofía de UNIX en su máxima expresión:
una herramienta (
tar
para darle un nombre aquí) especializada en la transformación de 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
xz
por nombrar solo algunas opciones) que transforma cualquier flujo de entrada de bytes en otra secuencia de salida (con suerte) más pequeña.
El uso de tales y enfoques ofrece un par de beneficios para el usuario y para el desarrollador:
extensibilidad. Permite emparejar el
tar
con cualquier algoritmo de compresión ya existente o cualquier algoritmo de compresión que aún deba desarrollarse sin tener que cambiar nada en el funcionamiento interno deltar
.Tan pronto como salga la nueva herramienta de compresión "wha-zip-utra" o whater, ya estará listo para utilizarla, abrazando a su nuevo servidor con toda la potencia del
tar
.El
tar
estabilidad ha estado en uso intensivo desde principios de los años ochenta y ha sido probado en numerosos sistemas operativos y máquinas.Evitar la necesidad de reinventar la rueda para implementar la propiedad, permisos, sellos de tiempo y similares una y otra vez para cada nueva herramienta de archivado no solo ahorra mucho tiempo (de lo contrario se gasta innecesariamente) 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 hay necesidad de recordar que para restaurar permisos usando la herramienta A, tiene que pasar la opción
--i-hope-you-rember-this-one
y usar la herramienta B tiene que usar--this-time-its-another-one
mientras usando la herramienta C es `--hope-you-didnt-try-with-tool-as-switch.Mientras que al utilizar la herramienta D, realmente la habrías arruinado si no
--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now
utilizado--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now
.
Como desarrollador principalmente de Windows, tal vez me falta algo cultural en la comunidad de 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? ¿La compresión no alcanza la agrupación de archivos? ¿Hay algún otro beneficio del que no estoy enterado?
Como desarrollador de Windows es comprensible cómo los archivos tar parecen extraños. La palabra tar
significa Tape Archive. Piensa en los grabadores de cinta carrete a carrete.
En el mundo de Windows, los programas generalmente se instalan con setup.exe
o install.exe
que funcionan con todo tipo de hechizos en el registro, creando directorios e instalando .dll
(Dynamic Link Library).
En Linux, Ubuntu en particular por mi propia experiencia, los gerentes 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 el PPA.
Un método más fácil para los desarrolladores es crear un tarball. Entonces la carga de la instalación es compartida por el usuario final. Ellos deben:
- descarga el archivo tar (por lo general termina en
.tar.gz
). - descomprimir el código fuente a un directorio.
- compilar el código fuente (algo inaudito en Windows for Profit world).
- esperemos que anoten lo que han hecho en caso de que necesiten repetir en el futuro porque no hay una base de datos
apt
(como la lista de programas instalados de Windows) de la 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.
Creo que estabas buscando más contexto histórico para esto. El archivo zip original era para un solo archivo. Tar se usa para colocar múltiples archivos en un solo archivo. Por lo tanto, tarring y zipping es el proceso de dos pasos. Por qué todavía es tan dominante hoy, nadie puede adivinar.
De Wikipedia para Tar_ (file_format)
En informática, tar (derivado del archivo de cinta) es a la vez un formato de archivo (en forma de un tipo de bitstream de archivo) y 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 formato sin procesar, utilizado para copias de seguridad en cinta y otros dispositivos de acceso secuencial con fines de copia de seguridad, ahora se usa comúnmente para cotejar colecciones de archivos en un archivo más grande, para su distribución o archivo, conservando información del sistema de archivos como usuario y grupo permisos, fechas y estructuras de directorios.
En el mundo de 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. Tubería de la salida de alquitrán en una herramienta de compresión hace lo que se necesita, sin agregar una complejidad excesiva a cualquier pieza de software.
En mis días Altos-XENIX (1982) comenzamos a usar tar (archivador de cintas) para extraer archivos de 5 1/4 disquetes o cintas de transmisión, así como también 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 complementos, 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 no valía nada. tar y dd se originan en el sistema UNIX III y han seguido siendo una utilidad de lanzamiento estándar con sistema operativo tipo UNIX, probablemente por razones de compatibilidad con versiones anteriores.
Lo curioso es que puedes obtener un comportamiento no anticipado por los creadores de tar
y gzip
. Por ejemplo, no solo puede gzip un archivo tar, sino también archivos tar gzipped, para producir un files.gz.tar
(esto técnicamente estaría más cerca de la forma en que funciona pkzip
). O puede poner otro programa en proceso, por ejemplo alguna criptografía, y puede elegir un orden arbitrario de tarring, gzipping y encriptación. Quien escribió el programa de criptografía no tiene que tener la menor idea de cómo se usará su programa, todo lo que tiene que hacer es leer desde la entrada estándar y escribir en la salida estándar.
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. Creo que esta es probablemente la razón más importante. 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 desde un comando (un paso):
- Crear un archivo:
-
tar -cfvj destination.tar.bz2 *.files
tar -cfvz destination.tar.gz *.files
Extraiga un archivo: (la parte -C es opcional, por defecto está en el directorio actual)
-
tar -xfvj archive.tar.bz2 -C destination_path
-
tar -xfvz archive.tar.gz -C destination_path
Esto es lo que he confiado a la memoria de mis muchos años en Linux y recientemente en Nexenta (OpenSolaris).
Por la misma razón por la que los usuarios de Mac aman 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.
Por lo general, en el mundo * nux, los paquetes de archivos se distribuyen como archivos comprimidos y, opcionalmente, gzip. Gzip es un programa de compresión de archivos simple que no hace el archivo que agrupa 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 casos mezclados, etc. No sé si eso ha cambiado, pero es por eso que usamos tar.
Tar = Grupos de archivos en 1 archivos
GZip = Zip 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 de Zip de estos programas agrupa el archivo y comprime pero simplemente no ve ese proceso.
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 sacar datos de un disco y almacenarlos en cinta de forma que otras personas pudieran recuperarlos sin su programa personalizado.
Más tarde, llegaron los programas de compresión, y * nix todavía tenía un método para crear un único archivo que contenía varios archivos.
Creo que es solo la inercia 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 no solían tener unidades de cinta incorporadas!
De Wikipedia para Tar_ (file_format)
En informática, tar (derivado del archivo de cinta) es a la vez un formato de archivo (en forma de un tipo de bitstream de archivo) y 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 formato sin procesar, utilizado para copias de seguridad en cinta y otros dispositivos de acceso secuencial con fines de copia de seguridad, ahora se usa comúnmente para cotejar colecciones de archivos en un archivo más grande, para su distribución o archivo, conservando información del sistema de archivos como usuario y grupo permisos, fechas y estructuras de directorios.
Una distinción importante radica en la naturaleza de los dos tipos de archivos.
Los archivos TAR son poco más que una concatenación de los contenidos 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, el algoritmo DEFLATE es utilizado tanto por zip como por gzip, y con el ajuste binario apropiado, puede tomar la carga útil de una transmisión gzip y colocarla en un archivo zip con el encabezado y las entradas de diccionario apropiadas.
Esto significa que los dos tipos de archivos diferentes tienen diferentes intercambios. 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 así podrá exprimir más información redundante. Por otro lado, un error (de preservación de longitud de 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 de camino. Por lo tanto, los archivos ZIP son más resistentes a la corrupción, ya que parte del archivo seguirá estando accesible.
bzip y gzip funcionan en archivos individuales, no en grupos de archivos. El antiguo zip simple (y pkzip) opera en grupos de archivos y tiene incorporado el concepto de archivo.
La filosofía * nix es una de las herramientas pequeñas que realizan trabajos específicos muy bien y pueden encadenarse entre sí. Es por eso que aquí hay dos herramientas 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 tiene la opción de herramienta de compresión (bzip, gzip, etc.).
gzip y bzip2 es simplemente un compresor, no un software de archivador. Por lo tanto, 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.
tar es popular principalmente por razones históricas. Hay varias alternativas disponibles. Algunos de ellos son casi tan largos como el alquitrán, pero no pudieron superar el alquitrán en popularidad por varias razones.
- cpio (sintaxis alienígena, teóricamente más consistente, pero a las personas les gusta lo que saben, el alquitrán prevaleció)
- ar (popular hace mucho tiempo, ahora se usa para empacar archivos de biblioteca)
- shar (autoextracción de guiones de shell, tenía todo tipo de problemas, solía ser popular nunca menos)
- zip (debido a problemas de licencia, no estaba disponible en muchos Unices)
Una gran ventaja (y desventaja) del alquitrán es que no tiene encabezado de archivo ni directorio central de contenidos. Durante muchos años, por lo tanto, nunca sufrió limitaciones en el tamaño del archivo (hasta esta década, cuando un límite de 8 Gb en los archivos dentro del archivo se convirtió en un problema, resuelto hace años).
Al parecer, la desventaja de tar.gz (o ar.Z para el caso), que es que tiene que descomprimir todo el archivo para extraer archivos individuales y enumerar los contenidos del archivo, nunca lastimar a las personas lo suficiente como para hacerlos defectuosos del alquitrán en cantidades significativas .
Es extraño que nadie más haya mencionado que las versiones modernas del tar
GNU le permiten comprimir mientras está agrupando:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
También puede usar el compresor que elija siempre que admita las opciones '' -c
'' (para stdout, o de stdin) y '' -d
'' (descompresión):
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
, el tar
GNU los 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 serán manejados correctamente. Si usa 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 elección (érase una vez, el compresor preferido era pack
, luego era compress
(que era mucho más efectivo que el 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, usualmente tiene una ventaja del 10-20% sobre gzip
.
[ Agregado : alguien señaló en su respuesta que cpio
tiene convenciones graciosas. Eso es cierto, pero hasta que GNU tar
obtuvo las opciones relevantes ('' -T -
''), cpio
fue el mejor comando cuando no deseaba archivar todo lo que estaba debajo de un directorio determinado; realmente podía elegir exactamente qué archivos se archivaban. La desventaja de cpio
era que no solo podías elegir los archivos; tenías que elegirlos. Todavía hay un lugar donde puntajes cpio
; puede hacer una copia in situ desde 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 los contenidos de los directorios antes de establecer los permisos en los mismos 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. Solo recordé esto cuando fui a hacer la limpieza, la fórmula citada es automática para mí (principalmente en virtud de muchas repeticiones a lo largo de muchos años). ]