stringtranslate.com

comprimir (software)

compress es un programa de compresión de shell de Unix basado en el algoritmo de compresión LZW . [1] En comparación con la configuración más rápida de gzip , compress es ligeramente más lento en la compresión, ligeramente más rápido en la descompresión y tiene una relación de compresión significativamente menor . [2] Se utilizan 1,8 MiB de memoria para comprimir los datos del Premio Hutter , un poco más que la configuración más lenta de gzip. [3]

La utilidad de descompresión restaurará los archivos a su estado original después de haberlos comprimido con la utilidad de compresión . Si no se especifica ningún archivo, la entrada estándar se descomprimirá en la salida estándar.

En la próxima revisión de las especificaciones POSIX y Single Unix , está previsto que el algoritmo DEFLATE utilizado en formato gzip sea compatible con esas utilidades. [4]

Descripción

Los archivos comprimidos por compress suelen tener la extensión ".Z" (modelada a partir del programa pack anterior que utilizaba la extensión ".z"). La mayoría de los programas tar canalizarán sus datos a través de compress cuando se les dé la opción de línea de comandos " -Z". (El programa tar en sí no comprime; simplemente almacena múltiples archivos dentro de un archivo de cinta).

Los archivos se pueden devolver a su estado original mediante la función descomprimir . La acción habitual de descomprimir no es simplemente crear una copia sin comprimir del archivo, sino también restaurar la marca de tiempo y otros atributos del archivo comprimido.

Para los archivos producidos por compresión en otros sistemas, la descompresión admite una compresión de 9 a 16 bits.

Historia

El algoritmo LZW utilizado en compress fue patentado por Sperry Research Center en 1983. Terry Welch publicó un artículo IEEE sobre el algoritmo en 1984, [5] pero no mencionó que había solicitado una patente para el algoritmo. Spencer Thomas de la Universidad de Utah tomó este artículo e implementó compress en 1984, sin darse cuenta de que había una patente pendiente sobre el algoritmo LZW. El formato de imagen GIF también incorporó la compresión LZW de esta manera, y Unisys luego reclamó regalías por las implementaciones de GIF. Joseph M. Orost dirigió el equipo y trabajó con Thomas et al. para crear la versión "final" (4.0) de compress y la publicó como software libre para el grupo USENET "net.sources" en 1985. La patente estadounidense 4.558.302 se concedió en 1985, y es por eso que compress no se podía usar sin pagar regalías a Sperry Research, que finalmente se fusionó con Unisys.

compress ha caído en desgracia en grupos particulares de usuarios debido a que hace uso del algoritmo LZW, que estaba cubierto por una patente de Unisys – debido a esto, gzip y bzip2 aumentaron en popularidad en sistemas operativos basados ​​en Linux debido a sus algoritmos alternativos, junto con una mejor compresión de archivos. compress , sin embargo, ha mantenido una presencia en sistemas Unix y BSD y los comandos compress y uncompress también han sido portados al sistema operativo IBM i . [6]

