stringtranslate.com

tar (informática)

En informática , tar es una utilidad de software para recopilar muchos archivos en un solo archivo , a menudo denominado tarball , para fines de distribución o copia de seguridad. El nombre se deriva de " t ape archive ", ya que se desarrolló originalmente para escribir datos en dispositivos de E/S secuenciales sin un sistema de archivos propio, como los dispositivos que utilizan cinta magnética . Los conjuntos de datos de archivo creados por tar contienen varios parámetros del sistema de archivos , como nombre, marcas de tiempo, propiedad, permisos de acceso a archivos y organización de directorios . POSIX abandonó tar en favor de pax , pero tar continúa su uso generalizado.

Historia

La utilidad de línea de comandos se introdujo por primera vez en la versión 7 de Unix en enero de 1979, reemplazando el programa tp (que a su vez reemplazó a "tap"). [7] La ​​estructura de archivos para almacenar esta información se estandarizó en POSIX .1-1988 [8] y posteriormente POSIX.1-2001, [9] y se convirtió en un formato compatible con la mayoría de los sistemas de archivo de archivos modernos. El comando tar se abandonó en POSIX.1-2001 en favor del comando pax , que debía admitir el formato de archivo ustar; Se indicó la retirada del comando tar a favor del comando pax al menos desde 1994.

Hoy en día, los sistemas operativos tipo Unix suelen incluir herramientas para admitir archivos tar, así como utilidades comúnmente utilizadas para comprimirlos, como xz , gzip y bzip2 .

El comando tar también ha sido portado al sistema operativo IBM i . [10]

BSD-tar se ha incluido en Microsoft Windows desde la actualización de Windows 10 de abril de 2018 , [11] [12] y, por lo demás, existen varias herramientas de terceros disponibles para leer y escribir estos formatos en Windows.

Razón fundamental

Muchas unidades de cinta históricas leen y escriben bloques de datos de longitud variable , lo que deja un importante espacio desperdiciado en la cinta entre bloques (para que la cinta comience físicamente y deje de moverse). Algunas unidades de cinta (y discos sin formato) sólo admiten bloques de datos de longitud fija. Además, cuando se escribe en cualquier medio, como un sistema de archivos o una red, se necesita menos tiempo para escribir un bloque grande que muchos bloques pequeños. Por lo tanto, el comando tar escribe datos en registros de muchos  bloques de 512 B. El usuario puede especificar un factor de bloqueo, que es la cantidad de bloques por registro. El valor predeterminado es 20, lo que produce registros de 10  KiB . [13]

Formato de archivo

Existen múltiples formatos de archivos tar, incluidos los históricos y actuales. En POSIX se codifican dos formatos tar: ustar y pax. No codificado pero aún en uso actual es el formato tar GNU.

Un archivo tar consta de una serie de objetos de archivo, de ahí el término popular tarball , que hace referencia a cómo un tarball recopila objetos de todo tipo que se adhieren a su superficie. Cada objeto de archivo incluye datos de archivo y está precedido por un registro de encabezado de 512 bytes . Los datos del archivo se escriben sin modificaciones, excepto que su longitud se redondea a un múltiplo de 512 bytes. La implementación tar original no se preocupaba por el contenido de los bytes de relleno y dejaba los datos del búfer sin cambios, pero la mayoría de las implementaciones tar modernas llenan el espacio extra con ceros. [14] El final de un archivo está marcado por al menos dos registros consecutivos llenos de ceros. (El origen del tamaño de registro de tar parece ser los sectores de disco de 512 bytes utilizados en el sistema de archivos Unix Versión 7). El bloque final de un archivo se completa con ceros.

Encabezamiento

El registro del encabezado del archivo contiene metadatos sobre un archivo. Para garantizar la portabilidad entre diferentes arquitecturas con distintos ordenamientos de bytes , la información del registro de encabezado está codificada en ASCII . Por lo tanto, si todos los archivos de un archivo son archivos de texto ASCII y tienen nombres ASCII, entonces el archivo es esencialmente un archivo de texto ASCII (que contiene muchos caracteres NUL ).

