XZ(1) XZ Utils XZ(1) NOME xz, unxz, xzcat, lzma, unlzma, lzcat - Compacta ou descompacta arquivos .xz e .lzma SINOPSE xz [opcao...] [arquivo...] COMANDOS APELIDOS unxz e equivalente a xz --decompress. xzcat e equivalente a xz --decompress --stdout. lzma e equivalente a xz --format=lzma. unlzma e equivalente a xz --format=lzma --decompress. lzcat e equivalente a xz --format=lzma --decompress --stdout. Ao escrever scripts que precisam descompactar arquivos, e recomendavel sempre usar o nome xz com os argumentos apropriados (xz -d ou xz -dc) em vez dos nomes unxz e xzcat. DESCRICAO xz e uma ferramenta de compactacao de dados de uso geral com sintaxe de linha de comando semelhante ao gzip(1) e ao bzip2(1). O formato de arquivo nativo e o formato .xz, mas o formato legado .lzma usado por LZMA Utils e fluxos compactados brutos sem cabecalhos de formato de conteiner tambem sao suportados. Alem disso, a descompactacao do formato .lz usado por lzip e suportada. xz compacta ou descompacta cada arquivo de acordo com o modo de operacao selecionado. Se nenhum arquivo for fornecido ou arquivo for -, xz le da entrada padrao e grava os dados processados na saida padrao. xz recusara (exibira um erro e ignorara o arquivo) para gravar dados compactados na saida padrao se for um terminal. Da mesma forma, xz se recusara a ler dados compactados da entrada padrao se for um terminal. A menos que --stdout seja especificado, arquivos diferentes de - sao gravados em um novo arquivo cujo nome e derivado do nome arquivo de origem: o Ao compactar, o sufixo do formato de arquivo de destino (.xz ou .lzma) e anexado ao nome do arquivo de origem para obter o nome do arquivo de destino. o Ao descompactar, o sufixo .xz, .lzma ou .lz e removido do nome do arquivo para obter o nome do arquivo de destino. xz tambem reconhece os sufixos .txz e .tlz e os substitui pelo sufixo .tar. Se o arquivo de destino ja existir, um erro sera exibido e arquivo sera ignorado. A menos que grave na saida padrao, xz exibira um aviso e pulara o arquivo se qualquer um dos seguintes se aplicar: o Arquivo nao e um arquivo normal. Links simbolicos nao sao seguidos e, portanto, nao sao considerados arquivos comuns. o Arquivo tem mais de um link fisico. o File tem setuid, setgid ou sticky bit definido. o O modo de operacao esta definido para compactar e o arquivo ja possui um sufixo do formato de arquivo de destino (.xz ou .txz ao compactar para o formato .xz e .lzma ou .tlz ao compactar para o formato .lzma). o O modo de operacao esta definido para descompactar e o arquivo nao possui um sufixo de nenhum dos formatos de arquivo suportados (.xz, .txz, .lzma, .tlz , ou .lz). Depois de compactar ou descompactar com exito o arquivo, o xz copia o dono, grupo, permissoes, horario de acesso e horario de modificacao do arquivo de origem para o arquivo de destino. Se a copia do grupo falhar, as permissoes serao modificadas para que o arquivo de destino nao se torne acessivel a usuarios que nao tem permissao para acessar o arquivo de origem. xz ainda nao oferece suporte a copia de outros metadados, como listas de controle de acesso ou atributos estendidos. Depois que o arquivo de destino for fechado com exito, o arquivo de origem sera removido, a menos que --keep tenha sido especificado. O arquivo de origem nunca e removido se a saida for gravada na saida padrao ou se ocorrer um erro. O envio de SIGINFO ou SIGUSR1 para o processo do xz faz com que ele imprima informacoes de andamento para erro padrao. Isso tem uso limitado, pois quando o erro padrao e um terminal, usar --verbose exibira um indicador de progresso de atualizacao automatica. Uso de memoria O uso de memoria de xz varia de algumas centenas de kilobytes a varios gigabytes, dependendo das configuracoes de compactacao. As configuracoes usadas ao compactar um arquivo determinam os requisitos de memoria do descompactador. Normalmente, o descompactador precisa de 5 % a 20 % da quantidade de memoria que o compactador precisou ao criar o arquivo. Por exemplo, descompactar um arquivo criado com xz -9 atualmente requer 65 MiB de memoria. Ainda assim, e possivel ter arquivos .xz que requerem varios gigabytes de memoria para descompactar. Especialmente os usuarios de sistemas mais antigos podem achar irritante a possibilidade de uso de memoria muito grande. Para evitar surpresas desconfortaveis, o xz possui um limitador de uso de memoria embutido, que esta desabilitado por padrao. Embora alguns sistemas operacionais fornecam maneiras de limitar o uso de memoria dos processos, confiar nele nao foi considerado flexivel o suficiente (por exemplo, usar ulimit(1) para limitar a memoria virtual tende a prejudicar mmap(2)). O limitador de uso de memoria pode ser ativado com a opcao de linha de comando --memlimit=limite. Geralmente e mais conveniente habilitar o limitador por padrao definindo a variavel de ambiente XZ_DEFAULTS, por exemplo, XZ_DEFAULTS=--memlimit=150MiB. E possivel definir os limites separadamente para compactacao e descompactacao usando --memlimit-compress=limite e --memlimit-decompress=limite. Usar essas duas opcoes fora de XZ_DEFAULTS raramente e util porque uma unica execucao de xz nao pode fazer compactacao e descompactacao e --memlimit=limite (ou -M limite ) e mais curto para digitar na linha de comando. Se o limite de uso de memoria especificado for excedido durante a descompactacao, xz exibira um erro e a descompactacao do arquivo falhara. Se o limite for excedido durante a compactacao, xz tentara reduzir as configuracoes para que o limite nao seja mais excedido (exceto ao usar --format=raw ou --no-adjust). Dessa forma, a operacao nao falhara, a menos que o limite seja muito pequeno. A escala das configuracoes e feita em etapas que nao correspondem as predefinicoes do nivel de compactacao, por exemplo, se o limite for apenas um pouco menor que o valor necessario para xz -9, as configuracoes serao reduzidas apenas um pouco , nao ate xz -8. Concatenacao e preenchimento com arquivos .xz E possivel concatenar arquivos .xz como estao. xz ira descompactar tais arquivos como se fossem um unico arquivo .xz. E possivel inserir preenchimento entre as partes concatenadas ou apos a ultima parte. O preenchimento deve consistir em bytes nulos e o tamanho do preenchimento deve ser um multiplo de quatro bytes. Isso pode ser util, por exemplo, se o arquivo .xz for armazenado em uma midia que mede tamanhos de arquivo em blocos de 512 bytes. Concatenacao e preenchimento nao sao permitidos com arquivos .lzma ou fluxos brutos. OPCOES Sufixos inteiros e valores especiais Na maioria dos lugares onde um argumento inteiro e esperado, um sufixo opcional e suportado para indicar facilmente numeros inteiros grandes. Nao deve haver espaco entre o numero inteiro e o sufixo. KiB Multiplica o inteiro por 1.024 (2^10). Ki, k, kB, K e KB sao aceitos como sinonimos de KiB. MiB Multiplica o numero inteiro por 1.048.576 (2^20). Mi, m, M e MB sao aceitos como sinonimos de MiB. GiB Multiplica o numero inteiro por 1.073.741.824 (2^30). Gi, g, G e GB sao aceitos como sinonimos de GiB. O valor especial max pode ser usado para indicar o valor inteiro maximo suportado pela opcao. Modo de operacao Se varias opcoes de modo de operacao forem dadas, a ultima entrara em vigor. -z, --compress Compacta. Este e o modo de operacao padrao quando nenhuma opcao de modo de operacao e especificada e nenhum outro modo de operacao esta implicito no nome do comando (por exemplo, unxz implica em --decompress). -d, --decompress, --uncompress Descompacta. -t, --test Testa a integridade de arquivos compactados. Esta opcao e equivalente a --decompress --stdout exceto que os dados descompactados sao descartados em vez de serem gravados na saida padrao. Nenhum arquivo e criado ou removido. -l, --list Imprime informacoes sobre arquivos compactados. Nenhuma saida descompactada e produzida e nenhum arquivo e criado ou removido. No modo de lista, o programa nao pode ler os dados compactados da entrada padrao ou de outras fontes nao pesquisaveis. A listagem padrao mostra informacoes basicas sobre arquivos, um arquivo por linha. Para obter informacoes mais detalhadas, use tambem a opcao --verbose. Para obter ainda mais informacoes, use --verbose duas vezes, mas observe que isso pode ser lento, porque obter todas as informacoes extras requer muitas buscas. A largura da saida detalhada excede 80 caracteres, portanto, canalizar a saida para, por exemplo, less -S pode ser conveniente se o terminal nao tiver largura o suficiente. A saida exata pode variar entre versoes xz e localidades diferentes. Para saida legivel por maquina, --robot --list deve ser usado. Modificadores de operacao -k, --keep Nao exclui os arquivos de entrada. Desde xz 5.2.6, esta opcao tambem faz xz compactar ou descompactar mesmo se a entrada for um link simbolico para um arquivo comum, tiver mais de um link fisico ou tiver o setuid, setgid ou sticky bit definir. Os bits setuid, setgid e sticky nao sao copiados para o arquivo de destino. Nas versoes anteriores, isso era feito apenas com --force. -f, --force Esta opcao tem varios efeitos: o Se o arquivo de destino ja existir, o exclui antes de compactar ou descompactar. o Compacta ou descompacta, mesmo que a entrada seja um link simbolico para um arquivo normal, tenha mais de um link fisico ou tenha setuid, setgid ou sticky bit definido. Os bits setuid, setgid e sticky nao sao copiados para o arquivo de destino. o Quando usado com --decompress --stdout e xz nao consegue reconhecer o tipo do arquivo de origem, copia o arquivo de origem como esta na saida padrao. Isso permite que xzcat --force seja usado como cat(1) para arquivos que nao foram compactados com xz. Observe que, no futuro, o xz pode oferecer suporte a novos formatos de arquivo compactado, o que pode fazer com que o xz descompacte mais tipos de arquivos em vez de copia-los como na saida padrao. --format=formato pode ser usado para restringir xz para descompactar apenas um unico formato de arquivo. -c, --stdout, --to-stdout Grava os dados compactados ou descompactados na saida padrao em vez de em um arquivo. Isso implica em --keep. --single-stream Descompacta apenas o primeiro fluxo de .xz e ignora silenciosamente possiveis dados de entrada restantes apos o fluxo. Normalmente, esse restante posterior sem uso faz com que xz exiba um erro. xz nunca descompacta mais de um fluxo de arquivos .lzma ou fluxos brutos, mas esta opcao ainda faz xz ignorar os possiveis dados posteriores apos o arquivo .lzma ou fluxo bruto. Esta opcao nao tem efeito se o modo de operacao nao for --decompress ou --test. --no-sparse Desativa a criacao de arquivos esparsos. Por padrao, ao descompactar em um arquivo normal, xz tenta tornar o arquivo esparso se os dados descompactados contiverem longas sequencias de zeros binarios. Ele tambem funciona ao gravar na saida padrao, desde que a saida padrao esteja conectada a um arquivo normal e certas condicoes adicionais sejam atendidas para torna-la segura. A criacao de arquivos esparsos pode economizar espaco em disco e acelerar a descompactacao, reduzindo a quantidade de E/S do disco. -S .suf, --suffix=.suf Ao compactar, usa .suf como sufixo para o arquivo de destino em vez de .xz ou .lzma. Se nao estiver gravando na saida padrao e o arquivo de origem ja tiver o sufixo .suf, um aviso sera exibido e o arquivo sera ignorado. Ao descompactar, reconhece arquivos com o sufixo .suf alem de arquivos com o sufixo .xz, .txz, .lzma, .tlz ou .lz . Se o arquivo de origem tiver o sufixo .suf, o sufixo sera removido para obter o nome do arquivo de destino. Ao compactar ou descompactar fluxos brutos (--format=raw), o sufixo sempre deve ser especificado, a menos que seja gravado na saida padrao, porque nao ha sufixo padrao para fluxos brutos. --files[=arquivo] Le os nomes dos arquivos a serem processados em arquivo; se arquivo for omitido, os nomes dos arquivos serao lidos da entrada padrao. Os nomes de arquivo devem terminar com o caractere de nova linha. Um traco (-) e considerado um nome de arquivo regular; nao significa entrada padrao. Se os nomes de arquivo forem fornecidos tambem como argumentos de linha de comando, eles serao processados antes da leitura dos nomes de arquivo de arquivo. --files0[=arquivo] Isso e identico a --files[=arquivo], exceto que cada nome de arquivo deve ser finalizado com o caractere nulo. Opcoes basicas de formato de arquivo e de compactacao -F formato, --format=formato Especifica o formato de arquivo para compactar ou descompactar: auto Este e o padrao. Ao compactar, auto e equivalente a xz. Ao descompactar, o formato do arquivo de entrada e detectado automaticamente. Observe que os fluxos brutos (criados com --format=raw) nao podem ser detectados automaticamente. xz Compacta no formato de arquivo .xz ou aceite apenas arquivos .xz ao descompactar. lzma, alone Compacta no formato de arquivo legado .lzma ou aceite apenas arquivos .lzma ao descompactar. O nome alternativo alone e fornecido para compatibilidade com versoes anteriores do LZMA Utils. lzip Aceita apenas arquivos .lz ao descompactar. Sem suporte a compactacao. O formato .lz versao 0 e a versao nao estendida 1 sao suportados. Os arquivos da versao 0 foram produzidos por lzip 1.3 e anteriores. Esses arquivos nao sao comuns, mas podem ser encontrados em arquivos compactados, pois alguns pacotes de origem foram lancados nesse formato. As pessoas tambem podem ter arquivos pessoais antigos neste formato. O suporte de descompactacao para o formato versao 0 foi removido em lzip 1.18. lzip 1.4 e posteriores criam arquivos no formato versao 1. A extensao do marcador de descarga de sincronizacao para o formato versao 1 foi adicionada em lzip 1.6. Esta extensao raramente e usada e nao e suportada por xz (diagnosticada como entrada corrompida). raw Compacta ou descompacta um fluxo bruto (sem cabecalhos). Isso e destinado apenas a usuarios avancados. Para decodificar fluxos brutos, voce precisa usar --format=raw e especificar explicitamente a cadeia de filtros, que normalmente seria armazenada nos cabecalhos do conteiner. -C verificacao, --check=verificacao Especifica o tipo de verificacao de integridade. A verificacao e calculada a partir dos dados descompactados e armazenados no arquivo .xz. Esta opcao tem efeito somente ao compactar no formato .xz; o formato .lzma nao oferece suporte a verificacoes de integridade. A verificacao de integridade (se for o caso) e verificada quando o arquivo .xz e descompactado. Tipos de verificacao suportados: none Nao calcula uma verificacao de integridade. Isso geralmente e uma ma ideia. Pode ser util quando a integridade dos dados e verificada por outros meios. crc32 Calcula CRC32 usando o polinomio do IEEE-802.3 (Ethernet). crc64 Calcula CRC64 usando o polinomio de ECMA-182. Este e o padrao, pois e um pouco melhor que o CRC32 na deteccao de arquivos danificados e a diferenca de velocidade e insignificante. sha256 Calcula SHA-256. Isso e um pouco mais lento do que CRC32 e CRC64. A integridade dos cabecalhos de .xz e sempre verificada com CRC32. Nao e possivel altera-la ou desativa-la. --ignore-check Nao confere a verificacao de integridade dos dados compactados ao descompactar. Os valores CRC32 nos cabecalhos .xz ainda serao conferidos normalmente. Nao use esta opcao a menos que saiba o que esta fazendo. Possiveis razoes para usar esta opcao: o Tentativa de recuperar dados de um arquivo .xz corrompido. o Acelerar a descompactacao. Isso e importante principalmente com SHA-256 ou com arquivos extremamente bem compactados. E recomendavel nao usar essa opcao para essa finalidade, a menos que a integridade do arquivo seja verificada externamente de alguma outra forma. -0 ... -9 Seleciona um nivel de predefinicao de compactacao. O padrao e -6. Se varios niveis de predefinicao forem especificados, o ultimo tera efeito. Se uma cadeia de filtro personalizada ja foi especificada, especificar um nivel de predefinicao de compactacao limpa a cadeia de filtro personalizada. As diferencas entre as predefinicoes sao mais significativas do que com gzip(1) e bzip2(1). As configuracoes de compactacao selecionadas determinam os requisitos de memoria do descompactador, portanto, usar um nivel de predefinicao muito alto pode dificultar a descompactacao do arquivo em um sistema antigo com pouca RAM. Especificamente, nao e uma boa ideia usar cegamente -9 para tudo como costuma acontecer com gzip(1) e bzip2(1). -0 ... -3 Estas sao predefinicoes um tanto rapidas. -0 as vezes e mais rapida que gzip -9 ao mesmo tempo que compacta muito melhor. As mais altas geralmente tem velocidade comparavel ao bzip2(1) com taxa de compactacao comparavel ou melhor, embora os resultados dependam muito do tipo de dados que estao sendo compactados. -4 ... -6 Compactacao boa a muito boa, mantendo o uso de memoria do descompactador razoavel mesmo para sistemas antigos. -6 e o padrao, que geralmente e uma boa escolha para distribuir arquivos que precisam ser descompactaveis, mesmo em sistemas com apenas 16 MiB de RAM. (-5e ou -6e tambem vale a pena considerar. Veja --extreme.) -7 ... -9 Eles sao como -6, mas com requisitos de memoria de compressor e descompressor mais altos. Eles sao uteis apenas ao compactar arquivos maiores que 8 MiB, 16 MiB e 32 MiB, respectivamente. No mesmo hardware, a velocidade de descompactacao e aproximadamente um numero constante de bytes de dados compactados por segundo. Em outras palavras, quanto melhor a compactacao, mais rapida sera a descompactacao. Isso tambem significa que a quantidade de saida nao compactada produzida por segundo pode variar muito. A tabela a seguir resume os recursos das predefinicoes: Predefinicao DicTam 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 Descricoes das colunas: o DicTam e o tamanho do dicionario LZMA2. E desperdicio de memoria usar um dicionario maior que o tamanho do arquivo descompactado. E por isso que e bom evitar usar as predefinicoes -7 ... -9 quando nao ha real necessidade deles. Em -6 e inferior, a quantidade de memoria desperdicada geralmente e baixa o suficiente para nao importar. o CompCPU e uma representacao simplificada das configuracoes LZMA2 que afetam a velocidade de compactacao. O tamanho do dicionario tambem afeta a velocidade, portanto, embora o CompCPU seja o mesmo para os niveis -6 ... -9, niveis mais altos ainda tendem a ser um pouco mais lentos. Para obter uma compactacao ainda mais lenta e possivelmente melhor, consulte --extreme. o CompMem contains the compressor memory requirements in the single-threaded mode. It may vary slightly between xz versions. o DecMem contem os requisitos de memoria do descompactador. Ou seja, as configuracoes de compactacao determinam os requisitos de memoria do descompactador. O uso exato da memoria do descompactador e um pouco maior do que o tamanho do dicionario LZMA2, mas os valores na tabela foram arredondados para o proximo MiB completo. 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 Usa uma variante mais lenta do nivel de predefinicao de compactacao selecionado (-0 ... -9) para obter uma taxa de compactacao um pouco melhor, mas, com azar, isso tambem pode piorar. O uso da memoria do descompressor nao e afetado, mas o uso da memoria do compactador aumenta um pouco nos niveis de predefinicao -0 ... -3. Como existem duas predefinicoes com tamanhos de dicionario 4 MiB e 8 MiB, as predefinicoes -3e e -5e usam configuracoes um pouco mais rapidas (CompCPU inferior) do que -4e e -6e, respectivamente. Dessa forma, nao ha duas predefinicoes identicas. Predefinicao DicTam 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 Por exemplo, ha um total de quatro predefinicoes que usam o dicionario 8 MiB, cuja ordem do mais rapido ao mais lento e -5, -6, -5e e -6e. --fast --best Esses sao apelidos um tanto enganosos para -0 e -9, respectivamente. Eles sao fornecidos apenas para compatibilidade com versoes anteriores do LZMA Utils. Evite usar essas opcoes. --block-size=tamanho Ao compactar para o formato .xz, divida os dados de entrada em blocos de tamanho bytes. Os blocos sao compactados independentemente uns dos outros, o que ajuda no multi-threading e torna possivel a descompactacao limitada de acesso aleatorio. Essa opcao normalmente e usada para substituir o tamanho de bloco padrao no modo multi-thread, mas tambem pode ser usada em thread unica. 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. No modo multi-thread, os tamanhos dos blocos sao armazenados nos cabecalhos dos blocos. Isso nao e feito no modo de thread unica, portanto, a saida codificada nao sera identica a do modo multi-thread. --flush-timeout=tempo_limite Ao compactar, se mais de tempo_limite milissegundos (um numero inteiro positivo) se passaram desde a liberacao anterior e a leitura de mais entrada seria bloqueada, todos os dados de entrada pendentes serao liberados do codificador e disponibilizados no fluxo de saida. Isso pode ser util se xz for usado para compactar dados transmitidos por uma rede. Valores tempo_limite pequenos tornam os dados disponiveis na extremidade receptora com um pequeno atraso, mas valores tempo_limite grandes oferecem melhor taxa de compactacao. Esse recurso esta desabilitado por padrao. Se esta opcao for especificada mais de uma vez, a ultima tera efeito. O valor especial tempo_limite de 0 pode ser usado para desabilitar explicitamente esse recurso. Este recurso nao esta disponivel em sistemas nao-POSIX. Este recurso ainda e experimental. Atualmente, xz nao e adequado para descompactar o fluxo em tempo real devido a forma como xz faz o buffer. --memlimit-compress=limite Define um limite de uso de memoria para compactacao. Se esta opcao for especificada varias vezes, a ultima entrara em vigor. Se as configuracoes de compactacao excederem o limite, xz tentara ajustar as configuracoes para baixo para que o limite nao seja mais excedido e exibira um aviso de que o ajuste automatico foi feito. Os ajustes sao feitos nesta ordem: reduzindo o numero de encadeamentos, alternando para o modo sigle-thread se ate mesmo uma thread no modo multi-thread exceder o limite e, finalmente, reduzindo o tamanho do dicionario LZMA2. Ao compactar com --format=raw ou se --no-adjust tiver sido especificado, apenas o numero de threads pode ser reduzido, pois isso pode ser feito sem afetar a saida compactada. Se o limite nao puder ser alcancado mesmo com os ajustes descritos acima, um erro sera exibido e xz saira com status de saida 1. O limite pode ser especificado de varias maneiras: o O limite pode ser um valor absoluto em bytes. Usar um sufixo inteiro como MiB pode ser util. Exemplo: --memlimit-compress=80MiB o O limite pode ser especificado como uma porcentagem da memoria fisica total (RAM). Isso pode ser util especialmente ao definir a variavel de ambiente XZ_DEFAULTS em um script de inicializacao de shell que e compartilhado entre diferentes computadores. Dessa forma o limite e automaticamente maior em sistemas com mais memoria. Exemplo: --memlimit-compress=70% o O limite pode ser redefinido para seu valor padrao, definindo-o como 0. Atualmente, isso equivale a definir limite como max (sem limite de uso de memoria). Para xz de 32 bits, ha um caso especial: se o limite estiver acima de 4020 MiB, o limite e definido como 4020 MiB. No MIPS32 2000 MiB e usado em seu lugar. (Os valores 0 e max nao sao afetados por isso. Um recurso semelhante nao existe para descompactacao.) Isso pode ser util quando um executavel de 32 bits tem acesso a espaco de endereco de 4 GiB (2 GiB no MIPS32) enquanto espero nao causar danos em outras situacoes. Consulte tambem a secao Uso de memoria. --memlimit-decompress=limite Define um limite de uso de memoria para descompactacao. Isso tambem afeta o modo --list. Se a operacao nao for possivel sem exceder o limite, xz exibira um erro e a descompactacao do arquivo falhara. Consulte --memlimit-compress=limite para possiveis maneiras de especificar o limite. --memlimit-mt-decompress=limite Define um limite de uso de memoria para descompactacao multi-thread. Isso pode afetar apenas o numero de threads; isso nunca fara com que xz se recuse a descompactar um arquivo. Se limite for muito baixo para permitir qualquer multi-thread, o limite sera ignorado e xz continuara no modo de thread unica. Observe que se --memlimit-decompress tambem for usado, ele sempre se aplicara aos modos de thread unica e multi-thread e, portanto, o limite efetivo para multi-threading nunca sera maior que o limite definido com --memlimit-decompress. Em contraste com as outras opcoes de limite de uso de memoria, --memlimit-mt-decompress=limite tem um padrao limite especifico do sistema. xz --info-memory pode ser usado para ver o valor atual. Esta opcao e seu valor padrao existem porque, sem qualquer limite, o descompactador usando threads pode acabar alocando uma quantidade insana de memoria com alguns arquivos de entrada. Se o limite padrao for muito baixo em seu sistema, sinta-se a vontade para aumentar o limite, mas nunca defina-o para um valor maior que a quantidade de RAM utilizavel, pois com os arquivos de entrada apropriados xz tentara usar essa quantidade de memoria mesmo com um baixo numero de threads. Ficar sem memoria ou trocar nao melhorara o desempenho da descompactacao. Consulte --memlimit-compress=limite para possiveis maneiras de especificar o limite. Definir limite como 0 redefine limite para o valor padrao especifico do sistema. -M limite, --memlimit=limite, --memory=limite Isso e equivalente a especificar --memlimit-compress=limite --memlimit-decompress=limite --memlimit-mt-decompress=limite. --no-adjust Exibe um erro e saia se o limite de uso de memoria nao puder ser atendido sem ajustar as configuracoes que afetam a saida compactada. Ou seja, isso evita que xz alterne o codificador do modo multi-thread para o modo encadeado unico e reduza o tamanho do dicionario LZMA2. Mesmo quando esta opcao e usada, o numero de threads pode ser reduzido para atender ao limite de uso de memoria, pois isso nao afetara a saida compactada. O ajuste automatico e sempre desativado ao criar fluxos brutos (--format=raw). -T threads, --threads=threads Especifica o numero de threads de trabalho a serem usados. Definir threads para um valor especial 0 faz com que xz use tantos threads quanto o(s) processador(es) no suporte do sistema. O numero real de encadeamentos pode ser menor que threads se o arquivo de entrada nao for grande o suficiente para subdividir em threads com as configuracoes fornecidas ou se o uso de mais threads exceder o limite de uso de memoria. Os compactadores usando thread unica e varias threads produzem saidas diferentes. O compactador de thread unica fornecera o menor tamanho de arquivo, mas apenas a saida do compactador de varias threads pode ser descompactada usando varias threads. Definir threads como 1 usara o modo de thread unica. Definir threads para qualquer outro valor, incluindo 0, usara o compressor de varias threads, mesmo que o sistema tenha suporte a apenas uma thread de hardware. (xz 5.2.x usou o modo de thread unica nesta situacao.) Para usar o modo de varias threads com apenas uma thread, defina threads como +1. O prefixo + nao tem efeito com valores diferentes de 1. Um limite de uso de memoria ainda pode fazer xz alternar para o modo de thread unica, a menos que --no-adjust seja usado. O suporte para o prefixo + foi adicionado no xz 5.4.0. Se um numero automatico de threads foi solicitado e nenhum limite de uso de memoria foi especificado, um limite flexivel padrao especifico do sistema sera usado para possivelmente limitar o numero de threads. E um limite flexivel no sentido de que e ignorado se o numero de threads se tornar um, portanto, um limite flexivel nunca impedira xz de compactar ou descompactar. Este limite flexivel padrao nao fara com que xz alterne do modo de varias threads para o modo de thread unica. Os limites ativos podem ser vistos com xz --info-memory. Atualmente, o unico metodo de threading e dividir a entrada em blocos e comprimi-los independentemente um do outro. O tamanho padrao do bloco depende do nivel de compactacao e pode ser substituido com a opcao --block-size=tamanho. A descompactacao em threads funciona apenas em arquivos que contem varios blocos com informacoes de tamanho nos cabecalhos dos blocos. Todos os arquivos grandes o suficiente compactados no modo de varias thread atendem a essa condicao, mas os arquivos compactados no modo de thread unica nao atendem, mesmo se --block-size=tamanho tiver sido usado. The default value for threads is 0. In xz 5.4.x and older the default is 1. Cadeias de filtro de compressor personalizadas Uma cadeia de filtro personalizada permite especificar as configuracoes de compactacao em detalhes, em vez de confiar nas configuracoes associadas as predefinicoes. Quando uma cadeia de filtro personalizada e especificada, as opcoes predefinidas (-0 ... -9 e --extreme) anteriores na linha de comando sao esquecidas. Se uma opcao predefinida for especificada apos uma ou mais opcoes de cadeia de filtros personalizados, a nova predefinicao entrara em vigor e as opcoes de cadeia de filtros personalizados especificadas anteriormente serao esquecidas. Uma cadeia de filtro e comparavel a tubulacao na linha de comando. Ao compactar, a entrada descompactada vai para o primeiro filtro, cuja saida vai para o proximo filtro (se houver). A saida do ultimo filtro e gravada no arquivo compactado. O numero maximo de filtros na cadeia e quatro, mas normalmente uma cadeia de filtros tem apenas um ou dois filtros. Muitos filtros tem limitacoes sobre onde podem estar na cadeia de filtros: alguns filtros podem funcionar apenas como o ultimo filtro na cadeia, alguns apenas como filtro nao-ultimo e alguns funcionam em qualquer posicao na cadeia. Dependendo do filtro, essa limitacao e inerente ao projeto do filtro ou existe para evitar problemas de seguranca. 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. Para ver toda a cadeia de filtros e opcoes, use xz -vv (isto e, use --verbose duas vezes). Isso tambem funciona para visualizar as opcoes da cadeia de filtros usadas pelas predefinicoes. --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[=opcoes] --lzma2[=opcoes] Adiciona o filtro LZMA1 ou LZMA2 a cadeia de filtros. Esses filtros podem ser usados apenas como o ultimo filtro na cadeia. LZMA1 e um filtro legado, que e suportado quase exclusivamente devido ao formato de arquivo legado .lzma, que suporta apenas LZMA1. LZMA2 e uma versao atualizada do LZMA1 para corrigir alguns problemas praticos do LZMA1. O formato .xz usa LZMA2 e nao suporta LZMA1. A velocidade de compactacao e as proporcoes de LZMA1 e LZMA2 sao praticamente as mesmas. LZMA1 e LZMA2 compartilham o mesmo conjunto de opcoes: preset=predefinicao Redefine todas as opcoes de LZMA1 ou LZMA2 para predefinicao. Predefinicao consiste em um numero inteiro, que pode ser seguido por modificadores de predefinicao de uma unica letra. O inteiro pode ser de 0 a 9, correspondendo as opcoes de linha de comando -0 ... -9. O unico modificador suportado atualmente e e, que corresponde a --extreme. Se nenhum preset for especificado, os valores padrao das opcoes LZMA1 ou LZMA2 serao obtidos da predefinicao 6. dict=tamanho O tamanho do dicionario (buffer de historico) indica quantos bytes dos dados nao compactados processados recentemente sao mantidos na memoria. O algoritmo tenta encontrar sequencias de bytes repetidos (correspondencias) nos dados nao compactados e substitui-los por referencias aos dados atualmente no dicionario. Quanto maior o dicionario, maior a chance de encontrar uma correspondencia. Portanto, aumentar o dicionario tamanho geralmente melhora a taxa de compactacao, mas um dicionario maior que o arquivo nao compactado e um desperdicio de memoria. Um tamanho de dicionario tipico e de 64 KiB a 64 MiB. O minimo e 4 KiB. O maximo para compactacao e atualmente 1,5 GiB (1536 MiB). O descompactador ja oferece suporte a dicionarios de ate um byte a menos de 4 GiB, que e o maximo para os formatos de fluxo LZMA1 e LZMA2. O tamanho de dicionario e o localizador de correspondencia (mf) juntos determinam o uso de memoria do codificador LZMA1 ou LZMA2. O mesmo (ou maior) tamanho de dicionario e necessario para descompactar que foi usado durante a compactacao, portanto, o uso de memoria do decodificador e determinado pelo tamanho do dicionario usado durante a compactacao. Os cabecalhos .xz armazenam o tamanho de dicionario como 2^n ou 2^n + 2^(n-1), entao esses tamanhos sao um tanto preferidos para compactacao. Outros tamanhos serao arredondados quando armazenados nos cabecalhos .xz. lc=lc Especifica o numero de bits de contexto literais. O minimo e 0 e o maximo e 4; o padrao e 3. Alem disso, a soma de lc e lp nao deve exceder 4. Todos os bytes que nao podem ser codificados como correspondencias sao codificados como literais. Ou seja, literais sao simplesmente bytes de 8 bits que sao codificados um de cada vez. A codificacao literal assume que os bits lc mais altos do byte nao compactado anterior se correlacionam com o proximo byte. Por exemplo, em um texto tipico em ingles, uma letra maiuscula geralmente e seguida por uma letra minuscula, e uma letra minuscula geralmente e seguida por outra letra minuscula. No conjunto de caracteres US-ASCII, os tres bits mais altos sao 010 para letras maiusculas e 011 para letras minusculas. Quando lc e pelo menos 3, a codificacao literal pode aproveitar essa propriedade nos dados nao compactados. O valor padrao (3) geralmente e bom. Se voce deseja compactacao maxima, experimente lc=4. As vezes ajuda um pouco, as vezes piora a compactacao. Se piorar, experimente lc=2 tambem. lp=lp Especifica o numero de bits de posicao literal. O minimo e 0 e o maximo e 4; o padrao e 0. Lp afeta que tipo de alinhamento nos dados nao compactados e assumido ao codificar literais. Consulte pb abaixo para obter mais informacoes sobre alinhamento. pb=pb Especifica o numero de bits de posicao. O minimo e 0 e o maximo e 4; o padrao e 2. Pb afeta que tipo de alinhamento nos dados nao compactados e assumido em geral. O padrao significa alinhamento de quatro bytes (2^pb=2^2=4), que geralmente e uma boa escolha quando nao ha melhor estimativa. Quando o alinhamento e conhecido, definir pb adequadamente pode reduzir um pouco o tamanho do arquivo. Por exemplo, com arquivos de texto com alinhamento de um byte (US-ASCII, ISO-8859-*, UTF-8), a configuracao pb=0 pode melhorar um pouco a compactacao. Para texto UTF-16, pb=1 e uma boa escolha. Se o alinhamento for um numero impar como 3 bytes, pb=0 pode ser a melhor escolha. Embora o alinhamento assumido possa ser ajustado com pb e lp, LZMA1 e LZMA2 ainda favorecem ligeiramente o alinhamento de 16 bytes. Pode valer a pena levar em consideracao ao projetar formatos de arquivo que provavelmente serao compactados com LZMA1 ou LZMA2. mf=mf O localizador de correspondencia tem um efeito importante na velocidade do codificador, uso de memoria e taxa de compactacao. Normalmente, os localizadores de correspondencia de Hash Chain sao mais rapidos do que os localizadores de correspondencia de arvore binaria. O padrao depende do predefinicao: 0 usa hc3, 1-3 usa hc4 e o resto usa bt4. Os seguintes localizadores de correspondencia sao suportados. As formulas de uso de memoria abaixo sao aproximacoes aproximadas, que estao mais proximas da realidade quando dict e uma potencia de dois. hc3 Cadeia de hashs com hashing de 2 e 3 bytes Valor minimo para nice: 3 Uso de memoria: dict * 7.5 (if dict <= 16 MiB); dict * 5.5 + 64 MiB (if dict > 16 MiB) hc4 Cadeia de hashs com hashing de 2, 3 e 4 bytes Valor minimo para nice: 4 Uso de memoria: dict * 7.5 (if dict <= 32 MiB); dict * 6.5 (if dict > 32 MiB) bt2 Arvore binaria com hashing de 2 bytes Valor minimo para nice: 2 Uso de memoria: dict * 9.5 bt3 Arvore binaria com hashing de 2 e 3 bytes Valor minimo para nice: 3 Uso de memoria: dict * 11.5 (if dict <= 16 MiB); dict * 9.5 + 64 MiB (if dict > 16 MiB) bt4 Arvore binaria com hashing de 2, 3 e 4 bytes Valor minimo para nice: 4 Uso de memoria: dict * 11.5 (if dict <= 32 MiB); dict * 10.5 (if dict > 32 MiB) mode=modo O modo de compactacao especifica o metodo para analisar os dados produzidos pelo localizador de correspondencia. Os modos suportados sao fast e normal. O padrao e fast para predefinicoes 0-3 e normal para predefinicoes 4-9. Normalmente, fast e usado com localizadores de correspondencia cadeia de hashs e normal com localizadores de correspondencia de arvore binaria. Isso tambem e o que os predefinicoes fazem. nice=nice Especifica o que e considerado um bom comprimento para uma correspondencia. Uma vez que uma correspondencia de pelo menos nice bytes e encontrada, o algoritmo para de procurar correspondencias possivelmente melhores. Nice pode ser 2-273 bytes. Valores mais altos tendem a fornecer melhor taxa de compactacao em detrimento da velocidade. O padrao depende do predefinicao. depth=profundidade Especifica a profundidade maxima de pesquisa no localizador de correspondencias. O padrao e o valor especial de 0, que faz com que o compressor determine um profundidade razoavel de mf e nice. Uma profundidade razoavel para cadeias de hash e 4-100 e 16-1000 para arvores binarias. Usar valores muito altos para profundidade pode tornar o codificador extremamente lento com alguns arquivos. Evite definir profundidade acima de 1000 a menos que voce esteja preparado para interromper a compactacao caso ela esteja demorando muito. Ao decodificar fluxos brutos (--format=raw), o LZMA2 precisa apenas do dicionario tamanho. LZMA1 tambem precisa de lc, lp e pb. --x86[=opcoes] --arm[=opcoes] --armthumb[=opcoes] --arm64[=opcoes] --powerpc[=opcoes] --ia64[=opcoes] --sparc[=opcoes] --riscv[=opcoes] Adiciona um filtro de ramificacao/chamada/salto (BCJ) a cadeia de filtros. Esses filtros podem ser usados apenas como um filtro nao ultimo na cadeia de filtros. Um filtro BCJ converte enderecos relativos no codigo de maquina em suas contrapartes absolutas. Isso nao altera o tamanho dos dados, mas aumenta a redundancia, o que pode ajudar o LZMA2 a produzir um arquivo .xz 0-15 % menor. Os filtros BCJ sao sempre reversiveis, portanto, usar um filtro BCJ para o tipo errado de dados nao causa nenhuma perda de dados, embora possa piorar um pouco a taxa de compactacao.Os filtros BCJ sao muito rapidos e usam uma quantidade insignificante de memoria. Esses filtros BCJ tem problemas conhecidos relacionados a taxa de compactacao: o Alguns tipos de arquivos contendo codigo executavel (por exemplo, arquivos de objeto, bibliotecas estaticas e modulos do kernel do Linux) tem os enderecos nas instrucoes preenchidos com valores de preenchimento. Esses filtros BCJ ainda vao fazer a conversao de endereco, o que vai piorar a compactacao desses arquivos. o Se um filtro BCJ for aplicado em um arquivo, e possivel que isso torne a taxa de compactacao pior do que nao usar um filtro BCJ. Por exemplo, se houver executaveis semelhantes ou mesmo identicos, a filtragem provavelmente tornara os arquivos menos semelhantes e, portanto, a compactacao sera pior. O conteudo de arquivos nao executaveis no mesmo arquivo tambem pode ser importante. Na pratica tem que tentar com e sem filtro BCJ para ver qual e melhor em cada situacao. Conjuntos de instrucoes diferentes tem alinhamento diferente: o arquivo executavel deve ser alinhado a um multiplo desse valor nos dados de entrada para fazer o filtro funcionar. Filtro Alinhamento Observacoes x86 1 x86 32 bits ou 64 bits ARM 4 ARM-Thumb 2 ARM64 4 Alinhamento de 4096 bytes e melhor PowerPC 4 Somente big endian 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. Todos os filtros BCJ suportam as mesmas opcoes: start=deslocamento Especifica o deslocamento inicial que e usado na conversao entre enderecos relativos e absolutos. O deslocamento deve ser um multiplo do alinhamento do filtro (ver tabela acima). O padrao e zero. Na pratica, o padrao e bom; especificar um deslocamento personalizado quase nunca e util. --delta[=opcoes] Adiciona o filtro Delta a cadeia de filtros. O filtro Delta so pode ser usado como filtro nao-ultimo na cadeia de filtros. Atualmente, apenas o calculo simples de delta byte a byte e suportado. Pode ser util ao compactar, por exemplo, imagens bitmap nao compactadas ou audio PCM nao compactado. No entanto, algoritmos de proposito especial podem fornecer resultados significativamente melhores do que Delta + LZMA2. Isso e verdade especialmente com audio, que compacta mais rapido e melhor, por exemplo, com flac(1). Opcoes suportadas: dist=distancia Especifica a distancia do calculo delta em bytes. distancia deve ser 1-256. O padrao e 1. Por exemplo, com dist=2 e entrada de oito bytes A1 B1 A2 B3 A3 B5 A4 B7, a saida sera A1 B1 01 02 01 02 01 02. Outras opcoes -q, --quiet Suprime avisos e avisos. Especifique isso duas vezes para suprimir erros tambem. Esta opcao nao tem efeito no status de saida. Ou seja, mesmo que um aviso tenha sido suprimido, o status de saida para indicar um aviso ainda e usado. -v, --verbose Ser detalhado. Se o erro padrao estiver conectado a um terminal, xz exibira um indicador de progresso. Especifique --verbose duas vezes dara uma saida ainda mais detalhada. O indicador de progresso mostra as seguintes informacoes: o A porcentagem de conclusao e mostrada se o tamanho do arquivo de entrada for conhecido. Ou seja, a porcentagem nao pode ser mostrada em encadeamentos (pipe). o Quantidade de dados compactados produzidos (compactando) ou consumidos (descompactando). o Quantidade de dados nao compactados consumidos (compactacao) ou produzidos (descompactacao). o Taxa de compactacao, que e calculada dividindo a quantidade de dados compactados processados ate o momento pela quantidade de dados nao compactados processados ate o momento. o Velocidade de compactacao ou descompactacao. Isso e medido como a quantidade de dados nao compactados consumidos (compactacao) ou produzidos (descompactacao) por segundo. E mostrado apos alguns segundos desde que xz comecou a processar o arquivo. o Tempo decorrido no formato M:SS ou H:MM:SS. o O tempo restante estimado e mostrado apenas quando o tamanho do arquivo de entrada e conhecido e alguns segundos ja se passaram desde que xz comecou a processar o arquivo. A hora e mostrada em um formato menos preciso que nunca tem dois pontos, por exemplo, 2 min 30 s. Quando o erro padrao nao e um terminal, --verbose fara com que xz imprima o nome do arquivo, tamanho compactado, tamanho nao compactado, taxa de compactacao e possivelmente tambem a velocidade e o tempo decorrido em uma unica linha para o erro padrao apos a compactacao ou descompactando o arquivo. A velocidade e o tempo decorrido sao incluidos apenas quando a operacao leva pelo menos alguns segundos. Se a operacao nao foi concluida, por exemplo, devido a interrupcao do usuario, tambem e impressa a porcentagem de conclusao se o tamanho do arquivo de entrada for conhecido. -Q, --no-warn Nao define o status de saida como 2, mesmo que uma condicao digna de um aviso tenha sido detectada. Esta opcao nao afeta o nivel de detalhamento, portanto, tanto --quiet quanto --no-warn devem ser usados para nao exibir avisos e nao alterar o status de saida. --robot Imprime mensagens em um formato analisavel por maquina. Isso visa facilitar a criacao de frontends que desejam usar xz em vez de liblzma, o que pode ser o caso de varios scripts. A saida com esta opcao habilitada deve ser estavel em versoes xz. Consulte a secao MODO ROBO para obter detalhes. --info-memory Exibe, em formato legivel por humanos, quanta memoria fisica (RAM) e quantos threads de processador xz acredita que o sistema possui e os limites de uso de memoria para compactacao e descompactacao e saia com exito. -h, --help Exibe uma mensagem de ajuda descrevendo as opcoes mais usadas e sai com sucesso. -H, --long-help Exibe uma mensagem de ajuda descrevendo todos os recursos de xz e sai com sucesso -V, --version Exibe o numero da versao de xz e liblzma em formato legivel por humanos. Para obter uma saida analisavel por maquina, especifique --robot antes de --version. MODO ROBO 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. Modo lista xz --robot --list usa saida separada por tabulacoes. A primeira coluna de cada linha possui uma string que indica o tipo de informacao encontrada naquela linha: name Esta e sempre a primeira linha ao comecar a listar um arquivo. A segunda coluna na linha e o nome do arquivo. file Esta linha contem informacoes gerais sobre o arquivo .xz. Esta linha e sempre impressa apos a linha name. stream Este tipo de linha e usado somente quando --verbose foi especificado. Existem tantas linhas de stream quanto fluxos no arquivo .xz. block Este tipo de linha e usado somente quando --verbose foi especificado. Existem tantas linhas block quanto blocos no arquivo .xz. As linhas block sao mostradas apos todas as linhas stream; diferentes tipos de linha nao sao intercalados. summary Este tipo de linha e usado apenas quando --verbose foi especificado duas vezes. Esta linha e impressa apos todas as linhas de block. Assim como a linha arquivo, a linha summary contem informacoes gerais sobre o arquivo .xz. totals Esta linha e sempre a ultima linha da saida da lista. Ele mostra as contagens totais e tamanhos. As colunas das linhas file: 2. Numero de fluxos no arquivo 3. Numero total de blocos no(s) fluxo(s) 4. Tamanho compactado do arquivo 5. Uncompressed size of the file 6. Taxa de compactacao, por exemplo, 0.123. Se a proporcao for superior a 9.999, serao exibidos tres tracos (---) em vez da proporcao. 7. Lista separada por virgulas de nomes de verificacao de integridade. As seguintes strings sao usadas para os tipos de verificacao conhecidos: None, CRC32, CRC64 e SHA-256. Para tipos de verificacoes desconhecidos, Unknown-N e usado, onde N e o ID do cheque como um numero decimal (um ou dois digitos). 8. Tamanho total do preenchimento de fluxo no arquivo As colunas das linhas stream: 2. Numero do fluxo (o primeiro fluxo e 1) 3. Numero de blocos no fluxo 4. Deslocamento inicial compactado 5. Deslocamento inicial descompactado 6. Tamanho compactado (nao inclui preenchimento de fluxo) 7. Tamanho descompactado 8. Taxa de compactacao 9. Nome da verificacao de integridade 10. Tamanho do preenchimento do fluxo As colunas das linhas block: 2. Numero do fluxo que contem este bloco 3. Numero do bloco relativo ao inicio do fluxo (o primeiro bloco e 1) 4. Numero do bloco relativo ao inicio do arquivo 5. Deslocamento inicial compactado em relacao ao inicio do arquivo 6. Deslocamento inicial descompactado em relacao ao inicio do arquivo 7. Tamanho total compactado do bloco (inclui cabecalhos) 8. Tamanho descompactado 9. Taxa de compactacao 10. Nome da verificacao de integridade Se --verbose for especificado duas vezes, colunas adicionais serao incluidas nas linhas block. Eles nao sao exibidos com um unico --verbose, porque obter essas informacoes requer muitas buscas e, portanto, pode ser lento: 11. Valor da verificacao de integridade em hexadecimal 12. Tamanho do cabecalho do bloco 13. Sinalizadores de bloco: c indica que o tamanho compactado esta presente e u indica que o tamanho nao compactado esta presente. Se o sinalizador nao estiver definido, um traco (-) sera exibido para manter o comprimento da string fixo. Novos sinalizadores podem ser adicionados ao final da string no futuro. 14. Tamanho dos dados reais compactados no bloco (isso exclui o cabecalho do bloco, o preenchimento do bloco e os campos de verificacao) 15. Quantidade de memoria (em bytes) necessaria para descompactar este bloco com esta versao xz 16. Cadeia de filtro. Observe que a maioria das opcoes usadas no momento da compactacao nao pode ser conhecida, pois apenas as opcoes necessarias para a descompactacao sao armazenadas nos cabecalhos .xz. As colunas das linhas summary: 2. Quantidade de memoria (em bytes) necessaria para descompactar este arquivo com esta versao do xz 3. yes ou no indicando se todos os cabecalhos de bloco tem tamanho compactado e tamanho nao compactado armazenados neles Desde xz 5.1.2alpha: 4. Versao minima do xz necessaria para descompactar o arquivo As colunas da linha totals: 2. Numero de fluxos 3. Numero de blocos 4. Tamanho compactado 5. Tamanho descompactado 6. Taxa de compactacao media 7. Lista separada por virgulas de nomes de verificacao de integridade que estavam presentes nos arquivos 8. Tamanho do preenchimento do fluxo 9. Numero de arquivos. Isso esta aqui para manter a ordem das colunas anteriores a mesma das linhas file. Se --verbose for especificado duas vezes, colunas adicionais serao incluidas na linha totals: 10. Quantidade maxima de memoria (em bytes) necessaria para descompactar os arquivos com esta versao do xz 11. yes ou no indicando se todos os cabecalhos de bloco tem tamanho compactado e tamanho nao compactado armazenados neles Desde xz 5.1.2alpha: 12. Versao minima do xz necessaria para descompactar o arquivo Versoes futuras podem adicionar novos tipos de linha e novas colunas podem ser adicionadas aos tipos de linha existentes, mas as colunas existentes nao serao alteradas. 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. Informacoes de limite de memoria xz --robot --info-memory prints a single line with multiple tab-separated columns: 1. Quantidade total de memoria fisica (RAM) em bytes. 2. Limite de uso de memoria para compactacao em bytes (--memlimit-compress). Um valor especial de 0 indica a configuracao padrao que para o modo de thread unica e o mesmo que sem limite. 3. Limite de uso de memoria para descompactacao em bytes (--memlimit-decompress). Um valor especial de 0 indica a configuracao padrao que para o modo de thread unica e o mesmo que sem limite. 4. Desde xz 5.3.4alpha: Uso de memoria para descompactacao com varias thread em bytes (--memlimit-mt-decompress). Isso nunca e zero porque um valor padrao especifico do sistema mostrado na coluna 5 e usado se nenhum limite for especificado explicitamente. Isso tambem nunca e maior que o valor na coluna 3, mesmo que um valor maior tenha sido especificado com --memlimit-mt-decompress. 5. Desde xz 5.3.4alpha: Um limite de uso de memoria padrao especifico do sistema que e usado para limitar o numero de threads ao compactar com um numero automatico de threads (--threads=0) e nenhum limite de uso de memoria foi especificado (--memlimit-compress). Isso tambem e usado como o valor padrao para --memlimit-mt-decompress. 6. Desde xz 5.3.4alpha: Numero de threads de processador disponiveis. No futuro, a saida de xz --robot --info-memory pode ter mais colunas, mas nunca mais do que uma unica linha. Versao xz --robot --version prints the version number of xz and liblzma in the following format: XZ_VERSION=XYYYZZZS LIBLZMA_VERSION=XYYYZZZS X Versao principal. YYY Versao menor. Numeros pares sao estaveis. Os numeros impares sao versoes alfa ou beta. ZZZ Nivel de patch para versoes estaveis ou apenas um contador para versoes de desenvolvimento. S Estabilidade. 0 e alfa, 1 e beta e 2 e estavel. S deve ser sempre 2 quando YYY for par. XYYYZZZS sao iguais em ambas as linhas se xz e liblzma forem da mesma versao do XZ Utils. Exemplos: 4.999.9beta e 49990091 e 5.0.0 e 50000002. STATUS DE SAIDA 0 Esta tudo bem. 1 Ocorreu um erro. 2 Algo digno de um aviso ocorreu, mas ocorreu nenhum erro real. Observacoes (nao avisos ou erros) impressas no erro padrao nao afetam o status de saida. AMBIENTE xz analisa listas de opcoes separadas por espacos das variaveis de ambiente XZ_DEFAULTS e XZ_OPT, nesta ordem, antes de analisar as opcoes da linha de comando. Observe que apenas as opcoes sao analisadas a partir das variaveis de ambiente; todas as nao opcoes sao silenciosamente ignoradas. A analise e feita com getopt_long(3) que tambem e usado para os argumentos da linha de comando. XZ_DEFAULTS Opcoes padrao especificas do usuario ou de todo o sistema. Normalmente, isso e definido em um script de inicializacao do shell para habilitar o limitador de uso de memoria do xz por padrao. Excluindo scripts de inicializacao de shell e casos especiais semelhantes, os scripts nunca devem definir ou remover a definicao de XZ_DEFAULTS. XZ_OPT Isso e para passar opcoes para xz quando nao e possivel definir as opcoes diretamente na linha de comando xz. Este e o caso quando xz e executado por um script ou ferramenta, por exemplo, GNU tar(1): XZ_OPT=-2v tar caf foo.tar.xz foo Os scripts podem usar XZ_OPT, por exemplo, para definir opcoes de compactacao padrao especificas do script. Ainda e recomendavel permitir que os usuarios substituam XZ_OPT se isso for razoavel. Por exemplo, em scripts sh(1) pode-se usar algo assim: XZ_OPT=${XZ_OPT-"-7e"} export XZ_OPT COMPATIBILIDADE COM LZMA UTILS A sintaxe da linha de comando do xz e praticamente um superconjunto de lzma, unlzma e lzcat conforme encontrado no LZMA Utils 4.32.x. Na maioria dos casos, e possivel substituir LZMA Utils por XZ Utils sem interromper os scripts existentes. Existem algumas incompatibilidades, porem, que as vezes podem causar problemas. Niveis de predefinicao de compactacao A numeracao das predefinicoes de nivel de compactacao nao e identica em xz e LZMA Utils. A diferenca mais importante e como os tamanhos dos dicionarios sao mapeados para diferentes predefinicoes. O tamanho do dicionario e aproximadamente igual ao uso de memoria do descompactador. Nivel xz LZMA Utils -0 256 KiB N/D -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 As diferencas de tamanho do dicionario tambem afetam o uso da memoria do compressor, mas existem algumas outras diferencas entre LZMA Utils e XZ Utils, que tornam a diferenca ainda maior: Nivel xz LZMA Utils 4.32.x -0 3 MiB N/D -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 O nivel de predefinicao padrao no LZMA Utils e -7 enquanto no XZ Utils e -6, entao ambos usam um dicionario de 8 MiB por padrao. Arquivos .lzma em um fluxo versus sem ser em um fluxo O tamanho descompactado do arquivo pode ser armazenado no cabecalho de .lzma. O LZMA Utils faz isso ao compactar arquivos comuns. A alternativa e marcar que o tamanho nao compactado e desconhecido e usar o marcador de fim de carga util para indicar onde o descompactador deve parar. O LZMA Utils usa este metodo quando o tamanho nao compactado nao e conhecido, como e o caso, por exemplo, de encadeamentos (pipes). xz oferece suporte a descompactacao de arquivos .lzma com ou sem marcador de fim de carga util, mas todos os arquivos .lzma criados por xz usarao marcador de fim de carga util e terao o tamanho descompactado marcado como desconhecido no cabecalho de .lzma. Isso pode ser um problema em algumas situacoes incomuns. Por exemplo, um descompactador de .lzma em um dispositivo embarcado pode funcionar apenas com arquivos que tenham tamanho descompactado conhecido. Se voce encontrar esse problema, precisara usar o LZMA Utils ou o LZMA SDK para criar arquivos .lzma com tamanho descompactado conhecido. Arquivos .lzma nao suportados O formato .lzma permite valores lc ate 8 e valores lp ate 4. LZMA Utils pode descompactar arquivos com qualquer lc e lp, mas sempre cria arquivos com lc=3 e lp=0. Criar arquivos com outros lc e lp e possivel com xz e com LZMA SDK. A implementacao do filtro LZMA1 em liblzma requer que a soma de lc e lp nao exceda 4. Assim, arquivos .lzma, que excedam esta limitacao, nao podem ser descompactados com xz. LZMA Utils cria apenas arquivos .lzma que possuem um tamanho de dicionario de 2^n (uma potencia de 2), mas aceita arquivos com qualquer tamanho de dicionario. liblzma aceita apenas arquivos .lzma que tenham um tamanho de dicionario de 2^n ou 2^n + 2^(n-1). Isso e para diminuir os falsos positivos ao detectar arquivos .lzma. Essas limitacoes nao devem ser um problema na pratica, ja que praticamente todos os arquivos .lzma foram compactados com configuracoes que o liblzma aceitara. Lixo a direita Ao descompactar, o LZMA Utils silenciosamente ignora tudo apos o primeiro fluxo .lzma. Na maioria das situacoes, isso e um bug. Isso tambem significa que o LZMA Utils nao oferece suporte a descompactacao de arquivos .lzma concatenados. Se houver dados restantes apos o primeiro fluxo de .lzma, xz considera o arquivo corrompido, a menos que --single-stream tenha sido usado. Isso pode quebrar scripts obscuros que presumiram que o lixo a direita e ignorado. NOTAS A saida compactada pode variar A saida compactada exata produzida a partir do mesmo arquivo de entrada nao compactado pode variar entre as versoes do XZ Utils, mesmo se as opcoes de compactacao forem identicas. Isso ocorre porque o codificador pode ser aprimorado (compactacao mais rapida ou melhor) sem afetar o formato do arquivo. A saida pode variar mesmo entre diferentes compilacoes da mesma versao do XZ Utils, se diferentes opcoes de compilacao forem usadas. A informacao acima significa que, uma vez que --rsyncable tenha sido implementado, os arquivos resultantes nao serao necessariamente "rsyncaveis", a menos que os arquivos antigos e novos tenham sido compactados com a mesma versao xz. Esse problema pode ser corrigido se uma parte da implementacao do codificador for congelada para manter a saida de rsyncable estavel nas versoes do xz. Descompactadores .xz embarcados As implementacoes do descompactador .xz embarcados, como o XZ Embedded, nao oferecem necessariamente suporte a arquivos criados com tipos de verificacoes de integridade diferentes de none e crc32. Como o padrao e --check=crc64, voce deve usar --check=none ou --check=crc32 ao criar arquivos para sistemas embarcados. Fora dos sistemas embarcados, todos os descompactadores de formato .xz oferecem suporte a todos os tipos de verificacao ou, pelo menos, sao capazes de descompactar o arquivo sem verificar a verificacao de integridade se a verificacao especifica nao for suportada. XZ Embedded oferece suporte a filtros BCJ, mas apenas com o deslocamento inicial padrao. EXEMPLOS Basico Compactar o arquivo foo em foo.xz usando o nivel de compactacao padrao (-6) e remover foo se a compactacao for bem-sucedida: xz foo Descompactar bar.xz em bar e nao remover bar.xz mesmo se a descompactacao for bem-sucedida: xz -dk bar.xz Criar baz.tar.xz com a predefinicao -4e (-4 --extreme), que e mais lenta que o padrao -6, mas precisa de menos memoria para compactacao e descompactacao (48 MiB e 5 MiB, respectivamente): tar cf - baz | xz -4e > baz.tar.xz Uma mistura de arquivos compactados e descompactados pode ser descompactada para a saida padrao com um unico comando: xz -dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt Compactacao paralela de muitos arquivos No GNU e *BSD, find(1) e xargs(1) podem ser usados para paralelizar a compactacao de muitos arquivos: find . -type f \! -name '*.xz' -print0 \ | xargs -0r -P4 -n16 xz -T1 A opcao -P para xargs(1) define o numero de processos paralelos do xz. O melhor valor para a opcao -n depende de quantos arquivos devem ser compactados. Se houver apenas alguns arquivos, o valor provavelmente deve ser 1; com dezenas de milhares de arquivos, 100 ou ate mais podem ser apropriados para reduzir o numero de processos de xz que xargs(1) eventualmente criara. A opcao -T1 para xz existe para forca-lo ao modo de thread unica, porque xargs(1) e usado para controlar a quantidade de paralelizacao. Modo robo Calcular quantos bytes foram salvos no total depois de compactar varios arquivos: xz --robot --list *.xz | awk '/^totals/{print $5-$4}' Um script pode querer saber que esta usando xz novo o suficiente. O seguinte script sh(1) verifica se o numero da versao da ferramenta xz e pelo menos 5.0.0. Este metodo e compativel com versoes beta antigas, que nao suportavam a opcao --robot: if ! eval "$(xz --robot --version 2> /dev/null)" || [ "$XZ_VERSION" -lt 50000002 ]; then echo "Your xz is too old." fi unset XZ_VERSION LIBLZMA_VERSION Definir um limite de uso de memoria para descompactacao usando XZ_OPT, mas se um limite ja tiver sido definido, nao o aumentar: 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 Cadeias de filtro de compressor personalizadas O uso mais simples para cadeias de filtro personalizadas e personalizar uma predefinicao LZMA2. Isso pode ser util, porque as predefinicoes abrangem apenas um subconjunto das combinacoes potencialmente uteis de configuracoes de compactacao. As colunas CompCPU das tabelas das descricoes das opcoes -0 ... -9 e --extreme sao uteis ao personalizar as predefinicoes LZMA2. Aqui estao as partes relevantes coletadas dessas duas tabelas: Predefinicao CompCPU -0 0 -1 1 -2 2 -3 3 -4 4 -5 5 -6 6 -5e 7 -6e 8 Se voce sabe que um arquivo requer um dicionario um tanto grande (por exemplo, 32 MiB) para compactar bem, mas deseja comprimi-lo mais rapidamente do que xz -8 faria, uma predefinicao com um valor CompCPU baixo (por exemplo, 1) pode ser modificado para usar um dicionario maior: xz --lzma2=preset=1,dict=32MiB foo.tar Com certos arquivos, o comando acima pode ser mais rapido que xz -6 enquanto compacta significativamente melhor. No entanto, deve-se enfatizar que apenas alguns arquivos se beneficiam de um grande dicionario, mantendo o valor CompCPU baixo. A situacao mais obvia, onde um grande dicionario pode ajudar muito, e um arquivo contendo arquivos muito semelhantes de pelo menos alguns megabytes cada. O tamanho do dicionario deve ser significativamente maior do que qualquer arquivo individual para permitir que o LZMA2 aproveite ao maximo as semelhancas entre arquivos consecutivos. Se o uso muito alto de memoria do compactador e do descompactador for bom e o arquivo que esta sendo compactado tiver pelo menos varias centenas de megabytes, pode ser util usar um dicionario ainda maior do que os 64 MiB que o xz -9 usaria: xz -vv --lzma2=dict=192MiB big_foo.tar Usar -vv (--verbose --verbose) como no exemplo acima pode ser util para ver os requisitos de memoria do compactador e do descompactador. Lembre-se que usar um dicionario maior que o tamanho do arquivo descompactado e desperdicio de memoria, entao o comando acima nao e util para arquivos pequenos. As vezes, o tempo de compactacao nao importa, mas o uso de memoria do descompactador deve ser mantido baixo, por exemplo, para possibilitar a descompactacao do arquivo em um sistema embarcado. O comando a seguir usa -6e (-6 --extreme) como base e define o dicionario como apenas 64 KiB. O arquivo resultante pode ser descompactado com XZ Embedded (e por isso que existe --check=crc32) usando cerca de 100 KiB de memoria. xz --check=crc32 --lzma2=preset=6e,dict=64KiB foo Se voce deseja espremer o maximo de bytes possivel, ajustar o numero de bits de contexto literal (lc) e o numero de bits de posicao (pb) as vezes pode ajudar. Ajustar o numero de bits de posicao literal (lp) tambem pode ajudar, mas geralmente lc e pb sao mais importantes. Por exemplo, um arquivo de codigo-fonte contem principalmente texto US-ASCII, entao algo como o seguinte pode fornecer um arquivo ligeiramente (como 0,1 %) menor que xz -6e (tente tambem sem lc=4): xz --lzma2=preset=6e,pb=0,lc=4 source_code.tar O uso de outro filtro junto com o LZMA2 pode melhorar a compactacao com determinados tipos de arquivo. Por exemplo, para compactar uma biblioteca compartilhada x86-32 ou x86-64 usando o filtro x86 BCJ: xz --x86 --lzma2 libfoo.so Observe que a ordem das opcoes de filtro e significativa. Se --x86 for especificado apos --lzma2, xz dara um erro, porque nao pode haver nenhum filtro apos LZMA2 e tambem porque o filtro x86 BCJ nao pode ser usado como o ultimo filtro em a corrente. O filtro Delta junto com LZMA2 pode dar bons resultados com imagens bitmap. Ele geralmente deve superar o PNG, que possui alguns filtros mais avancados do que o delta simples, mas usa Deflate para a compactacao real. A imagem deve ser salva em formato nao compactado, por exemplo, como TIFF nao compactado. O parametro de distancia do filtro Delta e definido para corresponder ao numero de bytes por pixel na imagem. Por exemplo, bitmap RGB de 24 bits precisa de dist=3, e tambem e bom passar pb=0 para LZMA2 para acomodar o alinhamento de tres bytes: xz --delta=dist=3 --lzma2=pb=0 foo.tiff Se varias imagens foram colocadas em um unico arquivo (por exemplo, .tar), o filtro Delta tambem funcionara, desde que todas as imagens tenham o mesmo numero de bytes por pixel. VEJA TAMBEM 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)