Scroll to navigation

XZ(1) Utilitaires XZ XZ(1)

NOM

xz, unxz, xzcat, lzma, unlzma, lzcat - Compresser ou décompresser des fichiers .xz et .lzma

SYNOPSIS

xz [option...] [fichier...]

ALIAS DES COMMANDES

unxz est équivalent à xz --decompress.
xzcat est équivalent à xz --decompress --stdout
lzma est équivalent à xz --format=lzma
unlzma est équivalent à xz --format=lzma --decompress
lzcat est équivalent à xz --format=lzma --decompress -- stdout

Lors de l'écriture de scripts qui nécessitent de décompresser des fichiers, il est recommandé de toujours utiliser la commande xz avec les arguments appropriés (xz -d ou xz -dc) au lieu des commandes unxz et xzcat.

DESCRIPTION

xz is a general-purpose data compression tool with command line syntax similar to gzip(1) and bzip2(1). The native file format is the .xz format, but the legacy .lzma format used by LZMA Utils and raw compressed streams with no container format headers are also supported. In addition, decompression of the .lz format used by lzip is supported.

xz compresse ou décompresse chaque fichier en fonction du mode d'opération choisi. Si aucun fichier n'est donné ou fichier est -, xz lit depuis l'entrée standard et écrit les données traitées sur la sortie standard. xz refusera (affichera une erreur et ignorera le fichier) d'écrire les données compressées sur la sortie standard si c'est un terminal. De même, xz refusera de lire des données compressées depuis l'entrée standard si c'est un terminal.

A moins que --sdout ne soit indiqué, les fichiers autres que - sont écrits dans un nouveau fichier dont le nom est dérivé du nom de fichier source :

  • Lors de la compression, le suffixe du format de fichier cible (.xz ou .lzma) est ajouté au nom de fichier source pour obtenir le nom de fichier cible.
  • When decompressing, the .xz, .lzma, or .lz suffix is removed from the filename to get the target filename. xz also recognizes the suffixes .txz and .tlz, and replaces them with the .tar suffix.

Si le fichier cible existe déjà, une erreur est affichée et le fichier est ignoré.

Sauf s'il écrit dans la sortie standard, xz affichera un avertissement et ignorera le fichier dans les cas suivants :

  • fichier n'est pas un fichier normal. Les liens symboliques ne sont pas suivis et donc ne sont pas considérés comme des fichiers normaux.
  • fichier a plusieurs liens physiques.
  • fichier a un setuid, setgid ou sticky bit positionné.
  • Le mode d'opération est défini pour compresser et le fichier a déjà un suffixe du format de fichier cible (.xz ou .txz lors d'une compression en format .xz, et .lzma ou .tlz lors d'une compression en format .lzma).
  • The operation mode is set to decompress and the file doesn't have a suffix of any of the supported file formats (.xz, .txz, .lzma, .tlz, or .lz).

Après la compression ou la décompression réussie du fichier, xz copie les permissions du propriétaire, du groupe, la date d'accès, et les modifications d'heure depuis le fichier source du fichier cible. Si la copie du groupe échoue, les permissions sont modifiées pour que le fichier cible ne soit pas accessible aux utilisateurs qui n'ont pas les droits d'accès au fichier source. xz ne prend actuellement pas en charge la copie d'autres métadonnées telles que les listes de contrôle d'accès ou les attributs étendus.

Once the target file has been successfully closed, the source file is removed unless --keep was specified. The source file is never removed if the output is written to standard output or if an error occurs.

Envoyer SIGINFO ou SIGURSR1 au processus xz, lui fait afficher l'information de progression sur l'erreur standard. Cela a un intérêt limité car lorsque l'erreur standard est un terminal, utiliser --verbose affichera automatiquement un indicateur de progression du processus.

Utilisation de la mémoire

L'utilisation de la mémoire par xz varie de quelques centaines de kilo-octets à plusieurs gigaoctects en fonction des paramètres de compression. Les réglages utilisés lors de la compression d'un fichier déterminent les besoins en mémoire pour la décompression. Habituellement la décompression nécessite 5 à 20 de la quantité de mémoire utilisée pour la compression du fichier. Par exemple, décompresser un fichier créé avec xz-9 recquiert habituellement 65 Mio de mémoire. Bien qu'il soit possible d'avoir des fichiers .xz nécessitant plusieurs gigaoctets de mémoire pour être décompressés.

Especially users of older systems may find the possibility of very large memory usage annoying. To prevent uncomfortable surprises, xz has a built-in memory usage limiter, which is disabled by default. While some operating systems provide ways to limit the memory usage of processes, relying on it wasn't deemed to be flexible enough (for example, using ulimit(1) to limit virtual memory tends to cripple mmap(2)).

The memory usage limiter can be enabled with the command line option --memlimit=limit. Often it is more convenient to enable the limiter by default by setting the environment variable XZ_DEFAULTS, for example, XZ_DEFAULTS=--memlimit=150MiB. It is possible to set the limits separately for compression and decompression by using --memlimit-compress=limit and --memlimit-decompress=limit. Using these two options outside XZ_DEFAULTS is rarely useful because a single run of xz cannot do both compression and decompression and --memlimit=limit (or -M limit) is shorter to type on the command line.

If the specified memory usage limit is exceeded when decompressing, xz will display an error and decompressing the file will fail. If the limit is exceeded when compressing, xz will try to scale the settings down so that the limit is no longer exceeded (except when using --format=raw or --no-adjust). This way the operation won't fail unless the limit is very small. The scaling of the settings is done in steps that don't match the compression level presets, for example, if the limit is only slightly less than the amount required for xz -9, the settings will be scaled down only a little, not all the way down to xz -8.

Concaténation et remplissage avec des fichiers .xz

Il est possible de concaténer les fichiers .xz tels quel. xz décompressera de tels fichiers comme s'ils étaient un unique fichier .xz.

It is possible to insert padding between the concatenated parts or after the last part. The padding must consist of null bytes and the size of the padding must be a multiple of four bytes. This can be useful, for example, if the .xz file is stored on a medium that measures file sizes in 512-byte blocks.

La concaténation et le remplissage ne sont pas autorisés avec les fichiers .lzma ou les flux bruts.

OPTIONS

Suffixes entiers et valeurs spéciales.

Dans la plupart des endroits où un argument entier est attendu, un suffixe optionel permet d'indiquer facilement les grands entiers. Il ne doit pas y avoir d'espace entre l'entier et le suffixe.

Multiplier l'entier par 1024 (2^10). Ki, k, kB, K et KB sont acceptés comme synonymes de KiB.
Multiplier l'entier par 1 048 576 (2^20). Mi, m, M et MB sont acceptés comme synonymes de MiB.
Multiplier l'entier par 1 073 741 824 (2^30). Gi, g, G et GB sont acceptés comme synonymes de GiB.

La valeur spéciale max peut être utilisée pour indiquer la valeur maximale de l'entier prise en charge par l'option.

Mode d'opération

Si plusieurs options de mode d'opération sont données, la dernière prend effet.

Compresser. C'est le mode d'opération par défaut lorsque aucune option de mode opératoire n'est spécifiée ou qu'aucun autre mode d'opération n'est sous-entendu par le nom de la commande (par exemple unxz sous-entend --decompress).
Décompresser.
Tester l'intégrité des fichiers compressés. Cette option est équivalente à --decompress --stdout sauf que les données décompressées sont rejetées au lieu d'être écrites sur la sortie standard. Aucun fichier n'est créé ou supprimé.
Afficher l'information sur les fichiers compressés. Aucune sortie non-compressée n'est produite et aucun fichier n'est créé ou supprimé. En mode liste, le programme ne peut pas lire les données compressées depuis l'entrée standard ou depuis d'autres sources non adressables.
The default listing shows basic information about files, one file per line. To get more detailed information, use also the --verbose option. For even more information, use --verbose twice, but note that this may be slow, because getting all the extra information requires many seeks. The width of verbose output exceeds 80 characters, so piping the output to, for example, less -S may be convenient if the terminal isn't wide enough.
La sortie exacte peut varier suivant les versions de xz et les différents paramètres régionaux. Pour une sortie lisible par la machine, utiliser --robot --list.

Modificateurs d'opération