Los campos definidos por el formato tar original de Unix se enumeran en la siguiente tabla. La tabla de indicador de enlace/tipo de archivo incluye algunas extensiones modernas. Cuando un campo no se utiliza, se llena con bytes NUL. El encabezado utiliza 257 bytes y luego se rellena con bytes NUL para que llene un registro de 512 bytes. No hay ningún "número mágico" en el encabezado para la identificación del archivo.

Encabezado tar anterior a POSIX.1-1988 (es decir, v7):

El campo indicador de enlace anterior a POSIX.1-1988 puede tener los siguientes valores:

Algunas implementaciones tar anteriores a POSIX.1-1988 indicaban un directorio con una barra diagonal (/) en el nombre.

Los valores numéricos se codifican en números octales utilizando dígitos ASCII, con ceros a la izquierda. Por razones históricas, también se debe utilizar un carácter NUL o espacio final. Por lo tanto, aunque hay 12 bytes reservados para almacenar el tamaño del archivo, sólo se pueden almacenar 11 dígitos octales. Esto da un tamaño de archivo máximo de 8 gigabytes en archivos archivados. Para superar esta limitación, en 2001 star introdujo una codificación en base 256 que se indica estableciendo el bit de orden superior del byte más a la izquierda de un campo numérico. [ cita necesaria ] GNU-tar y BSD-tar siguieron esta idea. Además, las versiones de tar anteriores al primer estándar POSIX de 1988 rellenan los valores con espacios en lugar de ceros.

La suma de verificación se calcula tomando la suma de los valores de bytes sin signo del registro de encabezado con los ocho bytes de suma de verificación tomados como espacios ASCII (valor decimal 32). Se almacena como un número octal de seis dígitos con ceros a la izquierda seguidos de un NUL y luego un espacio. Varias implementaciones no se adhieren a este formato. Además, algunas implementaciones históricas de tar trataron los bytes como firmados. Las implementaciones generalmente calculan la suma de verificación en ambos sentidos y la tratan como buena si la suma firmada o no firmada coincide con la suma de verificación incluida.

Los sistemas de archivos Unix admiten múltiples enlaces (nombres) para el mismo archivo. Si aparecen varios archivos de este tipo en un archivo tar, sólo el primero se archiva como un archivo normal; el resto se archivan como enlaces físicos, con el campo "nombre del archivo vinculado" configurado con el nombre del primero. Tras la extracción, dichos enlaces físicos deben volver a crearse en el sistema de archivos.

formato UStar

La mayoría de los programas tar modernos leen y escriben archivos en el formato UStar ( Unix Standard TAR [7] [15] ), introducido por el estándar POSIX IEEE P1003.1 de 1988. Introdujo campos de encabezado adicionales. Los programas tar más antiguos ignorarán la información adicional (posiblemente extrayendo archivos con nombres parciales), mientras que los programas más nuevos probarán la presencia de la cadena "ustar" para determinar si el nuevo formato está en uso. El formato UStar permite nombres de archivos más largos y almacena información adicional sobre cada archivo. El tamaño máximo de nombre de archivo es 256, pero se divide entre una ruta anterior "prefijo de nombre de archivo" y el nombre de archivo en sí, por lo que puede ser mucho menor. [dieciséis]

El campo de marca de tipo puede tener los siguientes valores:

Las extensiones específicas del proveedor POSIX.1-1988 que utilizan valores de indicador de enlace 'A'–'Z' tienen parcialmente un significado diferente con diferentes proveedores y, por lo tanto, se consideran obsoletas y reemplazadas por las extensiones POSIX.1-2001 que también incluyen una etiqueta de proveedor.