La patente estadounidense LZW expiró en 2003, por lo que ahora es de dominio público en los Estados Unidos. Todas las patentes de LZW en todo el mundo también han expirado (consulte Formato de intercambio de gráficos#Unisys y aplicación de patentes de LZW ).

En la próxima revisión de las especificaciones POSIX y Single Unix , está previsto que el algoritmo DEFLATE utilizado en formato gzip sea compatible con esas utilidades.

Formato de salida especial

El binario de salida consta de grupos de bits. Cada grupo de bits consta de códigos con una cantidad fija de bits (9-16). Cada grupo, excepto el último, está alineado con la cantidad de bits por código multiplicado por 8 y se rellena con ceros a la derecha. El último grupo está alineado con octetos de 8 bits y se rellena con ceros. Se puede encontrar más información en un problema en el repositorio de GitHub de ncompress . [7]

Ejemplo:

Supongamos que la salida tiene diez códigos de 9 bits, cinco códigos de 10 bits y trece códigos de 11 bits. Hay tres grupos de salida que contienen 90 bits, 50 bits y 143 bits de datos.
  • El primer grupo será de 90 bits de datos + 54 bits cero de relleno para alinearse a 72 bits (9 bits × 8).
  • El segundo grupo será de 50 bits de datos + 30 bits cero de relleno para alinearse a 80 bits (10 bits × 8).
  • El tercer grupo tendrá 143 bits de datos + 1 bit cero de relleno para alinearse a 8 bits (ya que este es el último grupo en la salida).

En realidad , es un error. LZW no requiere ninguna alineación. Este error existió durante más de 35 años y se encontraba en el compress original de UNIX , ncompress , gzip y en el port de Windows. Todos los archivos de application/x-compress se crearon utilizando este error.

Algunas implementaciones de compresión escriben bits aleatorios de un búfer no inicializado en los rellenos. No hay garantía de que los rellenos sean ceros. El descompresor debe ignorar los valores en los rellenos por cuestiones de compatibilidad.

Estandarización y disponibilidad

La compresión se estandarizó en la especificación X/Open CAE en 1994, [8] y luego en las especificaciones base de The Open Group, números 6 y 7. [9] La base estándar de Linux no requiere compresión. [10]

Compress a menudo no se instala de forma predeterminada en las distribuciones de Linux, pero se puede instalar desde un paquete adicional. [11] Compress está disponible para FreeBSD, OpenBSD, MINIX, Solaris y AIX.

La compresión está permitida para el protocolo punto a punto en RFC  1977 y para HTTP/1.1 en RFC  9110, aunque rara vez se utiliza en implementaciones modernas ya que está disponible la mejor opción deflate/gzip.

La utilidad gunzip puede descomprimir archivos .Z. [12]

Véase también

Referencias

  1. ^ Frysinger, Mike. "ncompress: un proyecto de dominio público" . Consultado el 30 de julio de 2014. Compress es un compresor de archivos LZW rápido y sencillo. Compress no tiene la tasa de compresión más alta, pero es uno de los programas más rápidos para comprimir datos. Compress es el estándar de facto en la comunidad UNIX para comprimir archivos.
  2. ^ Gommans, Luc. "Compresión: ¿Cuál es la diferencia entre gzip y compress?". Unix & Linux Stack Exchange .
  3. ^ "Punto de referencia de compresión de texto grande". mattmahoney.net . compress 4.3d....
  4. ^ "0001041: Fomentar que las implementaciones incluyan mejores sumas de comprobación de integridad, utilidades de compresión y descompresión, si es posible". Rastreador de errores de Austin Group . Consultado el 23 de noviembre de 2017 .
  5. ^ Welch, Terry A. (1984). "Una técnica para la compresión de datos de alto rendimiento" (PDF) . IEEE Computer . 17 (6): 8–19. doi :10.1109/MC.1984.1659158. S2CID  2055321.
  6. ^ IBM . "Programación Qshell para IBM System i versión 7.2" (PDF) . IBM . Consultado el 5 de septiembre de 2020 .
  7. ^ "La compresión con 9 bits no funciona · Problema n.° 5 · vapier/ncompress". GitHub . Consultado el 17 de septiembre de 2024 .
  8. ^ X/Open CAE Specification Commands and Utilities Issue 4, Versión 2 (pdf), 1994, opengroup.org
  9. ^ compress  – Referencia de shell y utilidades, La especificación única de UNIX , versión 3 de The Open Group
  10. ^ Capítulo 17. Comandos y utilidades en Linux Standard Base Core Specification 5.0.0, linuxfoundation.org
  11. ^ ncompress, pkgs.org
  12. ^ "GNU Gzip". El sistema operativo GNU y el movimiento del software libre . 2023-02-05 . Consultado el 2024-04-03 . Actualmente, gunzip puede descomprimir archivos creados con gzip, zip, compress o pack. La detección del formato de entrada es automática.

Enlaces externos