Article de reference

compresser (logiciel)

compress est un programme de compression shell Unix basé sur l' algorithme de compression LZW . Comparé au paramètre le plus rapide de gzip, compress est légèrement plus lent à ...

compress est un programme de compression shell Unix basé sur l' algorithme de compression LZW . Comparé au paramètre le plus rapide de gzip, compress est légèrement plus lent à la compression, légèrement plus rapide à la décompression et a un taux de compression nettement inférieur . 1,8 Mio de mémoire sont utilisés pour compresser les données du prix Hutter , soit un peu plus que le paramètre le plus lent de gzip.

L' utilitaire de décompression restaure les fichiers à leur état d'origine après les avoir compressés à l'aide de l' utilitaire de compression . Si aucun fichier n'est spécifié, l' entrée standard sera décompressée vers la sortie standard.

Description

Les fichiers compressés par compress reçoivent généralement l' extension « .Z » (sur le modèle du programme pack précédent qui utilisait l' extension « .z »). La plupart des programmes tar transmettront leurs données via compress lorsqu'ils auront l'option de ligne de commande « -Z». (Le programme tar en lui-même ne compresse pas ; il stocke simplement plusieurs fichiers dans une archive de bande.)

Les fichiers peuvent être ramenés à leur état d'origine à l'aide de la commande uncompress . L'action habituelle de la commande uncompress ne consiste pas simplement à créer une copie non compressée du fichier, mais également à restaurer l'horodatage et d'autres attributs du fichier compressé.

Pour les fichiers produits par compression sur d'autres systèmes, uncompress prend en charge la compression de 9 à 16 bits.

Histoire

L'algorithme LZW utilisé dans compress a été breveté par le Sperry Research Center en 1983. Terry Welch a publié un article IEEE sur l'algorithme en 1984, mais a oublié de noter qu'il avait déposé une demande de brevet sur l'algorithme. Spencer Thomas de l' Université de l'Utah a repris cet article et a implémenté compress en 1984, sans se rendre compte qu'un brevet était en instance sur l'algorithme LZW. Le format d'image GIF incorporait également la compression LZW de cette manière, et Unisys a ensuite réclamé des royalties sur les implémentations de GIF. Joseph M. Orost a dirigé l'équipe et a travaillé avec Thomas et al. pour créer la version « finale » (4.0) de compress et l'a publiée en tant que logiciel libre pour le groupe USENET « net.sources » en 1985. Le brevet américain 4 558 302 a été accordé en 1985, et c'est pourquoi compress ne pouvait pas être utilisé sans payer de royalties à Sperry Research, qui a finalement fusionné avec Unisys.

compress est tombé en disgrâce dans certains groupes d'utilisateurs car il utilise l'algorithme LZW, qui était couvert par un brevet Unisys - à cause de cela, gzip et bzip2 ont gagné en popularité sur les systèmes d'exploitation basés sur Linux en raison de leurs algorithmes alternatifs, ainsi que d'une meilleure compression de fichiers. compress a cependant maintenu une présence sur les systèmes Unix et BSD et les commandes compress et uncompress ont également été portées sur le système d'exploitation IBM i .

Le brevet américain LZW a expiré en 2003, il est donc désormais dans le domaine public aux États-Unis. Tous les brevets sur le LZW dans le monde ont également expiré (voir Graphics Interchange Format#Unisys et Application des brevets LZW ).

À partir de POSIX.1-2024, compress prend en charge l' algorithme DEFLATE utilisé dans gzip .

Format de sortie spécial

Le binaire de sortie est constitué de groupes de bits. Chaque groupe de bits est constitué de codes avec une quantité fixe de bits (9 à 16). Chaque groupe, à l'exception du dernier groupe, est aligné sur le nombre de bits par code multiplié par 8 et complété à droite par des zéros. Le dernier groupe est aligné sur des octets de 8 bits et complété par des zéros. Vous trouverez plus d'informations dans un problème sur le référentiel GitHub ncompress .

Exemple:

Supposons que la sortie comporte dix codes de 9 bits, cinq codes de 10 bits et treize codes de 11 bits. Il y a trois groupes à générer contenant 90 bits, 50 bits et 143 bits de données.
  • Le premier groupe sera composé de 90 bits de données + 54 bits zéro de remplissage afin d'être aligné sur 72 bits (9 bits × 8).
  • Le deuxième groupe sera composé de 50 bits de données + 30 bits zéro de remplissage afin d'être aligné sur 80 bits (10 bits × 8).
  • Le troisième groupe sera composé de 143 bits de données + 1 bit zéro de remplissage afin d'être aligné sur 8 bits (puisqu'il s'agit du dernier groupe de la sortie).

Il fait d'un bug. LZW ne nécessite aucun alignement. Ce bug existe depuis plus de 35 ans et se trouvait dans les versions originales de compress, ncompress, gzip et Windows d'UNIX Tous les fichiers application / x -compress ont été créés à l'aide de ce bug.

Certaines implémentations de compression écrivent des bits aléatoires à partir d'un tampon non initialisé dans des remplissages. Il n'y a aucune garantie que les remplissages soient des zéros. Le décompresseur doit ignorer les valeurs dans les remplissages pour des raisons de compatibilité.

Standardisation et disponibilité

compress a été normalisé dans la spécification X/Open CAE en 1994, et plus loin dans les spécifications de base de l'Open Group, numéros 6 et 7. Linux Standard Base ne nécessite pas de compression.

compress n'est souvent pas installé par défaut dans les distributions Linux, mais peut être installé à partir d'un package supplémentaire. compress est disponible pour FreeBSD, OpenBSD, MINIX, Solaris et AIX.

La compression est autorisée pour le protocole Point-to-Point dans la RFC 1977 et pour HTTP/1.1 dans la RFC 9110, bien qu'elle soit rarement utilisée dans les déploiements modernes car le meilleur deflate/gzip est disponible.

L'utilitaire gunzip est capable de décompresser les fichiers .Z.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index