El tipo '7' (archivo contiguo) está formalmente marcado como reservado en el estándar POSIX, pero estaba destinado a indicar archivos que deberían asignarse de forma contigua en el disco. Pocos sistemas operativos admiten la creación explícita de este tipo de archivos y, por lo tanto, la mayoría de los programas TAR no los admiten y tratarán los archivos de tipo 7 como si fueran de tipo 0 (normal). Una excepción son las versiones anteriores de GNU tar, cuando se ejecutan en el sistema operativo MASSCOMP RTU (Real Time Unix), que admitían un indicador O_CTG para la función open() para solicitar un archivo contiguo; sin embargo, ese soporte se eliminó a partir de la versión 1.24 de GNU tar.

POSIX.1-2001/pax

En 1997, Sun propuso un método para añadir extensiones al formato tar. Este método fue posteriormente aceptado para el estándar POSIX.1-2001. Este formato se conoce como formato tar extendido o formato pax . El nuevo formato tar permite a los usuarios agregar cualquier tipo de mejoras específicas del proveedor etiquetadas por el proveedor. Las siguientes etiquetas están definidas por el estándar POSIX:

En 2001, el programa Star se convirtió en el primer tar en admitir el nuevo formato. [ cita necesaria ] En 2004, GNU tar admitió el nuevo formato, [17] aunque todavía no lo escribe como su salida predeterminada del programa tar. [18]

El formato pax está diseñado para que todas las implementaciones capaces de leer el formato UStar también puedan leer el formato pax. Las únicas excepciones son los archivos que utilizan funciones extendidas, como nombres de archivo más largos. Por compatibilidad, estos están codificados en los archivos tar como archivos especiales xo gde tipo, generalmente en un PaxHeaders.XXXXdirectorio. [19] : exthdr.name  Una implementación compatible con pax haría uso de la información, mientras que las que no lo son, como 7-Zip , la procesarían como archivos adicionales. [20]

Usos

Sintaxis de comando

tar [-opciones] <nombre del archivo tar> [archivos o directorios que agregar al archivo]

Opciones básicas:

Uso básico

Cree un archivo de almacenamiento archive.tara partir del archivo README.txty directorio src:

$ tar  -cvf  archive.tar  README.txt  src

Extraiga el contenido del archive.tardirectorio actual:

$ tar  -xvf  archivo.tar

Cree un archivo comprimido archive.tar.gza partir del archivo README.txty directorio srcy comprímalo con gzip  :

$ tar  -cavf  archive.tar.gz  README.txt  src

Extraiga el contenido del archive.tar.gzdirectorio actual:

$ tar  -xvf  archivo.tar.gz

lona

Un tarpipe es el método para crear un archivo en el archivo de salida estándar de la utilidad tar y canalizarlo a otro proceso tar en su entrada estándar , trabajando en otro directorio, donde se descomprime. Este proceso copia un árbol de directorio fuente completo, incluidos todos los archivos especiales, por ejemplo:

$ alquitrán  cf  -  srcdir | tar x -C directorio de destino     

Distribución de software

El formato tar sigue utilizándose ampliamente para la distribución de software de código abierto . *Las distribuciones NIX lo utilizan en varios mecanismos de distribución de paquetes fuente y binarios, y la mayoría del código fuente del software está disponible en archivos tar comprimidos. [ cita necesaria ]

Limitaciones

El formato tar original se creó en los primeros días de Unix y, a pesar de su uso generalizado actual, muchas de sus características de diseño se consideran anticuadas. [21]

Muchas implementaciones tar antiguas no registran ni restauran atributos extendidos (xattrs) ni listas de control de acceso (ACL). En 2001, Star introdujo soporte para ACL y atributos extendidos, a través de sus propias etiquetas para POSIX.1-2001 pax. bsdtar utiliza las extensiones en estrella para admitir ACL. [22] Las versiones más recientes de GNU tar admiten atributos extendidos de Linux, reimplementando extensiones en estrella. [23] En el manual de tipo de archivo para BSD tar se revisan varias extensiones, tar(5). [22]

