Articulo de referencia

comprimir (software)

compress es un comando de shell para comprimir datos basado en el algoritmo LZW . [ 1 ] es un comando de shell complementario que restaura archivos a su estado original (tanto c...

compresses un comando de shell para comprimir datos basado en el algoritmo LZW . [ 1 ] es un comando de shell complementario que restaura archivos a su estado original (tanto contenido como metadatos ) a partir de un archivo creado con .uncompresscompress

Aunque en su momento fue popular, compressha caído en desuso porque utiliza el algoritmo patentado LZW. Su uso ha sido reemplazado por comandos como gzipy bzip2que utilizan otros algoritmos y proporcionan una mejor compresión de datos. En comparación con gzipen su configuración más rápida, compresses 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 gzipen su configuración más lenta. [ 3 ]

compressy uncompresshan mantenido presencia en sistemas Unix y BSD y han sido portados a IBM i . [ 4 ]

compressse estandarizó en la especificación X/Open CAE en 1994, [ 5 ] y posteriormente en las especificaciones base de The Open Group, números 6 y 7. [ 6 ] Linux Standard Base no lo requiere compress. [ 7 ]

compressA menudo se excluye de la instalación predeterminada de una distribución de Linux , pero se puede instalar desde un paquete separado. [ 8 ]compress está disponible para FreeBSD, OpenBSD, MINIX, Solaris y AIX.

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

Usar

Los archivos comprimidos compresssuelen tener la extensión ".Z" y, por lo tanto, a veces se les llama archivos .Z. La extensión deriva del programa pack anterior , que utilizaba la extensión ".z".

La mayoría de tarlas implementaciones admiten la compresión mediante el paso de datos a través de la tubería compresscuando se les proporciona la -Zopción de línea de comandos.

gunzipPuede descomprimir archivos .Z. [ 9 ]

Algoritmo

El algoritmo LZW utilizado compressfue patentado por Sperry Research Center en 1983. Terry Welch publicó un artículo en IEEE sobre el algoritmo en 1984, [ 10 ] pero no mencionó que había solicitado una patente sobre el mismo. Spencer Thomas de la Universidad de Utah tomó este artículo y lo implementó compressen 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 posteriormente reclamó regalías por las implementaciones de GIF. Joseph M. Orost lideró el equipo y trabajó con Thomas et al. para crear la versión final (4.0) compressy la publicó como software libre para el grupo USENET net.sources en 1985. La patente estadounidense 4,558,302 fue otorgada en 1985 , lo que hizo compressque no se pudiera usar sin pagar regalías a Sperry Research (que posteriormente se fusionó con Unisys).

La patente estadounidense LZW expiró en 2003, por lo que ahora es de dominio público en Estados Unidos. Actualmente, todas las patentes LZW a nivel mundial han expirado (véase Graphics Interchange Format#Unisys y la aplicación de la patente LZW ).

A partir de POSIX.1-2024,compress admite el algoritmo DEFLATE utilizado en gzip . [ 11 ]

Formato de archivo

La salida comprimida 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 al número de bits por código multiplicado por 8 y rellenado con ceros a la derecha. El último grupo está alineado a octetos de 8 bits y rellenado con ceros. Puede encontrar más información en un problema del repositorio de GitHub de ncompress . [ 12 ]

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 para mostrar que contienen 90 bits, 50 bits y 143 bits de datos.
  • El primer grupo constará de 90 bits de datos + 54 bits cero de relleno para alinearlos a 72 bits (9 bits × 8).
  • El segundo grupo constará de 50 bits de datos + 30 bits cero de relleno para alinearlos a 80 bits (10 bits × 8).
  • El tercer grupo constará de 143 bits de datos + 1 bit cero de relleno para alinearlo a 8 bits (ya que este es el último grupo en la salida).

La existencia de bits de relleno es en realidad un error, ya que LZW no requiere alineación. Este error existió durante más de 35 años y estaba presente en las versiones originales de UNIX compress , ncompress , gzip y en la versión para Windows. Todos los archivos application/x-compress se crearon aprovechando este error.

Algunas compressimplementaciones escriben bits aleatorios de un búfer no inicializado en el relleno. No hay garantía de que el relleno sea cero. El descompresor debe ignorar los valores del relleno por motivos de compatibilidad.

Véase también

Referencias

  1. Frysinger, Mike. "ncorpress: 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 mayor tasa de compresión, 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. "Prueba comparativa de compresión de texto grande" . mattmahoney.net . compress 4.3d....
  4. IBM . "IBM System i Versión 7.2 Programación Qshell" (PDF) . IBM . Consultado el 05-09-2020 .
  5. Especificación de comandos y utilidades de X/Open CAE, número 4, versión 2 (pdf), 1994, opengroup.org
  6. Shell and Utilities Reference, The Single UNIX Specification , Versión 3 de The Open Groupcompress  
  7. Capítulo 17. Comandos y utilidades en la especificación base estándar de Linux 5.0.0, linuxfoundation.org
  8. ncompress , pkgs.org
  9. "GNU Gzip" . El sistema operativo GNU y el movimiento del software libre . 5 de febrero de 2023. Consultado el 3 de abril de 2024. gunzip actualmente puede descomprimir archivos creados con gzip, zip, compress o pack. La detección del formato de entrada es automática.
  10. 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 . 
  11. "comprimir" . opengroup . Consultado el 2 de noviembre de 2024 .
  12. "La compresión con 9 bits no funciona · Problema n.° 5 · vapier/ncompress" . GitHub . Consultado el 17 de septiembre de 2024 .
  • compress: comprimir datos Referencia de Shell y utilidades, Especificación única de UNIX , Versión 5 de The Open Group   
  • compress(1) Manual del programador de Unix, versión 8 
  • compress(1) Manual de comandos generales de FreeBSD 
  • compress(1) Manual de comandos generales de OpenBSD 
  • compress(1) Manual de referencia de comandos de usuario de Solaris 11.4 
  • ncompress : implementación de compresión/descompresión de dominio público para sistemas POSIX.
  • comprimir - compresión Unix original (en un archivo comprimido)
  • compress - ejecutable comprimido original de Unix (gzip)
  • Código fuente para compress v4.0 (archivos sh comprimidos con gzip)
  • Archivo ZIP que contiene una versión para Windows de la utilidad compress.
  • Código fuente de la versión actual de fcompress.c de compress
  • Alineación de grupos de bits - Explicación de la alineación de grupos de bits.
  • lzws - Nueva biblioteca y CLI, implementada sin código heredado.
  • ruby-lzws - Enlaces de Ruby con soporte para transmisión de datos.