XZ(1) Utilitaires XZ XZ(1) NOM xz, unxz, xzcat, lzma, unlzma, lzcat - Compresser ou decompresser des fichiers .xz et .lzma SYNOPSIS xz [option...] [fichier...] ALIAS DES COMMANDES unxz est equivalent a xz --decompress. xzcat est equivalent a xz --decompress --stdout lzma est equivalent a xz --format=lzma unlzma est equivalent a xz --format=lzma --decompress lzcat est equivalent a xz --format=lzma --decompress -- stdout Lors de l'ecriture de scripts qui necessitent de decompresser des fichiers, il est recommande de toujours utiliser la commande xz avec les arguments appropries (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 decompresse chaque fichier en fonction du mode d'operation choisi. Si aucun fichier n'est donne ou fichier est -, xz lit depuis l'entree standard et ecrit les donnees traitees sur la sortie standard. xz refusera (affichera une erreur et ignorera le fichier) d'ecrire les donnees compressees sur la sortie standard si c'est un terminal. De meme, xz refusera de lire des donnees compressees depuis l'entree standard si c'est un terminal. A moins que --sdout ne soit indique, les fichiers autres que - sont ecrits dans un nouveau fichier dont le nom est derive du nom de fichier source : o Lors de la compression, le suffixe du format de fichier cible (.xz ou .lzma) est ajoute au nom de fichier source pour obtenir le nom de fichier cible. o 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 deja, une erreur est affichee et le fichier est ignore. Sauf s'il ecrit dans la sortie standard, xz affichera un avertissement et ignorera le fichier dans les cas suivants : o fichier n'est pas un fichier normal. Les liens symboliques ne sont pas suivis et donc ne sont pas consideres comme des fichiers normaux. o fichier a plusieurs liens physiques. o fichier a un setuid, setgid ou sticky bit positionne. o Le mode d'operation est defini pour compresser et le fichier a deja 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). o 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). Apres la compression ou la decompression reussie du fichier, xz copie les permissions du proprietaire, du groupe, la date d'acces, et les modifications d'heure depuis le fichier source du fichier cible. Si la copie du groupe echoue, les permissions sont modifiees pour que le fichier cible ne soit pas accessible aux utilisateurs qui n'ont pas les droits d'acces au fichier source. xz ne prend actuellement pas en charge la copie d'autres metadonnees telles que les listes de controle d'acces ou les attributs etendus. 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 interet limite car lorsque l'erreur standard est un terminal, utiliser --verbose affichera automatiquement un indicateur de progression du processus. Utilisation de la memoire L'utilisation de la memoire par xz varie de quelques centaines de kilo-octets a plusieurs gigaoctects en fonction des parametres de compression. Les reglages utilises lors de la compression d'un fichier determinent les besoins en memoire pour la decompression. Habituellement la decompression necessite 5 a 20 de la quantite de memoire utilisee pour la compression du fichier. Par exemple, decompresser un fichier cree avec xz-9 recquiert habituellement 65 Mio de memoire. Bien qu'il soit possible d'avoir des fichiers .xz necessitant plusieurs gigaoctets de memoire pour etre decompresses. 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. Concatenation et remplissage avec des fichiers .xz Il est possible de concatener les fichiers .xz tels quel. xz decompressera de tels fichiers comme s'ils etaient 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 concatenation et le remplissage ne sont pas autorises avec les fichiers .lzma ou les flux bruts. OPTIONS Suffixes entiers et valeurs speciales. Dans la plupart des endroits ou 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. KiB Multiplier l'entier par 1024 (2^10). Ki, k, kB, K et KB sont acceptes comme synonymes de KiB. MiB Multiplier l'entier par 1 048 576 (2^20). Mi, m, M et MB sont acceptes comme synonymes de MiB. GiB Multiplier l'entier par 1 073 741 824 (2^30). Gi, g, G et GB sont acceptes comme synonymes de GiB. La valeur speciale max peut etre utilisee pour indiquer la valeur maximale de l'entier prise en charge par l'option. Mode d'operation Si plusieurs options de mode d'operation sont donnees, la derniere prend effet. -z, --compress Compresser. C'est le mode d'operation par defaut lorsque aucune option de mode operatoire n'est specifiee ou qu'aucun autre mode d'operation n'est sous-entendu par le nom de la commande (par exemple unxz sous-entend --decompress). -d, --decompress, --uncompress Decompresser. -t, --test Tester l'integrite des fichiers compresses. Cette option est equivalente a --decompress --stdout sauf que les donnees decompressees sont rejetees au lieu d'etre ecrites sur la sortie standard. Aucun fichier n'est cree ou supprime. -l, --list Afficher l'information sur les fichiers compresses. Aucune sortie non-compressee n'est produite et aucun fichier n'est cree ou supprime. En mode liste, le programme ne peut pas lire les donnees compressees depuis l'entree 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 differents parametres regionaux. Pour une sortie lisible par la machine, utiliser --robot --list. Modificateurs d'operation -k, --keep Ne pas effacer les fichiers d'entree. 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. -f, --force Cette option a plusieurs effets : o Si le fichier cible existe deja, l'effacer avant de compresser ou decompresser. o Compresser ou decompresser meme si l'entree est un lien symbolique vers un fichier normal, a plus qu'un lien physique, ou a le bit setuid, setgid ou sticky defini. Les bits setuid, setgid et sticky bits ne sont pas copies dans le fichier cible. o Lorsque xz est utilise 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. Cela permet a xzcat --force d'etre utilise comme cat(1) pour les fichiers qui n'ont pas ete compresse avec xz. Remarquez que dans le futur, xz devrait prendre en charge de nouveaux formats de fichiers compresses, ce qui permettra a xz de decompresser plus de types de fichiers au lieu de les copier tels quels dans la sortie standard. --format=format peut etre utilise pour contraindre xz a decompresser seulement un format de fichier. -c, --stdout, --to-stdout Ecrire les donnees compressees ou decompressees sur la sortie standard plutot que dans un fichier. Cela necessite --keep. --single-stream Decompresser seulement le premier flux .xz et ignorer silencieusement les possibles donnees d'entree residuelles qui suivent le flux. Normalement ces dechets excedentaires provoquent l'affichage d'une erreur par xz. xz ne decompresse jamais plus d'un flux a partir de fichiers .lzma ou de flux bruts, mais cette option fait aussi que xz ignorera les donnees residuelles apres le fichier .lzma ou le flux brut. Cette option n'a aucun effet si le mode d'operation n'est pas --decompress ou --test. --no-sparse Desactiver la creation de fichiers peu denses. Par defaut, lors de la decompression en un fichier normal, xz essaie d'en faire un fichier creux si les donnees decompressees contiennent de longues sequences de zeros binaires. Cela fonctionne aussi lors de l'ecriture sur la sortie standard aussi longtemps que la sortie standard est connectee a un fichier normal et que certaines conditions supplementaires sont satisfaites pour le faire de maniere securisee. Creer des fichiers creux peut epargner de l'espace disque et accelerer la decompression en reduisant la quantite d'entrees/sorties sur le disque. -S .suf, --suffix=.suf Lors de la compression, utiliser .suf comme suffixe du fichier cible au lieu de .xz ou .lzma. Si xz n'ecrit pas sur la sortie standard et si le fichier source a deja le suffixe .suf, un avertissement est affiche et le fichier est ignore. 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 decompression de flux bruts (--fomat=raw), le suffixe doit toujours etre specifie a moins d'ecrire sur la sortie standard, car il n'y a pas de suffixe par defaut pour les flux bruts. --files[=fichier] Lire les noms de fichier a traiter depuis fichier ; si fichier est omis , les noms de fichier sont lus sur l'entree standard. Les noms de fichier doivent se terminer avec le caractere de nouvelle ligne. Un tiret (-) est considere comme un nom de fichier normal ; ce qui ne signifie pas entree standard. Si les noms de fichier sont aussi donnes comme arguments de ligne de commande, ils sont traites avant les noms de fichier lus depuis fichier. --files0[=fichier] Cela est identique a --files[=fichier] sauf que chaque nom de fichier doit se terminer par le caractere null. Format de fichier basique et options de compression -F format, --format=format Indiquer le format de fichier a compresser ou decompresser : auto C'est celui par defaut. Lors de la compression, auto est equivalent a xz. Lors de la decompression, le format du fichier en entree est detecte automatiquement. Notez que les flux bruts (crees avec --format=raw) ne peuvent pas etre detectes automatiquement. xz Compresser dans le format de fichier .xz ou n'accepter que les fichiers .xz a decompresser. lzma, alone Compresser au format de fichier .lzma historique, ou n'accepter que les fichiers .lzma lors de la decompression. Le nom alternatif alone est fourni pour la retrocompatibilite avec les utilitaires LZMA. lzip 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). raw Compresser ou decompresser un flux brut (sans en-tetes). Cela est reserve seulement aux utilisateurs aguerris. Pour decoder des flux bruts, vous devez utiliser --format=raw et specifier explicitement la chaine de filtre, qui normalement aurait du etre stockee dans les en-tetes du conteneur. -C verif., --check=verif. Specifier le type d'integrite a verifier. La verification est calculee a partir des donnees non-compressees et stockees dans le fichier .xz. Cette option n'a effet que si la compression a ete faite dans le format .xz ; le format .lzma ne gere pas les verifications d'integrite. Le controle d'integrite (s'il y en a) est verifie lorsque le fichier .xz est decompresse. Types de verification pris en charge : none Ne pas calculer de verification d'integrite du tout. C'est generalement une mauvaise idee. Cela peut etre utile lorsque l'integrite des donnees est verifiee de toute facon par d'autres manieres. crc32 Calculer CRC32 en utilisant le polynome de IEEE-802.3 (Ethernet). crc64 Calculer CRC64 en utilisant le polynome de ECMA-182. C'est la maniere utilisee par defaut, car c'est legerement mieux que CRC32 pour detecter les fichiers endommages et la difference de vitesse est negligeable. sha256 Calculer SHA-256. C'est quelque peu plus lent que CRC32 et CRC64. L'integrite des en-tetes .xz est toujours verifiee avec CRC32. Il n'est pas possible de le changer ou de le desactiver. --ignore-check Ne pas controler la verification d'integrite des donnees lors de la decompression. Les valeurs CRC32 dans les en-tetes .xz seront normalement toujours verifiees. N'utilisez pas cette option a moins de savoir ce que vous faites. Les raisons possibles pour utiliser cette option : o Essayer de recuperer des donnees d'un fichier .xz corrompu. o Accelerer la decompression. Cela importe surtout avec SHA-256 ou avec les fichiers qui ont ete compresses extremement bien. Il est recommande de ne pas utiliser cette option dans ce but a moins que l'integrite du fichier ne soit verifiee exterieurement d'une autre maniere. -0 ... -9 Choisir un niveau de compression predefini. La valeur par defaut est 6. Si plusieurs niveaux de prereglage sont specifies, c'est le dernier qui sera pris en compte. Si une chaine de filtres personnalisee a deja ete choisie, definir un niveau de compression preregle efface la chaine de filtres personnalisee. Les differences entre les prereglages sont plus significatives qu'avec gzip(1) et bzip2(1). les reglages de compression selectionnes determinent les exigences en memoire pour la decompression, ainsi, utiliser un niveau de prereglage trop eleve peut rendre difficile a decompresser un fichier sur un vieux systeme avec peu de RAM. Clairement, ce n'est pas une bonne idee d'utiliser -9 aveuglement pour tout comme ca l'est souvent avec gzip(1) et bzip2(1). -0 ... -3 Ce sont des prereglages relativement rapides. 0 est parfois plus rapide que gzip -9 tout en compressant bien mieux. Les reglages plus eleves ont souvent une rapidite comparable a celle de bzip2(1) avec un taux de compression comparable ou meilleur, meme si les resultats dependent beaucoup du genre de donnees compressees. -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 memoire plus eleves pour la compression et la decompression. Ce n'est utile que lorsque les fichiers sont plus gros que 8 Mio, 16 Mio et 32 Mio respectivement. Sur le meme materiel, la vitesse de decompression est sensiblement un nombre constant d'octets de donnees compressees par seconde. En d'autres termes, meilleure est la compression, plus rapide sera en general la decompression. Cela signifie aussi que la quantite de sortie non compressee produite par seconde peut varier beaucoup. Le tableau suivant resume les caracteristiques des prereglages : Prereglage 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 : o DictSize est la taille du dictionnaire de LZMA2. Utiliser un dictionnaire plus gros que la taille du fichier non compresse est un gaspillage de memoire. C'est pourquoi il est bon d'eviter d'utiliser les prereglages de -7 a -9 lorsqu'il n'y en a pas vraiment besoin. A -6 et plus bas, la quantite de memoire gaspillee est generalement assez basse pour ne pas etre un probleme. o CompCPU est une representation des prereglages de LZMA2 qui affectent la vitesse de compression. La taille du dictionnaire aussi affecte la vitesse, alors comme CompCPU est le meme pour les niveaux de -6 a -9, les plus haut niveaux tendent a etre un peu moins rapides. Pour etre encore moins rapide et du coup obtenir peut etre une meilleure compression, consultez --extreme. o CompMem contains the compressor memory requirements in the single-threaded mode. It may vary slightly between xz versions. o DecMem contient les besoins en memoire du decompresseur. Ce sont les reglages de la compression qui determinent les besoins en memoire de la decompression. L'exacte utilisation de la memoire est legerement superieure a la taille du dictionnaire LZMA2, mais les valeurs dans la table ont ete arrondies au prochain Mio superieur. Memory requirements of the multi-threaded mode are significantly higher than that of the single-threaded mode. With the default value of --block-size, each thread needs 3*3*DictSize plus CompMem or DecMem. For example, four threads with preset -6 needs 660-670 MiB of memory. -e, --extreme Utilisez un variant plus lent que les prereglages (-0 a -9) pour esperer avoir un taux de compression legerement meilleur, mais en cas de malchance cela peut etre pire. L'utilisation memoire du decompresseur n'est pas affectee, mais l'utilisation memoire du compresseur augmente un peu aux niveaux de prereglages de -0 a -3. Depuis qu'il y a deux prereglages avec des tailles de dictionnaire de 4 Mio et 8 o, les prereglages -3e et -5e utilisent des reglages legerement plus rapides que -4e et -6e, respectivement. De cette maniere, il n'y a pas deux prereglages identiques. Prereglage 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 prereglages qui utilisent un dictionnaire de 8 Mio et qui sont dans l'ordre du plus rapide au plus lent : -5, -6, -5e et -6e. --fast --best Il y a neanmoins des alias trompeurs pour -0 et -9, respectivement. Ils ne sont fournis que pour des besoins de retro-compatibilite avec les utilitaires LZMA. Evitez d'utiliser ces options. --block-size=taille Lors de la compression dans le format .xz, les donnees de l'entree sont reparties en blocs de taille octets. Les blocs sont compresses independamment les un des autres, ce qui aide avec le mode multithread (multi-threading) et rend possible la decompression a acces aleatoire limite. Cette option est typiquement utilisee pour outrepasser la taille de bloc en mode multithread, mais cette option peut aussi etre utilisee 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. In multi-threaded mode, the sizes of the blocks are stored in the block headers. This size information is required for multi-threaded decompression. In single-threaded mode no block splitting is done by default. Setting this option doesn't affect memory usage. No size information is stored in block headers, thus files created in single-threaded mode won't be identical to files created in multi-threaded mode. The lack of size information also means that xz won't be able decompress the files in multi-threaded mode. --block-list=items When compressing to the .xz format, start a new block with an optional custom filter chain after the given intervals of uncompressed data. The items are a comma-separated list. Each item consists of an optional filter chain number between 0 and 9 followed by a colon (:) and a required size of uncompressed data. Omitting an item (two or more consecutive commas) is a shorthand to use the size and filters of the previous item. If the input file is bigger than the sum of the sizes in items, the last item is repeated until the end of the file. A special value of 0 may be used as the last size to indicate that the rest of the file should be encoded as a single block. An alternative filter chain for each block can be specified in combination with the --filters1=filters ... --filters9=filters options. These options define filter chains with an identifier between 1-9. Filter chain 0 can be used to refer to the default filter chain, which is the same as not specifying a filter chain. The filter chain identifier can be used before the uncompressed size, followed by a colon (:). For example, if one specifies --block-list=1:2MiB,3:2MiB,2:4MiB,,2MiB,0:4MiB then blocks will be created using: o The filter chain specified by --filters1 and 2 MiB input o The filter chain specified by --filters3 and 2 MiB input o The filter chain specified by --filters2 and 4 MiB input o The filter chain specified by --filters2 and 4 MiB input o The default filter chain and 2 MiB input o The default filter chain and 4 MiB input for every block until end of input. If one specifies a size that exceeds the encoder's block size (either the default value in threaded mode or the value specified with --block-size=size), the encoder will create additional blocks while keeping the boundaries specified in items. For example, if one specifies --block-size=10MiB --block-list=5MiB,10MiB,8MiB,12MiB,24MiB and the input file is 80 MiB, one will get 11 blocks: 5, 10, 8, 10, 2, 10, 10, 4, 10, 10, and 1 MiB. En mode multi-threade les tailles de blocs sont stockees dans les en-tetes du bloc. Cela ne se fait pas en mode mono-threade, la sortie encodee ne sera donc pas identique a celle faite en mode multi-threade. --flush-timeout=temps_d'attente Lors de la compression, si plus que temps_d'attente millisecondes (un entier positif) se sont ecoulees depuis le precedent vidage et que lire plus de donnees bloquerait, toutes les donnees d'entree en attente sont videes de l'encodeur et mises a disposition dans le flux de sortie. Cela peut etre utile si xz est utilise pour compresser les donnees qui sont diffusees sur un reseau. Des petites valeurs de temps_d'attente rendent les donnees disponibles a l'extremite receptrice avec un leger retard, mais les grandes valeurs de temps_d'attente donnent un meilleur taux de compression. Cette option est desactivee par defaut. Si cette option est indiquee plus d'une fois, la derniere prend effet. La valeur speciale de temps_d'attente de 0 peut etre utilisee pour explicitement desactiver cette option. Cette option n'est pas disponible sur les systemes qui ne sont pas POSIX. Cette option est encore experimentale. Actuellement, xz ne convient pas pour decompresser le flux en temps reel en raison de la facon dont xz effectue la mise en memoire tampon. --memlimit-compress=limite Indiquer une limite d'utilisation de la memoire pour la compression. Si cette option est indiquee plusieurs fois, c'est la derniere 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 etre indiquee de plusieurs facons : o La limite peut etre une valeur absolue en octets. Utiliser un suffixe d'entier comme MiB peut etre utile. Exemple : --memlimit-compress=80MiB o La limite peut etre indiquee sous forme d'un pourcentage de la memoire physique totale (RAM). Cela peut etre particulierement utile quand la variable d'environnement XZ_DEFAULTS est indiquee dans un script d'initialisation de l'interpreteur partage entre differents ordinateurs. De cette facon la limite est automatiquement plus grande sur les systemes avec plus de memoire. Exemple : --memlimit=70% o 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 memoire. --memlimit-decompress=limite Regler une limite d'utilisation de la memoire pour la decompression. Cela a un effet sur le mode --list. Si l'operation n'est pas possible sans depasser la limite, xz affichera une erreur et la decompression echouera. Voir --memlimit-compress=limite pour les manieres possibles d'indiquer la limite. --memlimit-mt-decompress=limit 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. -M limite, --memlimit=limite, --memory=limite This is equivalent to specifying --memlimit-compress=limit --memlimit-decompress=limit --memlimit-mt-decompress=limit. --no-adjust 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). -T threads, --threads=threads 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 methode de gestion avec des threads consiste a separer l'entree en blocs et de les compresser independamment les uns des autres. La taille par defaut des blocs depend du niveau de compression et peut-etre remplacee 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. The default value for threads is 0. In xz 5.4.x and older the default is 1. Chaines de filtres de compresseur personnalisees 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 chaine de filtre est comparable a une redirection (pipe) sur la ligne de commande. Lors de la compression, les entrees non compressees vont au premier filtre, dont la sortie va au prochain filtre (s'il y en a). La sortie du dernier filtre est ecrite sur le fichier compresse. Le nombre maximal de filtres dans la chaine est quatre, mais habituellement, un chaine de filtre n'a qu'un ou deux filtres. Beaucoup de filtres ont des limitations sur l'endroit ou ils peuvent se placer dans la chaine de filtre : quelques filtres ne peuvent fonctionner qu'en tant que dernier filtre dans la chaine, quelques uns en tant que non dernier filtre, et d'autres a n'importe quelle position dans la chaine. Suivant le filtre, cette limitation est soit inherente au profil du filtre, soit existe pour des raisons de securite. A custom filter chain can be specified in two different ways. The options --filters=filters and --filters1=filters ... --filters9=filters allow specifying an entire filter chain in one option using the liblzma filter string syntax. Alternatively, a filter chain can be specified by using one or more individual filter options in the order they are wanted in the filter chain. That is, the order of the individual filter options is significant! When decoding raw streams (--format=raw), the filter chain must be specified in the same order as it was specified when compressing. Any individual filter or preset options specified before the full chain option (--filters=filters) will be forgotten. Individual filters specified after the full chain option will reset the filter chain. Both the full and individual filter options take filter-specific options as a comma-separated list. Extra commas in options are ignored. Every option has a default value, so specify those you want to change. Pour voir l'entierete de la chaine de filtres et ses options, utilisez xz -vv (ce qui est comme utiliser --verbose deux fois). Cela fonctionne aussi pour voir les options de chaine de filtres utilisees par les prereglages. --filters=filters Specify the full filter chain or a preset in a single option. Each filter can be separated by spaces or two dashes (--). filters may need to be quoted on the shell command line so it is parsed as a single option. To denote options, use : or =. A preset can be prefixed with a - and followed with zero or more flags. The only supported flag is e to apply the same options as --extreme. --filters1=filters ... --filters9=filters Specify up to nine additional filter chains that can be used with --block-list. For example, when compressing an archive with executable files followed by text files, the executable part could use a filter chain with a BCJ filter and the text part only the LZMA2 filter. --filters-help Display a help message describing how to specify presets and custom filter chains in the --filters and --filters1=filters ... --filters9=filters options, and exit successfully. --lzma1[=options] --lzma2[=options] Ajouter le filtre LZMA1 ou LZMA2 a la chaine de filtres. Ces filtres ne peuvent etre utilises que comme dernier filtre dans la chaine. LZMA1 est un filtre historique, qui n'est pris en charge presque uniquement a cause de l'ancien format de fichier .lzma, qui ne prend en charge que LZMA1. LZMA2 est une version mise a jour de LZMA1 pour regler certains problemes 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 meme ensemble d'options : preset=prereglage 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. dict=taille La taille du dictionnaire (historique du tampon) indique combien d'octets des donnees recement decompressees sont gardes en memoire. L'algorithme essaie de trouver les sequences d'octets repetees (identiques) dans les donnees decompressees et les remplace par les donnees 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 compresse est un gachis de memoire. Generalement la taille du dictionnaire est entre 64 Kio et 64 Mio. Le minimum etant 4 Kio. La taille maximale pour la compression est habituellement 1,5 Gio (1536 Mio). Le decompresseur prend en charge les dictionnaires jusqu'a 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) determinent ensemble l'utilisation de la memoire de l'encodeur LZMA1 ou LZMA2. La meme (ou une plus grosse) taille de dictionnaire est requise pour decompresser que ce qui a ete utilise pour la compression, ainsi l'utilisation de la memoire du decodeur est determinee par la taille du dictionnaire utilisee lors de la compression. Les en-tetes 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 preferees pour la compression. Les autres tailles seront arrondies a la hausse lorsque stockees dans les en-tetes de .xz. lc=lc Specifiez le nombre d'octets de contexte litteraux. Le minimum est 0 et le maximum est 4. La valeur par defaut est 3. En plus, la somme de lc et lp ne doit pas exceder 4. Tous les octets qui ne peuvent pas etre codes comme des correspondances sont codes comme des litteraux. C'est a dire que les litteraux sont simplement des octets 8 bits encodes un a 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. lp=lp Indiquer le nombre de bits de position litterale. Le minimum est 0 et le maximum 4; par defaut c'est 0. Lp affecte le type d'alignement dans les donnees decompressees qui est presume lors de l'encodage des litteraux. Voir pb ci dessous pour plus d'information sur l'alignement. pb=pb Indiquer le nombre de bits de position. Le minimum est 0 et le maximum 4; par defaut 2. Pb affecte quel genre d'alignement est presume en general dans les donnees non compressees. Par defaut c'est un alignement de quatre octets (2^pb=2^2=4), ce qui est generalement 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. Meme si l'alignement presume peut etre ajuste avec pb et lp, LZMA1 et LZMA2 favorisent toujours legerement l'alignement sur 16 octets. Il peut etre utile d'en tenir compte lors de la conception de formats de fichiers susceptibles d'etre souvent compresses avec LZMA1 ou LZMA2. mf=mf 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 memoire ci-dessous sont des approximations grossieres qui sont les plus proches de la realite lorsque dict est une puissance de deux. hc3 Chaine de hachage avec hachage de 2 et 3 octets Valeur minimale pour nice : 3 Utilisation de la memoire : dict * 7.5 (if dict <= 16 Mio); dict * 5.5 + 64 MiB (si dict > 16 Mio) hc4 Chaine de hachage avec hachage de 2, 3 et 4 octets Valeur minimale pour nice : 4 Utilisation de la memoire : dict * 7.5 (si dict <= 32 Mio); dict * 6.5 (si dict > 32 Mio) bt2 Arbre binaire avec hachage de 2 octets Valeur minimale pour nice : 2 Utilisation de la memoire : dict * 9.5 bt3 Arbre binaire avec hachage de 2 et 3 octets Valeur minimale pour nice : 3 Utilisation de la memoire : dict * 11.5 (si dict <= 16 Mio); dict * 9.5 + 64 MiB (si dict > 16 Mio) bt4 Arbre binaire avec hachage 2, 3 et 4 octets Valeur minimale pour nice : 4 Utilisation de la memoire : dict * 11.5 (si dict <= 32 Mio); dict * 10.5 (si dict > 32 Mio) mode=mode 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 utilise avec les chercheurs de correspondance de chaine de hachage et normal avec les chercheurs de correspondance d'arbre binaire. C'est aussi ce que font les prereglages. nice=nice Specifier ce qui est considere comme une bonne longueur pour une correspondance. Une fois que la correspondance d'au moins nice octets est trouvee, l'algorithme arrete 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. depth=profondeur Specifier la profondeur de recherche maximale dans l'outil de recherche de correspondances. La valeur par defaut est 0, ce qui fait que le compresseur determine 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 decodage des flux bruts (--format=raw), LZMA2 necessite seulement la taille du dictionnaire. LZMA1 necessite aussi lc, lp et pb. --x86[=options] --arm[=options] --armthumb[=options] --arm64[=options] --powerpc[=options] --ia64[=options] --sparc[=options] --riscv[=options] Ajouter un filtre branch/call/jump (BCJ) a la chaine de filtres. Ces filtres ne peuvent etre utilises que s'ils ne sont pas le dernier filtre de la chaine 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 presentent des problemes connus lies au taux de compression : o 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. o 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 RISC-V 2 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. Examples: o IA-64 filter has 16-byte alignment so pb=4,lp=4,lc=0 is good with LZMA2 (2^4=16). o RISC-V code has 2-byte or 4-byte alignment depending on whether the file contains 16-bit compressed instructions (the C extension). When 16-bit instructions are used, pb=2,lp=1,lc=3 or pb=1,lp=1,lc=3 is good. When 16-bit instructions aren't present, pb=2,lp=2,lc=2 is the best. readelf -h can be used to check if "RVC" appears on the "Flags" line. o ARM64 is always 4-byte aligned so pb=2,lp=2,lc=2 is the best. o The x86 filter is an exception. It's usually good to stick to LZMA2's defaults (pb=2,lp=0,lc=3) when compressing x86 executables. Tous les filtres BCJ prennent en charge les memes options : start=decalage Specifier le decalage de depart qui est utilise lors de la conversion entre les adresses relatives et absolues. Le decalage doit etre un multiple de l'alignement du filtre (voir la table ci-dessus). Sa valeur par defaut est zero. En pratique, cette derniere convient ; indiquer un decalage personnalise est la plupart du temps inutile. --delta[=options] Ajouter le filtre Delta a la chaine de filtres. Le filtre Delta ne peut etre utilise que s'il n'est pas le dernier filtre dans la chaine. 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 : dist=distance 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 entree huit octets A1 B1 A2 B3 A3 B5 A4 B7, la sortie sera A1 B1 01 02 01 02 01 02. Autres options -q, --quiet 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, meme si un avertissement etait supprime, le statut de sortie indiquant un avertissement sera encore utilise. -v, --verbose Etre bavard. Si l'erreur standard est connectee a 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 : o Le pourcentage de completion est montre si la taille du fichier en entree est connue. Neanmoins, le pourcentage ne peut pas etre montre en cas de redirection. o Quantite de donnees compressees produites (compression) ou consommees (decompression). o Quantite de donnees non compressees consommees (compression) ou produites (decompression). o Le taux de compression, calcule en divisant la quantite de donnees compressees deja traitees par la quantite de donnees decompressees deja traitees. o Vitesse de compression ou de decompression. Elle correspond a la quantite de donnees non compressees consommees (compression) ou produites (decompression) par seconde. Elle apparait quelques secondes apres le debut du traitement du fichier par xz. o Temps ecoule dans le format M:SS ou H:MM:SS. o 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. -Q, --no-warn Ne pas mettre l'etat de sortie a 2 meme si une condition meritant un avertissement a ete detectee. Cette option n'affecte pas le niveau de verbosite, neanmoins, les deux options --quiet et --no-warn doivent etre utilisees pour ne pas afficher d'avertissements, ni alterer le statut de sortie. --robot Afficher les messages dans un format analysable par une machine. Ceci est destine a faciliter l'ecriture des frontaux qui voudraient utiliser xz plutot que liblzma, ce qui pourrait etre le cas pour differents scripts. La sortie avec cette option activee est destinee a rester stable sur les differentes versions de xz. Consulter le paragraphe ROBOT MODE pour les details. --info-memory 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. -h, --help Afficher un message d'aide decrivant les options les plus couramment utilisees et quitter. -H, --long-help Afficher un message d'aide decrivant toutes les options de xz et quitter. -V, --version Afficher le numero de version de xz et de liblzma dans un format lisible par un humain. Pour obtenir une sortie analysable par la machine, specifiez --robot avant --version. MODE ROBOT The robot mode is activated with the --robot option. It makes the output of xz easier to parse by other programs. Currently --robot is supported only together with --list, --filters-help, --info-memory, and --version. It will be supported for compression and decompression in the future. Mode liste xz --robot --list utilise une sortie separee par des tabulations. La premiere colonne de toutes les lignes possede une chaine qui indique le type d'information trouvee sur cette ligne : name C'est toujours la premiere ligne au debut de la liste d'un fichier. La seconde colonne de la ligne est le nom de fichier. file Cette ligne contient l'information globale sur le fichier .xz. Cette ligne est toujours ecrite apres la ligne name. stream Ce type de ligne n'est utilisee que lorsque --verbose a ete indiquee. Il y a autant de lignes stream qu'il y a de flux dans le fichier .xz. block Ce type de ligne n'est utilise seulement lorsque --verbose a ete indiquee. Il y a autant de lignes block qu'il y a de blocs dans le fichier .xz. Les lignes block sont affichees apres toutes les lignes stream ; les differents types de lignes ne sont pas imbriques. summary Ce type de ligne n'est utilise que lorsque --verbose a ete indique deux fois. Cette ligne est affichee apres toutes les lignes block. Comme la ligne file, la ligne summary contient l'information globale sur le fichier .xz. totals Cette ligne est toujours la toute derniere 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 compressee du fichier 5. Taille decompressee 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 controles d'integrite separes par des virgules. Les chaines suivantes sont utilisees pour les types de verification connus : None, CRC32, CRC64 et SHA256. Pour le types de verification inconnus, Unknown-N est utilise, ou N est un identifiant de verification sous la forme d'un nombre decimal (un ou deux chiffres). 8. Taille totale du remplissage du flux dans le fichier Les colonnes des lignes stream : 2. Numero de flux (le premier flux a le numero 1) 3. Nombre de blocs dans le flux 4. Decalage de depart compresse 5. Decalage de depart decompresse 6. Taille compressee (ne comprend pas le remplissage du flux) 7. Taille decompressee 8. Taux de compression 9. Nom de la verification d'integrite 10. Taille du remplissage de flux Les colonnes des lignes block : 2. Numero du flux qui contient ce bloc 3. Numero du bloc relatif au commencement du flux (le premier bloc a pour numero 1) 4. Numero du bloc relatif au debut du fichier 5. Decalage de depart compresse relatif au debut du fichier 6. Decalage de depart decompresse relatif au debut du fichier 7. Taille compressee totale du bloc (en-tetes inclus) 8. Taille decompressee 9. Taux de compression 10. Nom de la verification d'integrite Si --verbose a ete indique deux fois, les colonnes additionnelles sont inclues sur les lignes block. Elles ne sont pas affichees avec un seul --verbose, car l'obtention de ces informations necessite de nombreuses recherches et peut donc etre lente : 11. Valeur de la verification d'integrite en hexadecimal 12. Taille d'en-tete de bloc 13. Drapeaux du bloc : c indique que la taille compressee est presente, et u indique que la taille decompressee est presente. Si le drapeau n'est pas indique, un tiret (-) est affiche a la place pour que la longueur de la chaine reste fixe. De nouveaux drapeaux pourraient etre ajoutes a la fin de la chaine dans le futur. 14. Taille des donnees effectivement compressees dans le bloc (en excluant l'en-tete de bloc, le remplissage de bloc et les champs de verification). 15. Quantite de memoire (en octets) necessaire pour decompresser ce bloc avec cette version de xz. 16. Chaine de filtrage. Remarquez que la plupart des options utilisees au moment de la compression ne peuvent pas etre connues, car seules les options necessaires pour la decompression sont stockees dans les en-tetes .xz. Les colonnes des lignes summary : 2. Quantite de memoire (en octets) necessaire pour decompresser ce fichier avec cette version de xz. 3. yes ou no indique si tous les en-tetes de bloc stockent a la fois la taille compressee et la taille decompressee. Depuis xz 5.1.2alpha: 4. Version minimale de xz necessaire pour decompresser le fichier. Les colonnes de la ligne totals : 2. Nombre de flux 3. Nombre de blocs 4. Taille compressee 5. Taille decompressee 6. Taux de compression moyen 7. Liste separee par des virgules des noms de verification d'integrite qui etaient presents dans les fichiers 8. Taille de remplissage de flux 9. Nombre de fichiers. Permet de garder l'ordre des colonnes precedentes comme sur les lignes file. Si --verbose a ete indique deux fois, des colonnes supplementaires sont incluses sur la ligne totals : 10. Quantite maximale de memoire (en octets) necessaire pour decompresser les fichiers avec cette version de xz. 11. yes ou no indique si tous les en-tetes de bloc stockent a la fois la taille compressee et la taille decompressee. Depuis xz 5.1.2alpha: 12. Version minimale de xz necessaire pour decompresser le fichier. Les versions futures pourront ajouter de nouveaux types de lignes et de nouvelles colonnes pourront etre ajoutees aux types de lignes existants, mais les colonnes existantes ne seront pas modifiees. Filters help xz --robot --filters-help prints the supported filters in the following format: filter:option=,option=... filter Name of the filter option Name of a filter specific option value Numeric value ranges appear as . String value choices are shown within < > and separated by a | character. Each filter is printed on its own line. Information de limite de memoire xz --robot --info-memory prints a single line with multiple tab-separated columns: 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. Version xz --robot --version prints the version number of xz and liblzma in the following format: XZ_VERSION=XYYYZZZS LIBLZMA_VERSION=XYYYZZZS X Version majeure. YYY Version mineure. Les numeros pairs sont stables. Les numeros impairs sont des versions alpha ou beta. ZZZ Niveau de correctif pour les options stables ou juste un compteur pour les options de developpement. S Stabilite. 0 est alpha, 1 est beta et 2 est stable. S devrait toujours etre 2 quand YYY est pair. XYYYZZZS sont identiques sur les deux lignes si xz et liblzma sont issus de la meme version d'utilitaires XZ. Exemples : 4.999.9beta est 49990091 et 5.0.0 est 50000002. STATUT DE SORTIE 0 Tout est bon. 1 Une erreur est survenue. 2 Quelquechose meritant un avertissement s'est produit, mais aucune erreur veritable n'est survenue. Les notifications (pas les avertissements ou les erreurs) affichees sur l'erreur standard n'affectent pas le statut de sortie. ENVIRONNEMENT xz analyse les listes d'options separees par des espaces a 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 analysees depuis l'environnement des variables ; toutes les non-options sont ignorees silencieusement. L'analyse est faite avec getopt_long(3) qui est aussi utilise pour les arguments de la ligne de commandes. XZ_DEFAULTS Options par defaut propres a l'utilisateur ou pour tout le systeme. Elles sont le plus souvent definies dans un script d'initialisation de l'interpreteur pour activer le limiteur d'utilisation de la memoire de xz par defaut. A part pour les scripts d'initialisation de l'interpreteur ou des cas similaires, les sripts ne doivent jamais definir ou desactiver XZ_DEFAULTS. XZ_OPT 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 Compatibilite 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 trouves 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 incompatibilites qui peuvent parfois poser des problemes. Niveaux de prereglage de la compression La numerotation des prereglages de niveau de compression est differente entre les outils xz et LZMA. La difference la plus importante est la maniere dont les tailles de dictionnaire sont affectees aux differents prereglages. La taille de dictionnaire est a peu pres egale a celle d'utilisation de la memoire de la decompression. 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 differences de tailles des dictionnaires affectent aussi l'utilisation de la memoire du compresseur, mais il y a quelques autres differences entre les outils LZMA et les outils XZ, qui rendent la difference 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 prereglage par defaut 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 defaut. 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 decompression des fichiers .lzma avec ou sans marqueur de fin de charge utile, mais tous les fichiers .lzma crees par xz utiliseront un marqueur de fin de charge utile et ont la taille non compressee marquee comme inconnue dans l'en-tete .lzma. Cela peut etre un probleme dans quelques situations inhabituelles. Par exemple, un decompresseur .lzma dans un peripherique embarque pourrait ne fonctionner qu'avec des fichiers dont la taille non comprimee est connue. Si vous vous heurtez a ce probleme, vous devez utiliser les utilitaires LZMA ou LZMA SDK pour creer des fichiers .lzma avec une taille non compressee connue. Fichiers .lzma non pris en charge Le format .lzma autorise des valeurs lc jusqu'a 8, et des valeurs lp jusqu'a 4. Les outils LZMA peuvent decompresser des fichiers avec tous les lc et lp, mais creez toujours les fichiers avec lc=3 et lp=0. Creer des fichiers avec d'autres valeurs lc et lp est possible avec xz et avec LZMA SDK. L'implementation du filtre LZMA1 dans liblzma necessite que la somme de lc et lp soit inferieure ou egale a 4. Ainsi, les fichiers .lzma qui excedent cette limitation ne peuvent pas etre decompresses avec xz. Les outils LZMA creent 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 detection des fichiers .lzma. Ces limitations ne devraient pas poser probleme en pratique, car pratiquement tous les fichiers .lzma ont ete compresses avec des reglages que liblzma accepte. Dechets excedentaires Lors de la decompession, l'utilitaire LZMA ignore silencieusement tout ce qui est apres le premier flux .lzma. Dans la majorite des situations, c'est un bogue. Cela veut dire aussi que les outils LZMA ne gerent pas la decompression de fichiers .lzma concatenes. S'il reste des donnees apres le premier flux .lzma, xz considere que le fichier est corrompu sauf si --single-stream a ete utilise. Cela peut casser des scripts obscurs qui ont suppose que les dechets de fin de ligne sont ignores. NOTES La sortie compressee peut varier La sortie compressee exacte produite par les meme fichiers non compresses en entree peut varier en fonction des differentes versions de l'utilitaire XZ, meme si les options de compression sont identiques. En effet, il est possible d'ameliorer l'encodeur (compression plus rapide ou meilleure) sans affecter le format du fichier. La sortie peut meme varier entre differentes compilations de la meme version d'utilitaire XZ, si des options de construction differentes sont utilisees. Cela signifie qu'une fois que --rsyncable a ete implemente, les fichiers resultants ne seront pas necessairement synchronisables avec rsync a moins que les nouveaux et anciens fichiers n'aient ete compresses avec la meme version de xz. Ce probleme peut etre resolu si une partie de l'implementation est gelee pour garantir la stabilite de la sortie rsyncable a travers les versions de xz. Decompresseurs .xz embarques Les implementations de decompresseur embarque comme XZ Embedded ne gerent pas necessairement les fichiers crees avec d'autres types de verification d'integrite que none et CRC32. Comme la valeur par defaut est --check=crc64, vous devez utiliser --check=none ou --check=crc32 lors de la creation de fichiers pour les systemes embarques. En dehors des systemes embarques, tous les decompresseurs de format .xz gerent tous les types de verification ou sont au moins capables de decompresser le fichier sans effectuer la verification d'integrite si ce type de verification particuliere n'est pas pris en charge. XZ Embedded prend en charge les filtres BCJ, mais seulement avec le decalage de depart par defaut. EXEMPLES Bases Compresser le fichier toto en toto.xz en utilisant le niveau de compression par defaut (-6) et supprimer toto si la compression reussit : xz toto Decompresser bidule.xz en bidule et ne pas supprimer bidule.xz meme si la compression reussit : 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 melange de fichiers compresses et non compresses peuvent etre decompresses vers la sortie standard avec une simple commande : xz -dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt Compression en parallele de plusieurs fichiers Sur GNU et *BSD, find(1) et xargs(1) peuvent etre utilises pour mettre en parallele la compression de plusieurs fichiers : find . -type f \! -name '*.xz' -print0 \ | xargs -0r -P4 -n16 xz -T1 L'option P passee a xargs(1) fixe le nombre de processus xz en paralleles. La meilleure valeur pour l'option n depend du nombre de fichiers a compresser. S-il n'y a que quelques fichiers, la valeur sera probablement 1 ; avec des dizaines de milliers de fichiers, 100 ou meme plus serait approprie pour reduire le nombre de processus xz que xargs(1) creera eventuellement. L'option -T1 de xz est la pour le forcer en mode mono-thread, car xargs(1) est utilise pour controler la quantite de mise en parallele. Mode robot Calculer combien d'octets ont ete economises au total apres avoir compresse plusieurs fichiers : xz --robot --list *.xz | awk '/^totals/{print $5-$4}' Un script peut vouloir savoir qu'il utilise une version suffisamment recente de xz. Le script sh(1) suivant verifie que le numero de version de l'outil xz soit au minimum 5.0.0. Cette methode est compatible avec les vieilles versions beta, qui ne gerent 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 Regler une limite d'utilisation de la memoire pour la decompression en utilisant XZ_OPT, mais si une limite a deja ete definie, 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 Chaines de filtres de compresseur personnalisees L'utilisation la plus simple des chaines de filtres personnalisees est la personnalisation d'un prereglage LZMA2. Cela peut etre utile, car les prereglages ne couvrent qu'un sous-ensemble des reglages de compression potentiellement utiles. Les colonnes CompCPU des tableaux des descriptions des options -0 a -9 et --extreme sont utiles lors de la personnalisation des prereglages LZMA2. Voici les parties pertinentes recueillies a partir de ces deux tableaux : Prereglage 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 etre plus rapide que xz-6 tout en compressant bien mieux. Cependant, il faut souligner que seuls certains fichiers beneficient d'un grand dictionnaire tout en gardant la valeur de CompCPU faible. La siutation la plus evidente ou un gros dictionnaire peut baucoup aider, est une archive contenant des fichiers tres similaires de quelques megaoctets chacun. La taille de dictionnaire doit etre significativement plus grosse que tout fichier individuel pour permettre a LZMA2 de tirer pleinement partie des similarites entre des fichiers consecutifs. Si une utilisation de la memoire elevee pour la compression et decompression convient, et que le fichier a compresser a une taille de plusieurs centaines de megaoctets, il peut etre 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 etre utile pour voir les besoins en memoire du compresseur et du decompresseur. Rappelez-vous qu'utiliser un dictionnaire plus gros que la taille du fichier non compresse est un gachis de memoire, 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 indique apres --lzma2, xz donnera une erreur, car il ne peut y avoir aucun filtre apres LZMA2, et aussi parce que le filtre BCJ x86 ne peut pas etre utilise comme dernier filtre dans la chaine. Le filtre Delta associe a LZMA2 peut donner de bons resultats avec les images bitmap. Cela devrait habituellement battre PNG, qui a quelques filtres avances supplementaires 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 Utils: XZ Embedded: LZMA SDK: Tukaani 2024-02-25 XZ(1)