Se han creado otros formatos para abordar las deficiencias del tar.

bomba de alquitrán

Un tarbomb , en la jerga hacker , es un archivo tar que contiene muchos archivos que se extraen en el directorio de trabajo. Un archivo tar de este tipo puede crear problemas al sobrescribir archivos con el mismo nombre en el directorio de trabajo o mezclar archivos de un proyecto con otro. En el mejor de los casos, supone una molestia para el usuario, que se ve obligado a identificar y eliminar una serie de archivos intercalados con el resto del contenido del directorio. Tal comportamiento se considera mala etiqueta por parte del creador del archivo.

Un problema relacionado es el uso de rutas absolutas o referencias a directorios principales al crear archivos tar. Los archivos extraídos de dichos archivos a menudo se crean en ubicaciones inusuales fuera del directorio de trabajo y, como una bomba tar, tienen el potencial de sobrescribir archivos existentes. Sin embargo, las versiones modernas de FreeBSD y GNU tar no crean ni extraen rutas absolutas ni referencias a directorios principales de forma predeterminada, a menos que esté permitido explícitamente con la bandera -Po la opción --absolute-names. El programa bsdtar, que también está disponible en muchos sistemas operativos y es la utilidad tar predeterminada en Mac OS X v10.6, tampoco sigue referencias de directorio principal ni enlaces simbólicos. [24] [ verificación fallida ]

Si un usuario solo tiene disponible un tar muy antiguo, que no cuenta con esas medidas de seguridad, estos problemas se pueden mitigar examinando primero un archivo tar usando el comando tar tf archive.tar, que enumera el contenido y permite excluir archivos problemáticos posteriormente. Estos comandos no extraen ningún archivo, pero muestran los nombres de todos los archivos en el archivo. Si alguno resulta problemático, el usuario puede crear un nuevo directorio vacío y extraer el archivo en él, o evitar el archivo tar por completo. La mayoría de las herramientas gráficas pueden mostrar el contenido del archivo antes de extraerlo. Vim puede abrir archivos tar y mostrar su contenido. GNU Emacs también puede abrir un archivo tar y mostrar su contenido en un búfer dirigido .

Acceso aleatorio

El formato tar se diseñó sin un índice centralizado o una tabla de contenido para los archivos y sus propiedades para su transmisión a dispositivos de respaldo en cinta. El archivo debe leerse secuencialmente para enumerar o extraer archivos. Para archivos tar de gran tamaño, esto causa una pérdida de rendimiento, lo que hace que los archivos tar no sean adecuados para situaciones que a menudo requieren acceso aleatorio a archivos individuales.

Con un archivo tar bien formado almacenado en un medio buscable (es decir, que permite lecturas aleatorias eficientes), el tarprograma aún puede buscar un archivo con relativa rapidez (en tiempo lineal relativo al recuento de archivos) omitiendo lecturas de archivos según el campo "tamaño". en los encabezados de los archivos. Esta es la base de la opción -nen GNU tar. Cuando un archivo tar se comprime completo, el formato de compresión, que normalmente no se puede buscar, impide que se realice esta optimización. [25] Varios compresores "indexados", que conocen el formato tar, pueden restaurar esta característica para archivos comprimidos. [26] Para mantener la capacidad de búsqueda, los archivos tar también deben concatenarse correctamente, eliminando el bloque de ceros al final de cada archivo. [27]

Duplicados

Otro problema con el formato tar es que permite que varios archivos (posiblemente diferentes) en el archivo tengan rutas y nombres de archivo idénticos. Al extraer dicho archivo, normalmente la última versión de un archivo sobrescribe la anterior.

Esto puede crear un tarbomb no explícito (no obvio), que técnicamente no contiene archivos con rutas absolutas o directorios principales de referencia, pero aún provoca la sobrescritura de archivos fuera del directorio actual (por ejemplo, el archivo puede contener dos archivos con la misma ruta y nombre de archivo, el primero de los cuales es un enlace simbólico a alguna ubicación fuera del directorio actual, y el segundo es un archivo normal; luego, extraer dicho archivo en algunas implementaciones tar puede provocar que se escriba en la ubicación señalada por el enlace simbólico).