Ne pas effacer les fichiers d'entrée.
Since xz 5.2.6, this option also makes xz compress or decompress even if the input is a symbolic link to a regular file, has more than one hard link, or has the setuid, setgid, or sticky bit set. The setuid, setgid, and sticky bits are not copied to the target file. In earlier versions this was only done with --force.
Cette option a plusieurs effets :
  • Si le fichier cible existe déjà, l'effacer avant de compresser ou décompresser.
  • Compresser ou décompresser même si l'entrée est un lien symbolique vers un fichier normal, a plus qu'un lien physique, ou a le bit setuid, setgid ou sticky défini. Les bits setuid, setgid et sticky bits ne sont pas copiés dans le fichier cible.
  • Lorsque xz est utilisé avec --decompress --stdout et qu'il ne peut pas reconnaitre le type du fichier source, copier le fichier source tel quel dans la sortie standard. Celà permet à xzcat --force d'être utilisé comme cat(1) pour les fichiers qui n'ont pas été compressé avec xz. Remarquez que dans le futur, xz devrait prendre en charge de nouveaux formats de fichiers compressés, ce qui permettra à xz de décompresser plus de types de fichiers au lieu de les copier tels quels dans la sortie standard. --format=format peut être utilisé pour contraindre xz à décompresser seulement un format de fichier.
Écrire les données compressées ou décompressées sur la sortie standard plutôt que dans un fichier. Cela necessite --keep.
Décompresser seulement le premier flux .xz et ignorer silencieusement les possibles données d'entrée résiduelles qui suivent le flux. Normalement ces déchets excédentaires provoquent l'affichage d'une erreur par xz.
xz ne décompresse jamais plus d'un flux à partir de fichiers .lzma ou de flux bruts, mais cette option fait aussi que xz ignorera les données résiduelles après le fichier .lzma ou le flux brut.
Cette option n'a aucun effet si le mode d'opération n'est pas --decompress ou --test.
Désactiver la création de fichiers peu denses. Par défaut, lors de la décompression en un fichier normal, xz essaie d'en faire un fichier creux si les données décompressées contiennent de longues séquences de zéros binaires. Cela fonctionne aussi lors de l'écriture sur la sortie standard aussi longtemps que la sortie standard est connectée à un fichier normal et que certaines conditions supplémentaires sont satisfaites pour le faire de manière sécurisée. Créer des fichiers creux peut épargner de l'espace disque et accélérer la décompression en réduisant la quantité d'entrées/sorties sur le disque.
Lors de la compression, utiliser .suf comme suffixe du fichier cible au lieu de .xz ou .lzma. Si xz n'écrit pas sur la sortie standard et si le fichier source a déja le suffixe .suf, un avertissement est affiché et le fichier est ignoré.
When decompressing, recognize files with the suffix .suf in addition to files with the .xz, .txz, .lzma, .tlz, or .lz suffix. If the source file has the suffix .suf, the suffix is removed to get the target filename.
Lors de la compression ou décompression de flux bruts (--fomat=raw), le suffixe doit toujours être spécifié à moins d'écrire sur la sortie standard, car il n'y a pas de suffixe par défaut pour les flux bruts.
Lire les noms de fichier à traiter depuis fichier ; si fichier est omis , les noms de fichier sont lus sur l'entrée standard. Les noms de fichier doivent se terminer avec le caractère de nouvelle ligne. Un tiret (-) est considéré comme un nom de fichier normal ; ce qui ne signifie pas entrée standard. Si les noms de fichier sont aussi donnés comme arguments de ligne de commande, ils sont traités avant les noms de fichier lus depuis fichier.
Cela est identique à --files[=fichier] sauf que chaque nom de fichier doit se terminer par le caractère null.

Format de fichier basique et options de compression