Implementaciones clave

Históricamente, muchos sistemas han implementado tar, y muchos archivadores de archivos generales tienen al menos soporte parcial para tar (a menudo usando una de las implementaciones siguientes). La historia del alquitrán es una historia de incompatibilidades, conocidas como las "guerras del alquitrán". La mayoría de las implementaciones tar también pueden leer y crear cpio y pax (este último en realidad es un formato tar con extensiones POSIX -2001).

Implementaciones clave en orden de origen:

Además, la mayoría de las implementaciones de pax y cpio pueden leer y crear múltiples tipos de archivos tar.

Sufijos para archivos comprimidos

Los archivos tar suelen tener el sufijo .tar (por ejemplo, somefile.tar ).

Un archivo tar contiene flujos de bytes sin comprimir de los archivos que contiene. Para lograr la compresión de archivos, hay disponibles una variedad de programas de compresión , como gzip , bzip2 , xz , lzip , lzma , zstd o compress , que comprimen todo el archivo tar. Normalmente, la forma comprimida del archivo recibe un nombre de archivo agregando el sufijo del compresor específico del formato al nombre del archivo. Por ejemplo, un archivo tar archive.tar se denomina archive.tar.gz cuando se comprime con gzip.

Los programas tar populares, como las versiones BSD y GNU de tar, admiten las opciones de línea de comando Z (comprimir), z (gzip) y j (bzip2) para comprimir o descomprimir el archivo al crearlo o descomprimirlo. Las adiciones relativamente recientes incluyen --lzma ( LZMA ), --lzop ( lzop ), --xz o J ( xz ), --lzip (lzip) y --zstd . [33] La descompresión de estos formatos se maneja automáticamente si se usan extensiones de nombre de archivo compatibles, y la compresión se maneja automáticamente usando las mismas extensiones de nombre de archivo si la opción --auto-compress (forma corta -a ) se pasa a una versión aplicable de GNU alquitrán. [16] BSD tar detecta una gama aún más amplia de compresores ( lrzip , lz4 ), utilizando no el nombre del archivo sino los datos que contiene. [34] Los formatos no reconocidos deben comprimirse o descomprimirse manualmente mediante tuberías.

Las limitaciones de nombre de archivos de MS-DOS 8.3 dieron como resultado convenciones adicionales para nombrar archivos tar comprimidos. Sin embargo, esta práctica ha disminuido y ahora FAT ofrece nombres de archivos largos .

El archivo tar se utiliza a menudo junto con un método de compresión, como gzip , para crear un archivo comprimido. Como se muestra, la combinación de archivos en el archivo se comprime como una unidad.

Ver también