Indiquer le format de fichier à compresser ou décompresser :
C'est celui par défaut. Lors de la compression, auto est équivalent à xz. Lors de la décompression, le format du fichier en entrée est détecté automatiquement. Notez que les flux bruts (créés avec --format=raw) ne peuvent pas être détectés automatiquement.
Compresser dans le format de fichier .xz ou n'accepter que les fichiers .xz à décompresser.
Compresser au format de fichier .lzma historique, ou n'accepter que les fichiers .lzma lors de la décompression. Le nom alternatif alone est fourni pour la rétrocompatibilité avec les utilitaires LZMA.
Accept only .lz files when decompressing. Compression is not supported.
The .lz format version 0 and the unextended version 1 are supported. Version 0 files were produced by lzip 1.3 and older. Such files aren't common but may be found from file archives as a few source packages were released in this format. People might have old personal files in this format too. Decompression support for the format version 0 was removed in lzip 1.18.
lzip 1.4 and later create files in the format version 1. The sync flush marker extension to the format version 1 was added in lzip 1.6. This extension is rarely used and isn't supported by xz (diagnosed as corrupt input).
Compresser ou décompresser un flux brut (sans en-têtes). Cela est réservé seulement aux utilisateurs aguerris. Pour décoder des flux bruts, vous devez utiliser --format=raw et spécifier explicitement la chaîne de filtre, qui normalement aurait du être stockée dans les en-têtes du conteneur.
Spécifier le type d'intégrité à vérifier. La vérification est calculée à partir des données non-compressées et stockées dans le fichier .xz. Cette option n'a effet que si la compression a été faite dans le format .xz ; le format .lzma ne gère pas les vérifications d'intégrité. Le contrôle d'intégrité (s'il y en a) est vérifié lorsque le fichier .xz est décompressé.
Types de vérification pris en charge :
Ne pas calculer de vérification d'intégrité du tout. C'est généralement une mauvaise idée. Cela peut être utile lorsque l'intégrité des données est vérifiée de toute façon par d'autres manières.
Calculer CRC32 en utilisant le polynôme de IEEE-802.3 (Ethernet).
Calculer CRC64 en utilisant le polynôme de ECMA-182. C'est la manière utilisée par défaut, car c'est légèrement mieux que CRC32 pour détecter les fichiers endommagés et la différence de vitesse est négligeable.
Calculer SHA-256. C'est quelque peu plus lent que CRC32 et CRC64.
L'intégrité des en-têtes .xz est toujours vérifiée avec CRC32. Il n'est pas possible de le changer ou de le désactiver.
Ne pas contrôler la vérification d'intégrité des données lors de la décompression. Les valeurs CRC32 dans les en-têtes .xz seront normalement toujours vérifiées.
N'utilisez pas cette option à moins de savoir ce que vous faites. Les raisons possibles pour utiliser cette option :
  • Essayer de récupérer des données d'un fichier .xz corrompu.
  • Accélérer la décompression. Cela importe surtout avec SHA-256 ou avec les fichiers qui ont été compressés extrêmement bien. Il est recommandé de ne pas utiliser cette option dans ce but à moins que l'intégrité du fichier ne soit vérifiée extérieurement d'une autre manière.
-0 ... -9
Choisir un niveau de compression prédéfini. La valeur par défaut est 6. Si plusieurs niveaux de préréglage sont spécifiés, c'est le dernier qui sera pris en compte. Si une chaîne de filtres personnalisée a déjà été choisie, définir un niveau de compression préréglé efface la chaîne de filtres personnalisée.
Les différences entre les préréglages sont plus significatives qu'avec gzip(1) et bzip2(1). les réglages de compression sélectionnés déterminent les exigences en mémoire pour la décompression, ainsi, utiliser un niveau de préréglage trop élevé peut rendre difficile à décompresser un fichier sur un vieux système avec peu de RAM. Clairement, ce n'est pas une bonne idée d'utiliser -9 aveuglément pour tout comme ça l'est souvent avec gzip(1) et bzip2(1).
-0 ... -3
Ce sont des préréglages relativement rapides. 0 est parfois plus rapide que gzip -9 tout en compressant bien mieux. Les réglages plus élevés ont souvent une rapidité comparable à celle de bzip2(1) avec un taux de compression comparable ou meilleur, même si les résultats dépendent beaucoup du genre de données compressées.
-4 ... -6
Good to very good compression while keeping decompressor memory usage reasonable even for old systems. -6 is the default, which is usually a good choice for distributing files that need to be decompressible even on systems with only 16 MiB RAM. (-5e or -6e may be worth considering too. See --extreme.)
-7 ... -9
C'est comme -6 mais avec des besoins en mémoire plus élevés pour la compression et la décompression. Ce n'est utile que lorsque les fichiers sont plus gros que 8 Mio, 16 Mio et 32 Mio respectivement.
Sur le même matériel, la vitesse de décompression est sensiblement un nombre constant d'octets de données compressées par seconde. En d'autres termes, meilleure est la compression, plus rapide sera en général la décompression. Cela signifie aussi que la quantité de sortie non compressée produite par seconde peut varier beaucoup.
Le tableau suivant résume les caractéristiques des préréglages :

Préréglage DictSize CompCPU CompMem DecMem
-0 256 KiB     0 3 MiB     1 MiB    
-1 1 MiB     1 9 MiB     2 MiB    
-2 2 MiB     2 17 MiB     3 MiB    
-3 4 MiB     3 32 MiB     5 MiB    
-4 4 MiB     4 48 MiB     5 MiB    
-5 8 MiB     5 94 MiB     9 MiB    
-6 8 MiB     6 94 MiB     9 MiB    
-7 16 MiB     6 186 MiB     17 MiB    
-8 32 MiB     6 370 MiB     33 MiB    
-9 64 MiB     6 674 MiB     65 MiB    
Descriptions des colonnes :
  • DictSize est la taille du dictionnaire de LZMA2. Utiliser un dictionnaire plus gros que la taille du fichier non compressé est un gaspillage de mémoire. C'est pourquoi il est bon d'éviter d'utiliser les préréglages de -7 à -9 lorsqu'il n'y en a pas vraiment besoin. A -6 et plus bas, la quantité de mémoire gaspillée est généralement assez basse pour ne pas être un problème.
  • CompCPU est une représentation des préréglages de LZMA2 qui affectent la vitesse de compression. La taille du dictionnaire aussi affecte la vitesse, alors comme CompCPU est le même pour les niveaux de -6 à -9, les plus haut niveaux tendent à être un peu moins rapides. Pour être encore moins rapide et du coup obtenir peut être une meilleure compression, consultez --extreme.
  • CompMem contient les besoins en mémoire du compresseur en mode mono-thread . Cela devrait à peine varier entre les versions de xz. Les besoins en mémoire de quelques uns des futurs modes multi-thread devraient sensiblement augmenter par rapport au mode mono-thread.
  • DecMem contient les besoins en mémoire du décompresseur. Ce sont les réglages de la compression qui déterminent les besoins en mémoire de la décompression. L'exacte utilisation de la mémoire est légèrement supérieure à la taille du dictionnaire LZMA2, mais les valeurs dans la table ont été arrondies au prochain Mio supérieur.
Utilisez un variant plus lent que les préréglages (-0 à -9) pour espérer avoir un taux de compression légèrement meilleur, mais en cas de malchance cela peut être pire. L'utilisation mémoire du décompresseur n'est pas affectée, mais l'utilisation mémoire du compresseur augmente un peu aux niveaux de préréglages de -0 à -3.
Depuis qu'il y a deux préréglages avec des tailles de dictionnaire de 4 Mio et 8 o, les préréglages -3e et -5e utilisent des réglages légèrement plus rapides que -4e et -6e, respectivement. De cette manière, il n'y a pas deux préréglages identiques.

Préréglage DictSize CompCPU CompMem DecMem
-0e 256 KiB     8 4 MiB     1 MiB    
-1e 1 MiB     8 13 MiB     2 MiB    
-2e 2 MiB     8 25 MiB     3 MiB    
-3e 4 MiB     7 48 MiB     5 MiB    
-4e 4 MiB     8 48 MiB     5 MiB    
-5e 8 MiB     7 94 MiB     9 MiB    
-6e 8 MiB     8 94 MiB     9 MiB    
-7e 16 MiB     8 186 MiB     17 MiB    
-8e 32 MiB     8 370 MiB     33 MiB    
-9e 64 MiB     8 674 MiB     65 MiB    
Par exemple, il y a un total de quatre préréglages qui utilisent un dictionnaire de 8 Mio et qui sont dans l'ordre du plus rapide au plus lent : -5, -6, -5e et -6e.
Il y a néanmoins des alias trompeurs pour -0 et -9, respectivement. Ils ne sont fournis que pour des besoins de rétro-compatibilité avec les utilitaires LZMA. Evitez d'utiliser ces options.
Lors de la compression dans le format .xz, les données de l'entrée sont réparties en blocs de taille octets. Les blocs sont compressés indépendamment les un des autres, ce qui aide avec le mode multithread (multi-threading) et rend possible la décompression à accès aléatoire limité. Cette option est typiquement utilisée pour outrepasser la taille de bloc en mode multithread, mais cette option peut aussi être utilisée en mode single-thread.
In multi-threaded mode about three times size bytes will be allocated in each thread for buffering input and output. The default size is three times the LZMA2 dictionary size or 1 MiB, whichever is more. Typically a good value is 2–4 times the size of the LZMA2 dictionary or at least 1 MiB. Using size less than the LZMA2 dictionary size is waste of RAM because then the LZMA2 dictionary buffer will never get fully used. The sizes of the blocks are stored in the block headers, which a future version of xz will use for multi-threaded decompression.
Par défaut, il n'y a pas de répartition de bloc en mode mono-thread. Régler cette option n'affecte pas l'utilisation de la mémoire. Aucune information de taille n'est stockée dans l'en-tête de bloc, par conséquent les fichiers créés en mode single-thread ne seront pas identiques aux fichiers créés en mode multi-thread. Le manque d'information de taille signifie aussi qu'une future version de xz ne sera pas capable de décompresser les fichiers en mode multi-thread.
Lors de la compression dans le format .xz, commencer un nouveau bloc après les intervalles donnés des données non compressées.
Les tailles non-compressées des blocs sont spécifiées sous forme de liste séparée par des virgules. Omettre une taille (deux ou plus virgules consécutives) est un raccourci pour utiliser la taille du bloc précédent.
Si le fichier en entrée est plus grand que la somme des tailles, la dernière valeur est répétée jusqu'à la fin du fichier. Une valeur spéciale de 0 peut être utilisée comme étant la dernière valeur pour indiquer que le reste du fichier devrait être encodé comme un simple bloc.
Si on spécifie des tailles qui excèdent la taille du bloc de l'encodeur (soit la valeur en mode threadé, soit la valeur spécifiée avec --block-size=taille), l'encodeur créera des blocs supplémentaires tout en gardant les limites indiquées dans tailles. Par exemple, si on indique --block-size=10MiB--block-list=5MiB,10MiB,8MiB,12MiB,24MiB et que le fichier fait 80Mio, on aura 11 blocs de 5, 10, 8, 2, 10, 10, 4, 10, 10, et 1 Mio.
En mode multi-threadé les tailles de blocs sont stockées dans les en-têtes du bloc. Cela ne se fait pas en mode mono-threadé, la sortie encodée ne sera donc pas identique à celle faite en mode multi-threadé.
Lors de la compression, si plus que temps_d'attente millisecondes (un entier positif) se sont écoulées depuis le précédent vidage et que lire plus de données bloquerait, toutes les données d'entrée en attente sont vidées de l'encodeur et mises à disposition dans le flux de sortie. Cela peut être utile si xz est utilisé pour compresser les données qui sont diffusées sur un réseau. Des petites valeurs de temps_d'attente rendent les données disponibles à l'extrémité réceptrice avec un léger retard, mais les grandes valeurs de temps_d'attente donnent un meilleur taux de compression.
Cette option est désactivée par défaut. Si cette option est indiquée plus d'une fois, la dernière prend effet. La valeur spéciale de temps_d'attente de 0 peut être utilisée pour explicitement désactiver cette option.
Cette option n'est pas disponible sur les systèmes qui ne sont pas POSIX.
Cette option est encore expérimentale. Actuellement, xz ne convient pas pour décompresser le flux en temps réel en raison de la façon dont xz effectue la mise en mémoire tampon.
Indiquer une limite d'utilisation de la mémoire pour la compression. Si cette option est indiquée plusieurs fois, c'est la dernière qui est prise en compte.
If the compression settings exceed the limit, xz will attempt to adjust the settings downwards so that the limit is no longer exceeded and display a notice that automatic adjustment was done. The adjustments are done in this order: reducing the number of threads, switching to single-threaded mode if even one thread in multi-threaded mode exceeds the limit, and finally reducing the LZMA2 dictionary size.
When compressing with --format=raw or if --no-adjust has been specified, only the number of threads may be reduced since it can be done without affecting the compressed output.
If the limit cannot be met even with the adjustments described above, an error is displayed and xz will exit with exit status 1.
La limite peut être indiquée de plusieurs façons :
  • La limite peut être une valeur absolue en octets. Utiliser un suffixe d'entier comme MiB peut être utile. Exemple : --memlimit-compress=80MiB
  • La limite peut être indiquée sous forme d'un pourcentage de la mémoire physique totale (RAM). Cela peut être particulièrement utile quand la variable d'environnement XZ_DEFAULTS est indiquée dans un script d'initialisation de l'interpréteur partagé entre différents ordinateurs. De cette façon la limite est automatiquement plus grande sur les systèmes avec plus de mémoire. Exemple : --memlimit=70%
  • The limit can be reset back to its default value by setting it to 0. This is currently equivalent to setting the limit to max (no memory usage limit).
For 32-bit xz there is a special case: if the limit would be over 4020 MiB, the limit is set to 4020 MiB. On MIPS32 2000 MiB is used instead. (The values 0 and max aren't affected by this. A similar feature doesn't exist for decompression.) This can be helpful when a 32-bit executable has access to 4 GiB address space (2 GiB on MIPS32) while hopefully doing no harm in other situations.
Voir aussi la section utilisation de la mémoire.
Régler une limite d'utilisation de la mémoire pour la décompression. Cela a un effet sur le mode --list. Si l'opération n'est pas possible sans dépasser la limite, xz affichera une erreur et la décompression échouera. Voir --memlimit-compress=limite pour les manières possibles d'indiquer la limite.
Set a memory usage limit for multi-threaded decompression. This can only affect the number of threads; this will never make xz refuse to decompress a file. If limit is too low to allow any multi-threading, the limit is ignored and xz will continue in single-threaded mode. Note that if also --memlimit-decompress is used, it will always apply to both single-threaded and multi-threaded modes, and so the effective limit for multi-threading will never be higher than the limit set with --memlimit-decompress.
In contrast to the other memory usage limit options, --memlimit-mt-decompress=limit has a system-specific default limit. xz --info-memory can be used to see the current value.
This option and its default value exist because without any limit the threaded decompressor could end up allocating an insane amount of memory with some input files. If the default limit is too low on your system, feel free to increase the limit but never set it to a value larger than the amount of usable RAM as with appropriate input files xz will attempt to use that amount of memory even with a low number of threads. Running out of memory or swapping will not improve decompression performance.
See --memlimit-compress=limit for possible ways to specify the limit. Setting limit to 0 resets the limit to the default system-specific value.
This is equivalent to specifying --memlimit-compress=limit --memlimit-decompress=limit --memlimit-mt-decompress=limit.
Display an error and exit if the memory usage limit cannot be met without adjusting settings that affect the compressed output. That is, this prevents xz from switching the encoder from multi-threaded mode to single-threaded mode and from reducing the LZMA2 dictionary size. Even when this option is used the number of threads may be reduced to meet the memory usage limit as that won't affect the compressed output.
Automatic adjusting is always disabled when creating raw streams (--format=raw).
Specify the number of worker threads to use. Setting threads to a special value 0 makes xz use up to as many threads as the processor(s) on the system support. The actual number of threads can be fewer than threads if the input file is not big enough for threading with the given settings or if using more threads would exceed the memory usage limit.
The single-threaded and multi-threaded compressors produce different output. Single-threaded compressor will give the smallest file size but only the output from the multi-threaded compressor can be decompressed using multiple threads. Setting threads to 1 will use the single-threaded mode. Setting threads to any other value, including 0, will use the multi-threaded compressor even if the system supports only one hardware thread. (xz 5.2.x used single-threaded mode in this situation.)
To use multi-threaded mode with only one thread, set threads to +1. The + prefix has no effect with values other than 1. A memory usage limit can still make xz switch to single-threaded mode unless --no-adjust is used. Support for the + prefix was added in xz 5.4.0.
If an automatic number of threads has been requested and no memory usage limit has been specified, then a system-specific default soft limit will be used to possibly limit the number of threads. It is a soft limit in sense that it is ignored if the number of threads becomes one, thus a soft limit will never stop xz from compressing or decompressing. This default soft limit will not make xz switch from multi-threaded mode to single-threaded mode. The active limits can be seen with xz --info-memory.
Actuellement, la seule méthode de gestion avec des threads consiste à séparer l'entrée en blocs et de les compresser indépendamment les uns des autres. La taille par défaut des blocs dépend du niveau de compression et peut-être remplacée avec l'option --block-size=taille.
Threaded decompression only works on files that contain multiple blocks with size information in block headers. All large enough files compressed in multi-threaded mode meet this condition, but files compressed in single-threaded mode don't even if --block-size=size has been used.

Chaînes de filtres de compresseur personnalisées

A custom filter chain allows specifying the compression settings in detail instead of relying on the settings associated to the presets. When a custom filter chain is specified, preset options (-0 ... -9 and --extreme) earlier on the command line are forgotten. If a preset option is specified after one or more custom filter chain options, the new preset takes effect and the custom filter chain options specified earlier are forgotten.

Une chaîne de filtre est comparable à une redirection (pipe) sur la ligne de commande. Lors de la compression, les entrées non compressées vont au premier filtre, dont la sortie va au prochain filtre (s'il y en a). La sortie du dernier filtre est écrite sur le fichier compressé. Le nombre maximal de filtres dans la chaîne est quatre, mais habituellement, un chaîne de filtre n'a qu'un ou deux filtres.

Beaucoup de filtres ont des limitations sur l'endroit où ils peuvent se placer dans la chaîne de filtre : quelques filtres ne peuvent fonctionner qu'en tant que dernier filtre dans la chaîne, quelques uns en tant que non dernier filtre, et d'autres à n'importe quelle position dans la chaîne. Suivant le filtre, cette limitation est soit inhérente au profil du filtre, soit existe pour des raisons de sécurité.

Une chaîne de filtres personnalisée est indiquée en utilisant une ou plusieurs options de filtre dans l'ordre où elles sont souhaitées dans la chaîne de filtres. Cela fait, l'ordre des options de filtre est significatif! Lors du décodage des flux bruts (--format=raw), le filtre de chaîne est indiqué dans le même ordre qu'il fût indiqué lors de la compression.

Les filtres prennent des options spécifiques aux filtres sous la forme d'une liste séparée par des virgules. Les virgules supplémentaires dans les options sont ignorées. Toutes les options ont une valeur par défaut, donc vous ne devez indiquer que celles que vous voulez changer.

Pour voir l'entièreté de la chaîne de filtres et ses options, utilisez xz -vv (ce qui est comme utiliser --verbose deux fois). Cela fonctionne aussi pour voir les options de chaîne de filtres utilisées par les préréglages.

Ajouter le filtre LZMA1 ou LZMA2 à la chaîne de filtres. Ces filtres ne peuvent être utilisés que comme dernier filtre dans la chaîne.
LZMA1 est un filtre historique, qui n'est pris en charge presque uniquement à cause de l'ancien format de fichier .lzma, qui ne prend en charge que LZMA1. LZMA2 est une version mise à jour de LZMA1 pour régler certains problèmes pratiques de LZMA1. Le format xz utilise LZMA2 et ne prend pas du tout en charge LZMA1. Les taux et vitesses de compression de LZMA1 et LZMA2 sont pratiquement identiques.
LZMA1 et LZMA2 partagent le même ensemble d'options :
Reset all LZMA1 or LZMA2 options to preset. Preset consist of an integer, which may be followed by single-letter preset modifiers. The integer can be from 0 to 9, matching the command line options -0 ... -9. The only supported modifier is currently e, which matches --extreme. If no preset is specified, the default values of LZMA1 or LZMA2 options are taken from the preset 6.
La taille du dictionnaire (historique du tampon) indique combien d'octets des données récement décompressées sont gardés en mémoire. L'algorithme essaie de trouver les séquences d'octets répétées (identiques) dans les données décompressées et les remplace par les données actuellement dans le dictionnaire. Plus gros est le dictionnaire, plus grande est la chance de trouver une correspondance. Ainsi, l'augmentation de la taille du dictionnaire augmente habituellement le taux de compression, mais un dictionnaire plus gros que le fichier non compressé est un gachis de mémoire.
Généralement la taille du dictionnaire est entre 64 Kio et 64 Mio. Le minimum étant 4 Kio. La taille maximale pour la compression est habituellement 1,5 Gio (1536 Mio). Le décompresseur prend en charge les dictionnaires jusqu'à un octet de moins que 4 Gio, ce qui est le maximum pour les formats de flux LZMA1 et LZMA2.
La taille du dictionnaire et le chercheur de correspondance (match finder) (mf) déterminent ensemble l'utilisation de la mémoire de l'encodeur LZMA1 ou LZMA2. La même (ou une plus grosse) taille de dictionnaire est requise pour décompresser que ce qui a été utilisé pour la compression, ainsi l'utilisation de la mémoire du décodeur est déterminée par la taille du dictionnaire utilisée lors de la compression. Les en-têtes de .xz stockent la taille de dictionnaire sous la forme 2^n ou 2^n + 2^(n-1), de sorte que ces tailles sont quelque peu préférées pour la compression. Les autres tailles seront arrondies à la hausse lorsque stockées dans les en-têtes de .xz.
Spécifiez le nombre d'octets de contexte littéraux. Le minimum est 0 et le maximum est 4. La valeur par défaut est 3. En plus, la somme de lc et lp ne doit pas excéder 4.
Tous les octets qui ne peuvent pas être codés comme des correspondances sont codés comme des littéraux. C'est à dire que les littéraux sont simplement des octets 8 bits encodés un à la fois.
The literal coding makes an assumption that the highest lc bits of the previous uncompressed byte correlate with the next byte. For example, in typical English text, an upper-case letter is often followed by a lower-case letter, and a lower-case letter is usually followed by another lower-case letter. In the US-ASCII character set, the highest three bits are 010 for upper-case letters and 011 for lower-case letters. When lc is at least 3, the literal coding can take advantage of this property in the uncompressed data.
The default value (3) is usually good. If you want maximum compression, test lc=4. Sometimes it helps a little, and sometimes it makes compression worse. If it makes it worse, test lc=2 too.
Indiquer le nombre de bits de position littérale. Le minimum est 0 et le maximum 4; par défaut c'est 0.
Lp affecte le type d'alignement dans les données décompressées qui est présumé lors de l'encodage des littéraux. Voir pb ci dessous pour plus d'information sur l'alignement.
Indiquer le nombre de bits de position. Le minimum est 0 et le maximum 4; par défaut 2.
Pb affecte quel genre d'alignement est présumé en général dans les données non compressées. Par défaut c'est un alignement de quatre octets (2^pb=2^2=4), ce qui est généralement un bon choix lorsqu'il n'y a pas de meilleure estimation.
When the alignment is known, setting pb accordingly may reduce the file size a little. For example, with text files having one-byte alignment (US-ASCII, ISO-8859-*, UTF-8), setting pb=0 can improve compression slightly. For UTF-16 text, pb=1 is a good choice. If the alignment is an odd number like 3 bytes, pb=0 might be the best choice.
Même si l'alignement présumé peut être ajusté avec pb et lp, LZMA1 et LZMA2 favorisent toujours légèrement l'alignement sur 16 octets. Il peut être utile d'en tenir compte lors de la conception de formats de fichiers susceptibles d'être souvent compressés avec LZMA1 ou LZMA2.
Match finder has a major effect on encoder speed, memory usage, and compression ratio. Usually Hash Chain match finders are faster than Binary Tree match finders. The default depends on the preset: 0 uses hc3, 1–3 use hc4, and the rest use bt4.
Les chercheurs de correspondance suivants sont pris en charge. Les formules d'utilisation de la mémoire ci-dessous sont des approximations grossières qui sont les plus proches de la réalité lorsque dict est une puissance de deux.
Chaîne de hachage avec hachage de 2 et 3 octets
Valeur minimale pour nice : 3
Utilisation de la mémoire :
dict * 7.5 (if dict <= 16 Mio);
dict * 5.5 + 64 MiB (si dict > 16 Mio)
Chaîne de hachage avec hachage de 2, 3 et 4 octets
Valeur minimale pour nice : 4
Utilisation de la mémoire :
dict * 7.5 (si dict <= 32 Mio);
dict * 6.5 (si dict > 32 Mio)
Arbre binaire avec hachage de 2 octets
Valeur minimale pour nice : 2
Utilisation de la mémoire : dict * 9.5
Arbre binaire avec hachage de 2 et 3 octets
Valeur minimale pour nice : 3
Utilisation de la mémoire :
dict * 11.5 (si dict <= 16 Mio);
dict * 9.5 + 64 MiB (si dict > 16 Mio)
Arbre binaire avec hachage 2, 3 et 4 octets
Valeur minimale pour nice : 4
Utilisation de la mémoire :
dict * 11.5 (si dict <= 32 Mio);
dict * 10.5 (si dict > 32 Mio)
Compression mode specifies the method to analyze the data produced by the match finder. Supported modes are fast and normal. The default is fast for presets 0–3 and normal for presets 4–9.
Habituellement, fast est utilisé avec les chercheurs de correspondance de chaîne de hachage et normal avec les chercheurs de correspondance d'arbre binaire. C'est aussi ce que font les préréglages.
Spécifier ce qui est considéré comme une bonne longueur pour une correspondance. Une fois que la correspondance d'au moins nice octets est trouvée, l'algorithme arrête de chercher de meilleures correspondances possibles.
Nice can be 2–273 bytes. Higher values tend to give better compression ratio at the expense of speed. The default depends on the preset.
Spécifier la profondeur de recherche maximale dans l'outil de recherche de correspondances. La valeur par défaut est 0, ce qui fait que le compresseur détermine une profondeur raisonnable en fonction de mf et nice.
Reasonable depth for Hash Chains is 4–100 and 16–1000 for Binary Trees. Using very high values for depth can make the encoder extremely slow with some files. Avoid setting the depth over 1000 unless you are prepared to interrupt the compression in case it is taking far too long.
Lors du décodage des flux bruts (--format=raw), LZMA2 nécessite seulement la taille du dictionnaire. LZMA1 nécessite aussi lc, lp et pb.
Ajouter un filtre branch/call/jump (BCJ) à la chaîne de filtres. Ces filtres ne peuvent être utilisés que s'ils ne sont pas le dernier filtre de la chaîne de filtrage.
A BCJ filter converts relative addresses in the machine code to their absolute counterparts. This doesn't change the size of the data but it increases redundancy, which can help LZMA2 to produce 0–15 % smaller .xz file. The BCJ filters are always reversible, so using a BCJ filter for wrong type of data doesn't cause any data loss, although it may make the compression ratio slightly worse. The BCJ filters are very fast and use an insignificant amount of memory.
Ces filtres BCJ présentent des problèmes connus liés au taux de compression :
  • Some types of files containing executable code (for example, object files, static libraries, and Linux kernel modules) have the addresses in the instructions filled with filler values. These BCJ filters will still do the address conversion, which will make the compression worse with these files.
  • If a BCJ filter is applied on an archive, it is possible that it makes the compression ratio worse than not using a BCJ filter. For example, if there are similar or even identical executables then filtering will likely make the files less similar and thus compression is worse. The contents of non-executable files in the same archive can matter too. In practice one has to try with and without a BCJ filter to see which is better in each situation.
Different instruction sets have different alignment: the executable file must be aligned to a multiple of this value in the input data to make the filter work.

Filtre Alignement Notes
x86 1 32 bits ou 64 bits x86
ARM 4
ARM-Thumb 2
ARM64 4 4096-byte alignment is best
PowerPC 4 Grand boutiste seulement
IA-64 16 Itanium
SPARC 4
Since the BCJ-filtered data is usually compressed with LZMA2, the compression ratio may be improved slightly if the LZMA2 options are set to match the alignment of the selected BCJ filter. For example, with the IA-64 filter, it's good to set pb=4 or even pb=4,lp=4,lc=0 with LZMA2 (2^4=16). The x86 filter is an exception; it's usually good to stick to LZMA2's default four-byte alignment when compressing x86 executables.
Tous les filtres BCJ prennent en charge les mêmes options :
Spécifier le décalage de départ qui est utilisé lors de la conversion entre les adresses relatives et absolues. Le décalage doit être un multiple de l'alignement du filtre (voir la table ci-dessus). Sa valeur par défaut est zéro. En pratique, cette dernière convient ; indiquer un décalage personnalisé est la plupart du temps inutile.
Ajouter le filtre Delta à la chaîne de filtres. Le filtre Delta ne peut être utilisé que s'il n'est pas le dernier filtre dans la chaîne.
Currently only simple byte-wise delta calculation is supported. It can be useful when compressing, for example, uncompressed bitmap images or uncompressed PCM audio. However, special purpose algorithms may give significantly better results than Delta + LZMA2. This is true especially with audio, which compresses faster and better, for example, with flac(1).
options prises en charge :
Specify the distance of the delta calculation in bytes. distance must be 1–256. The default is 1.
Par exemple, avec dist=2 et une entrée huit octets A1 B1 A2 B3 A3 B5 A4 B7, la sortie sera A1 B1 01 02 01 02 01 02.

Autres options

Supprimer les avertissements et les notifications. Indiquer cela deux fois supprimera aussi les erreurs. Cette option n'a aucun effet sur le statut de sortie. Cela dit, même si un avertissement était supprimé, le statut de sortie indiquant un avertissement sera encore utilisé.
Être bavard. Si l'erreur standard est connectée à un terminal, xz affichera une barre de progression. Indiquer --verbose deux fois donnera une sortie encore plus bavarde.
La barre de progression montre l'information suivante :
  • Le pourcentage de complétion est montré si la taille du fichier en entrée est connue. Néanmoins, le pourcentage ne peut pas être montré en cas de redirection.
  • Quantité de données compressées produites (compression) ou consommées (décompression).
  • Quantité de données non compressées consommées (compression) ou produites (décompression).
  • Le taux de compression, calculé en divisant la quantité de données compréssées déjà traitées par la quantité de données décompressées déjà traitées.
  • Vitesse de compression ou de décompression. Elle correspond à la quantité de données non compressées consommées (compression) ou produites (décompression) par seconde. Elle apparait quelques secondes après le début du traitement du fichier par xz.
  • Temps écoulé dans le format M:SS ou H:MM:SS.
  • Estimated remaining time is shown only when the size of the input file is known and a couple of seconds have already passed since xz started processing the file. The time is shown in a less precise format which never has any colons, for example, 2 min 30 s.
When standard error is not a terminal, --verbose will make xz print the filename, compressed size, uncompressed size, compression ratio, and possibly also the speed and elapsed time on a single line to standard error after compressing or decompressing the file. The speed and elapsed time are included only when the operation took at least a few seconds. If the operation didn't finish, for example, due to user interruption, also the completion percentage is printed if the size of the input file is known.
Ne pas mettre l'état de sortie à 2 même si une condition méritant un avertissement a été détectée. Cette option n'affecte pas le niveau de verbosité, néanmoins, les deux options --quiet et --no-warn doivent être utilisées pour ne pas afficher d'avertissements, ni altérer le statut de sortie.
Afficher les messages dans un format analysable par une machine. Ceci est destiné à faciliter l'écriture des frontaux qui voudraient utiliser xz plutôt que liblzma, ce qui pourrait être le cas pour différents scripts. La sortie avec cette option activée est destinée à rester stable sur les différentes versions de xz. Consulter le paragraphe ROBOT MODE pour les détails.
Display, in human-readable format, how much physical memory (RAM) and how many processor threads xz thinks the system has and the memory usage limits for compression and decompression, and exit successfully.
Afficher un message d'aide décrivant les options les plus couramment utilisées et quitter.
Afficher un message d'aide décrivant toutes les options de xz et quitter.
Afficher le numéro de version de xz et de liblzma dans un format lisible par un humain. Pour obtenir une sortie analysable par la machine, spécifiez --robot avant --version.

MODE ROBOT

Le mode robot est activé avec l'option --robot. Cela rend la sortie de xz plus facile à analyser par d'autres programmes. Actuellement, --robot n'est seulement pris en charge qu'avec --version, --info-memory et --list. Il sera pris en charge pour la compression et la décompression dans le futur.

Version

xz --robot --version affichera le numéro de version de xz et liblzma dans le format suivant :

XZ_VERSION=XYYYZZZS
LIBLZMA_VERSION=XYYYZZZS

Version majeure.
Version mineure. Les numéros pairs sont stables. Les numéros impairs sont des versions alpha ou beta.
Niveau de correctif pour les options stables ou juste un compteur pour les options de développement.
Stabilité. 0 est alpha, 1 est bêta et 2 est stable. S devrait toujours être 2 quand YYY est pair.

XYYYZZZS sont identiques sur les deux lignes si xz et liblzma sont issus de la même version d'utilitaires XZ.

Exemples : 4.999.9beta est 49990091 et 5.0.0 est 50000002.

Information de limite de mémoire

xz --robot --info-memory affiche une seule ligne avec trois colonnes séparées par des tabulations :

1.
Total amount of physical memory (RAM) in bytes.
2.
Memory usage limit for compression in bytes (--memlimit-compress). A special value of 0 indicates the default setting which for single-threaded mode is the same as no limit.
3.
Memory usage limit for decompression in bytes (--memlimit-decompress). A special value of 0 indicates the default setting which for single-threaded mode is the same as no limit.
4.
Since xz 5.3.4alpha: Memory usage for multi-threaded decompression in bytes (--memlimit-mt-decompress). This is never zero because a system-specific default value shown in the column 5 is used if no limit has been specified explicitly. This is also never greater than the value in the column 3 even if a larger value has been specified with --memlimit-mt-decompress.
5.
Since xz 5.3.4alpha: A system-specific default memory usage limit that is used to limit the number of threads when compressing with an automatic number of threads (--threads=0) and no memory usage limit has been specified (--memlimit-compress). This is also used as the default value for --memlimit-mt-decompress.
6.
Since xz 5.3.4alpha: Number of available processor threads.

Dans le futur, la sortie de xz --robot --info-memory pourrait avoir plus de colonnes, mais jamais plus qu'une ligne unique.

Mode liste

xz --robot --list utilise une sortie séparée par des tabulations. La première colonne de toutes les lignes possède une chaîne qui indique le type d'information trouvée sur cette ligne :

C'est toujours la première ligne au début de la liste d'un fichier. La seconde colonne de la ligne est le nom de fichier.
Cette ligne contient l'information globale sur le fichier .xz. Cette ligne est toujours écrite après la ligne name.
Ce type de ligne n'est utilisée que lorsque --verbose a été indiquée. Il y a autant de lignes stream qu'il y a de flux dans le fichier .xz.
Ce type de ligne n'est utilisé seulement lorsque --verbose a été indiquée. Il y a autant de lignes block qu'il y a de blocs dans le fichier .xz. Les lignes block sont affichées après toutes les lignes stream ; les différents types de lignes ne sont pas imbriqués.
Ce type de ligne n'est utilisé que lorsque --verbose a été indiqué deux fois. Cette ligne est affichée après toutes les lignes block. Comme la ligne file, la ligne summary contient l'information globale sur le fichier .xz.
Cette ligne est toujours la toute dernière ligne de la sortie. Elle affiche les comptes et les tailles totaux.

Les colonnes des lignes file :

2.
Nombre de flux dans le fichier
3.
Nombre total de blocs dans le ou les flux.
4.
Taille compressée du fichier
5.
Taille décompressée du fichier
6.
Compression ratio, for example, 0.123. If ratio is over 9.999, three dashes (---) are displayed instead of the ratio.
7.
Liste de noms de contrôles d'intégrité séparés par des virgules. Les chaînes suivantes sont utilisées pour les types de vérification connus : None, CRC32, CRC64 et SHA256. Pour le types de vérification inconnus, Unknown-N est utilisé, où N est un identifiant de vérification sous la forme d'un nombre décimal (un ou deux chiffres).
8.
Taille totale du remplissage du flux dans le fichier

Les colonnes des lignes stream :

2.
Numéro de flux (le premier flux a le numéro 1)
3.
Nombre de blocs dans le flux
4.
Décalage de départ compressé
5.
Décalage de départ décompressé
6.
Taille compressée (ne comprend pas le remplissage du flux)
7.
Taille décompressée
8.
Taux de compression
9.
Nom de la vérification d'intégrité
10.
Taille du remplissage de flux

Les colonnes des lignes block :

2.
Numéro du flux qui contient ce bloc
3.
Numéro du bloc relatif au commencement du flux (le premier bloc a pour numéro 1)
4.
Numéro du bloc relatif au début du fichier
5.
Décalage de départ compressé relatif au début du fichier
6.
Décalage de départ décompressé relatif au début du fichier
7.
Taille compressée totale du bloc (en-têtes inclus)
8.
Taille décompressée
9.
Taux de compression
10.
Nom de la vérification d'intégrité

Si --verbose a été indiqué deux fois, les colonnes additionnelles sont inclues sur les lignes block. Elles ne sont pas affichées avec un seul --verbose, car l'obtention de ces informations nécessite de nombreuses recherches et peut donc être lente :

11.
Valeur de la vérification d'intégrité en hexadécimal
12.
Taille d'en-tête de bloc
13.
Drapeaux du bloc : c indique que la taille compressée est présente, et u indique que la taille décompréssée est présente. Si le drapeau n'est pas indiqué, un tiret (-) est affiché à la place pour que la longueur de la chaîne reste fixe. De nouveaux drapeaux pourraient être ajoutés à la fin de la chaîne dans le futur.
14.
Taille des données effectivement compressées dans le bloc (en excluant l'en-tête de bloc, le remplissage de bloc et les champs de vérification).
15.
Quantité de mémoire (en octets) nécessaire pour décompresser ce bloc avec cette version de xz.
16.
Chaîne de filtrage. Remarquez que la plupart des options utilisées au moment de la compression ne peuvent pas être connues, car seules les options nécessaires pour la décompression sont stockées dans les en-têtes .xz.

Les colonnes des lignes summary :

2.
Quantité de mémoire (en octets) nécessaire pour décompresser ce fichier avec cette version de xz.
3.
yes ou no indique si tous les en-têtes de bloc stockent à la fois la taille compressée et la taille décompressée.

Depuis xz 5.1.2alpha:

4.
Version minimale de xz nécessaire pour décompresser le fichier.

Les colonnes de la ligne totals :

2.
Nombre de flux
3.
Nombre de blocs
4.
Taille compressée
5.
Taille décompressée
6.
Taux de compression moyen
7.
Liste séparée par des virgules des noms de vérification d'intégrité qui étaient présents dans les fichiers
8.
Taille de remplissage de flux
9.
Nombre de fichiers. Permet de garder l'ordre des colonnes précédentes comme sur les lignes file.

Si --verbose a été indiqué deux fois, des colonnes supplémentaires sont incluses sur la ligne totals :

10.
Quantité maximale de mémoire (en octets) nécessaire pour décompresser les fichiers avec cette version de xz.
11.
yes ou no indique si tous les en-têtes de bloc stockent à la fois la taille compressée et la taille décompressée.

Depuis xz 5.1.2alpha:

12.
Version minimale de xz nécessaire pour décompresser le fichier.

Les versions futures pourront ajouter de nouveaux types de lignes et de nouvelles colonnes pourront être ajoutées aux types de lignes existants, mais les colonnes existantes ne seront pas modifiées.

STATUT DE SORTIE

0
Tout est bon.
1
Une erreur est survenue.
2
Quelquechose méritant un avertissement s'est produit, mais aucune erreur véritable n'est survenue.

Les notifications (pas les avertissements ou les erreurs) affichées sur l'erreur standard n'affectent pas le statut de sortie.

ENVIRONNEMENT

xz analyse les listes d'options séparées par des espaces à partir des variables d'environnement XZ_DEFAULTS et XZ_OPT, dans cet ordre, avant d'analyser les options de la ligne de commandes. Remarquez que seules les options sont analysées depuis l'environnement des variables ; toutes les non-options sont ignorées silencieusement. L'analyse est faite avec getopt_long(3) qui est aussi utilisé pour les arguments de la ligne de commandes.

Options par défaut propres à l'utilisateur ou pour tout le système. Elles sont le plus souvent définies dans un script d'initialisation de l'interpréteur pour activer le limiteur d'utilisation de la mémoire de xz par défaut. A part pour les scripts d'initialisation de l'interpréteur ou des cas similaires, les sripts ne doivent jamais définir ou désactiver XZ_DEFAULTS.
This is for passing options to xz when it is not possible to set the options directly on the xz command line. This is the case when xz is run by a script or tool, for example, GNU tar(1):

XZ_OPT=-2v tar caf foo.tar.xz foo
Scripts may use XZ_OPT, for example, to set script-specific default compression options. It is still recommended to allow users to override XZ_OPT if that is reasonable. For example, in sh(1) scripts one may use something like this:

XZ_OPT=${XZ_OPT-"-7e"} export XZ_OPT

Compatibilité des utilitaires LZMA

La syntaxe de la ligne de commande de xz est quasimment un sur-ensemble de lzma, unlzma et lzcat comme ils sont trouvés dans les utilitaires LZMA 4.32.x . Dans la pluspart des cas, il est possible de remplacer les outils LZMA par les outils XZ sans casser les scripts existants. Il existe cependant certaines incompatibilités qui peuvent parfois poser des problèmes.

Niveaux de préréglage de la compression

La numérotation des préréglages de niveau de compression est différente entre les outils xz et LZMA. La différence la plus importante est la manière dont les tailles de dictionnaire sont affectées aux différents préréglages. La taille de dictionnaire est à peu près égale à celle d'utilisation de la mémoire de la décompression.

Niveau xz Utilitaires LZMA
-0 256 KiB     N/A
-1 1 MiB     64 KiB
-2 2 MiB     1 MiB
-3 4 MiB     512 KiB
-4 4 MiB     1 MiB
-5 8 MiB     2 MiB
-6 8 MiB     4 MiB
-7 16 MiB     8 MiB
-8 32 MiB     16 MiB
-9 64 MiB     32 MiB

Les différences de tailles des dictionnaires affectent aussi l'utilisation de la mémoire du compresseur, mais il y a quelques autres différences entre les outils LZMA et les outils XZ, qui rendent la différence encore plus grande :

Niveau xz Utilitaires LZMA 4.32.x
-0 3 MiB     N/A
-1 9 MiB     2 MiB
-2 17 MiB     12 MiB
-3 32 MiB     12 MiB
-4 48 MiB     16 MiB
-5 94 MiB     26 MiB
-6 94 MiB     45 MiB
-7 186 MiB     83 MiB
-8 370 MiB     159 MiB
-9 674 MiB     311 MiB

Le niveau de préréglage par défaut dans les outils LZMA est -7 alors que pour les outils XZ c'est -6, les deux utilisent ainsi un dictionnaire de 8 Mio par défaut.

Fichiers .lzma en flux ou non

The uncompressed size of the file can be stored in the .lzma header. LZMA Utils does that when compressing regular files. The alternative is to mark that uncompressed size is unknown and use end-of-payload marker to indicate where the decompressor should stop. LZMA Utils uses this method when uncompressed size isn't known, which is the case, for example, in pipes.

xz prend en charge la décompression des fichiers .lzma avec ou sans marqueur de fin de charge utile, mais tous les fichiers .lzma créés par xz utiliseront un marqueur de fin de charge utile et ont la taille non compréssée marquée comme inconnue dans l'en-tête .lzma. Cela peut être un problème dans quelques situations inhabituelles. Par exemple, un décompresseur .lzma dans un périphérique embarqué pourrait ne fonctionner qu'avec des fichiers dont la taille non comprimée est connue. Si vous vous heurtez à ce problème, vous devez utiliser les utilitaires LZMA ou LZMA SDK pour créer des fichiers .lzma avec une taille non compressée connue.

Fichiers .lzma non pris en charge

Le format .lzma autorise des valeurs lc jusqu'à 8, et des valeurs lp jusqu'à 4. Les outils LZMA peuvent décompresser des fichiers avec tous les lc et lp, mais créez toujours les fichiers avec lc=3 et lp=0. Créer des fichiers avec d'autres valeurs lc et lp est possible avec xz et avec LZMA SDK.

L'implémentation du filtre LZMA1 dans liblzma nécessite que la somme de lc et lp soit inférieure ou égale à 4. Ainsi, les fichiers .lzma qui excèdent cette limitation ne peuvent pas être décompressés avec xz.

Les outils LZMA créent seulement des fichiers .lzma qui ont une taille de dictionnaire de 2^n (une puissance de 2) mais acceptent les fichiers avec toutes les tailles de dictionnaire. Libzlma n'accepte que les fichiers .lzma qui ont une taille dictionnaire de 2^n ou 2^n + 2^(n-1). Cela afin de diminuer les faux positifs lors de la détection des fichiers .lzma.

Ces limitations ne devraient pas poser problème en pratique, car pratiquement tous les fichiers .lzma ont été compressés avec des réglages que liblzma accepte.

Déchets excédentaires

Lors de la décompession, l'utilitaire LZMA ignore silencieusement tout ce qui est après le premier flux .lzma. Dans la majorité des situations, c'est un bogue. Cela veut dire aussi que les outils LZMA ne gèrent pas la décompression de fichiers .lzma concaténés.

S'il reste des données après le premier flux .lzma, xz considère que le fichier est corrompu sauf si --single-stream a été utilisé. Cela peut casser des scripts obscurs qui ont supposé que les déchets de fin de ligne sont ignorés.

NOTES

La sortie compressée peut varier

La sortie compressée exacte produite par les même fichiers non compressés en entrée peut varier en fonction des différentes versions de l'utilitaire XZ, même si les options de compression sont identiques. En effet, il est possible d'améliorer l'encodeur (compression plus rapide ou meilleure) sans affecter le format du fichier. La sortie peut même varier entre différentes compilations de la même version d'utilitaire XZ, si des options de construction différentes sont utilisées.

Cela signifie qu'une fois que --rsyncable a été implémenté, les fichiers résultants ne seront pas nécessairement synchronisables avec rsync à moins que les nouveaux et anciens fichiers n'aient été compressés avec la même version de xz. Ce problème peut être résolu si une partie de l'implémentation est gelée pour garantir la stabilité de la sortie rsyncable à travers les versions de xz.

Décompresseurs .xz embarqués

Les implémentations de décompresseur embarqué comme XZ Embedded ne gèrent pas nécessairement les fichiers créés avec d'autres types de vérification d'intégrité que none et CRC32. Comme la valeur par défaut est --check=crc64, vous devez utiliser --check=none ou --check=crc32 lors de la création de fichiers pour les systèmes embarqués.

En dehors des systèmes embarqués, tous les décompresseurs de format .xz gèrent tous les types de vérification ou sont au moins capables de décompresser le fichier sans effectuer la vérification d'intégrité si ce type de vérification particulière n'est pas pris en charge.

XZ Embedded prend en charge les filtres BCJ, mais seulement avec le décalage de départ par défaut.

EXEMPLES

Bases

Compresser le fichier toto en toto.xz en utilisant le niveau de compression par défaut (-6) et supprimer toto si la compression réussit :

xz toto

Décompresser bidule.xz en bidule et ne pas supprimer bidule.xz même si la compression réussit :

xz -dk bidule.xz

Create baz.tar.xz with the preset -4e (-4 --extreme), which is slower than the default -6, but needs less memory for compression and decompression (48 MiB and 5 MiB, respectively):

tar cf - truc | xz -4e > truc.tar.xz

Un mélange de fichiers compressés et non compressés peuvent être décompressés vers la sortie standard avec une simple commande :

xz -dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt

Compression en parallèle de plusieurs fichiers

Sur GNU et *BSD, find(1) et xargs(1) peuvent être utilisés pour mettre en parallèle la compression de plusieurs fichiers :

find . -type f \! -name '*.xz' -print0 \     | xargs -0r -P4 -n16 xz -T1

L'option P passée à xargs(1) fixe le nombre de processus xz en parallèles. La meilleure valeur pour l'option n dépend du nombre de fichiers à compresser. S-il n'y a que quelques fichiers, la valeur sera probablement 1 ; avec des dizaines de milliers de fichiers, 100 ou même plus serait approprié pour réduire le nombre de processus xz que xargs(1) créera éventuellement.

L'option -T1 de xz est là pour le forcer en mode mono-thread, car xargs(1) est utilisé pour contrôler la quantité de mise en parallèle.

Mode robot

Calculer combien d'octets ont été économisés au total après avoir compressé plusieurs fichiers :

xz --robot --list *.xz | awk '/^totals/{print $5-$4}'

Un script peut vouloir savoir qu'il utilise une version suffisamment récente de xz. Le script sh(1) suivant vérifie que le numéro de version de l'outil xz soit au minimum 5.0.0. Cette méthode est compatible avec les vieilles versions bêta, qui ne gèrent pas l'option --robot :

if ! eval "$(xz --robot --version 2> /dev/null)" ||         [ "$XZ_VERSION" -lt 50000002 ]; then     echo "Votre version de xz est trop ancienne." fi unset XZ_VERSION LIBLZMA_VERSION

Régler une limite d'utilisation de la mémoire pour la décompression en utilisant XZ_OPT, mais si une limite a déjà été définie, ne pas l'augmenter :

NEWLIM=$((123 << 20))  # 123 MiB OLDLIM=$(xz --robot --info-memory | cut -f3) if [ $OLDLIM -eq 0 -o $OLDLIM -gt $NEWLIM ]; then     XZ_OPT="$XZ_OPT --memlimit-decompress=$NEWLIM"     export XZ_OPT fi

Chaînes de filtres de compresseur personnalisées

L'utilisation la plus simple des chaînes de filtres personnalisées est la personnalisation d'un préréglage LZMA2. Cela peut être utile, car les préréglages ne couvrent qu'un sous-ensemble des réglages de compression potentiellement utiles.

Les colonnes CompCPU des tableaux des descriptions des options -0 à -9 et --extreme sont utiles lors de la personnalisation des préréglages LZMA2. Voici les parties pertinentes recueillies à partir de ces deux tableaux :

Préréglage CompCPU
-0 0
-1 1
-2 2
-3 3
-4 4
-5 5
-6 6
-5e 7
-6e 8

If you know that a file requires somewhat big dictionary (for example, 32 MiB) to compress well, but you want to compress it quicker than xz -8 would do, a preset with a low CompCPU value (for example, 1) can be modified to use a bigger dictionary:

xz --lzma2=preset=1,dict=32MiB toto.tar

Avec certains fichiers, la commande ci-dessus peut être plus rapide que xz-6 tout en compressant bien mieux. Cependant, il faut souligner que seuls certains fichiers bénéficient d'un grand dictionnaire tout en gardant la valeur de CompCPU faible. La siutation la plus évidente où un gros dictionnaire peut baucoup aider, est une archive contenant des fichiers très similaires de quelques megaoctets chacun. La taille de dictionnaire doit être significativement plus grosse que tout fichier individuel pour permettre à LZMA2 de tirer pleinement partie des similarités entre des fichiers consécutifs.

Si une utilisation de la mémoire élevée pour la compression et décompression convient, et que le fichier à compresser a une taille de plusieurs centaines de megaoctets, il peut être utile d'utiliser un plus gros dictionnaire que celui fourni par xz-9 (64 Mio) :

xz -vv --lzma2=dict=192MiB gros_toto.tar

Utiliser -vv (--verbose--verbose) comme dans l'exemple ci-dessus peut être utile pour voir les besoins en mémoire du compresseur et du décompresseur. Rappelez-vous qu'utiliser un dictionnaire plus gros que la taille du fichier non compressé est un gachis de mémoire, donc la commande ci-dessus n'est pas utile pour les petits fichiers.

Sometimes the compression time doesn't matter, but the decompressor memory usage has to be kept low, for example, to make it possible to decompress the file on an embedded system. The following command uses -6e (-6 --extreme) as a base and sets the dictionary to only 64 KiB. The resulting file can be decompressed with XZ Embedded (that's why there is --check=crc32) using about 100 KiB of memory.

xz --check=crc32 --lzma2=preset=6e,dict=64KiB toto

If you want to squeeze out as many bytes as possible, adjusting the number of literal context bits (lc) and number of position bits (pb) can sometimes help. Adjusting the number of literal position bits (lp) might help too, but usually lc and pb are more important. For example, a source code archive contains mostly US-ASCII text, so something like the following might give slightly (like 0.1 %) smaller file than xz -6e (try also without lc=4):

xz --lzma2=preset=6e,pb=0,lc=4 code_source.tar

Using another filter together with LZMA2 can improve compression with certain file types. For example, to compress a x86-32 or x86-64 shared library using the x86 BCJ filter:

xz --x86 --lzma2 libtoto.so

Notez que l'ordre des options de filtre est significatif. Si --x86 est indiqué après --lzma2, xz donnera une erreur, car il ne peut y avoir aucun filtre après LZMA2, et aussi parce que le filtre BCJ x86 ne peut pas être utilisé comme dernier filtre dans la chaîne.

Le filtre Delta associé à LZMA2 peut donner de bons résultats avec les images bitmap. Cela devrait habituellement battre PNG, qui a quelques filtres avancés supplémentaires qu'un simple delta, mais qui utilise Deflate pour la compression effective.

The image has to be saved in uncompressed format, for example, as uncompressed TIFF. The distance parameter of the Delta filter is set to match the number of bytes per pixel in the image. For example, 24-bit RGB bitmap needs dist=3, and it is also good to pass pb=0 to LZMA2 to accommodate the three-byte alignment:

xz --delta=dist=3 --lzma2=pb=0 toto.tiff

If multiple images have been put into a single archive (for example, .tar), the Delta filter will work on that too as long as all images have the same number of bytes per pixel.

VOIR AUSSI

xzdec(1), xzdiff(1), xzgrep(1), xzless(1), xzmore(1), gzip(1), bzip2(1), 7z(1)

XZ Utilitaires: <https://tukaani.org/xz/>
XZ Embarqué: <https://tukaani.org/xz/embedded.html>
LZMA SDK: <http://7-zip.org/sdk.html>

2022-12-01 Tukaani