Referencias

  1. ^ "libarchivo".
  2. ^ Sergey Poznyakoff (18 de julio de 2023). "tar-1.35 lanzado [estable]" . Consultado el 26 de julio de 2023 .
  3. ^ John Gilmore (10 de diciembre de 1986). "v07i088: programa TAR de dominio público". Grupo de noticias : mod.sources. Archivado desde el original el 7 de febrero de 2022 . Consultado el 7 de febrero de 2022 .
  4. ^ "posixtar".
  5. ^ "estrella".
  6. ^ Gilmore, Juan; Fenlason, Jay (4 de febrero de 2019). "Formato tar básico". gnu.org . y otros. Fundación de Software Libre . Consultado el 17 de abril de 2019 .
  7. ^ ab "página del manual tar (5)". FreeBSD.org . FreeBSD. 20 de mayo de 2004 . Consultado el 2 de mayo de 2017 .
  8. ^ IEEE Std 1003.1-1988, Estándar IEEE para tecnología de la información: interfaz de sistema operativo portátil (POSIX)
  9. ^ IEEE Std 1003.1-2001, Estándar IEEE para tecnología de la información: interfaz de sistema operativo portátil (POSIX)
  10. ^ IBM . "Qshell de programación de IBM System i versión 7.2" (PDF) . IBM . Consultado el 5 de septiembre de 2020 .
  11. ^ "Anuncio de Windows 10 Insider Preview Build 17063 para PC". Blog de experiencia de Windows . 2017-12-19 . Consultado el 2 de julio de 2018 .
  12. ^ "¡Tar y Curl llegan a Windows!". 2019-03-22.
  13. ^ "Bloqueo". ftp.gnu.org . Consultado el 26 de agosto de 2020 .
  14. ^ Hoo, James. "Abrir/extraer archivo TAR con software gratuito en Windows/Mac/Linux". e7z Org . Archivado desde el original el 6 de febrero de 2015 . Consultado el 3 de septiembre de 2019 .
  15. ^ Kientzle, Tim (1995). Formatos de archivos de Internet. Libros de los grupos Coriolis. pag. 196.ISBN _ 978-1-883577-56-8. Consultado el 10 de noviembre de 2022 .
  16. ^ abc "GNU tar 1.32: 8.1 usando menos espacio mediante compresión". GNU . 2019-02-23 . Consultado el 11 de agosto de 2019 .
  17. ^ NOTICIAS, git.savannah.gnu.org: busque "Se agregó soporte para formatos de archivo POSIX.1-2001 y ustar".
  18. ^ "GNU tar 1.34: 8. Control del formato de archivo". GNU . Consultado el 11 de julio de 2022 .
  19. ^ pax  - Referencia de Shell y utilidades, la especificación única de UNIX , versión 4 de The Open Group
  20. ^ "# 2116 Tars con encabezados de pax no analizados". 7-Zip / Errores | FuenteForge .
  21. ^ Formato propuesto para reemplazar tar, por los desarrolladores de la utilidad Duplicity.
  22. ^ ab tar(5) -  Manual de formatos de archivo FreeBSD
  23. ^ "Atributos extendidos: lo bueno, lo no tan bueno, lo malo". Les bons comptes . 15 de julio de 2014. Archivado desde el original el 14 de diciembre de 2014 . Consultado el 3 de septiembre de 2019 . Los atributos extendidos pueden ser muy valiosos para almacenar metadatos de archivos (por ejemplo, autor="John Smith", sujeto="paisaje rural"), en muchos casos en los que no desea o no puede almacenar estos datos en las propiedades internas del archivo.
  24. ^ Página de manual de "bsdtar".
  25. ^ BillThor (28 de julio de 2017). "¿Qué hace que un archivo tar sea buscable?". Superusuario . Consultado el 15 de diciembre de 2023 .
  26. ^ Vasilevsky, Dave (6 de diciembre de 2023). "pixz".
  27. ^ "GNU tar 1.35: 4.2.4 Combinando archivos con --concatenate". www.gnu.org .
  28. ^ Chelín, Jörg. "Inicie un archivador tar muy rápido y compatible con Posix 1003.1 para UNIX". Archivado desde el original el 9 de julio de 2023 . Consultado el 2 de septiembre de 2023 .
  29. ^ Thomas E. Dickey (4 de enero de 2015). "TAR versus portabilidad: Schily tar" . Consultado el 23 de octubre de 2021 .
  30. ^ Jörg Schilling (4 de septiembre de 2021). "star - archivador de cintas estándar único" . Consultado el 23 de octubre de 2021 .
  31. ^ módulo de archivo tar, python.org
  32. ^ archivo tar.py, github.com
  33. ^ Poznyakoff, Sergey (2 de enero de 2019). "tar-1.31 lanzado [estable]". Listas de correo de GNU . Consultado el 6 de agosto de 2019 .
  34. ^ tar(1)  –  Manual de comandos generales de FreeBSD

enlaces externos