htop, pcp-htop - visualizador interativo de processos
SINOPSIS
htop [-dCFhpustvH]
pcp-htop [-dCFhpustvH] [--host/-h host]
DESCRIÇÃO
htop é um visualizador de processos baseado em ncurses e multiplataforma.
É semelhante ao top, mas permite que você role vertical e horizontalmente e interaja usando um dispositivo de apontamento (mouse). Você pode observar todos os processos em execução no sistema, juntamente com seus argumentos de linha de comando, bem como visualizá-los em um formato de árvore, selecionar vários processos e agir sobre eles de uma só vez.
Tarefas relacionadas a processos (matar, alterar prioridade) podem ser feitas sem inserir seus PIDs.
pcp-htop é uma versão do htop construída usando a API de Métricas do Performance Co-Pilot (PCP) (veja PCPIntro(1), PMAPI(3)), permitindo estender o htop para exibir valores de métricas arbitrárias. Veja a
seção abaixo intitulada ARQUIVOS DE CONFIGURAÇÃO para mais detalhes.
OPÇÕES DA LINHA DE COMANDO
Os argumentos obrigatórios para opções longas também são obrigatórios para opções curtas.
-d --delay=DELAY
Atraso entre as atualizações, em décimos de segundo. Se o valor do atraso for menor que 1, ele será aumentado para 1, ou seja, 1/10 de segundo. Se o valor do atraso for maior que 100, ele será diminuído para 100, ou seja, 10 segundos.
-C --no-color --no-colour
Inicie o htop no modo monocromático
-F --filter=FILTER
Filtre os processos por termos que correspondam aos comandos. Os termos são correspondidos de forma insensível a maiúsculas e minúsculas e como strings fixas (não expressões regulares). Você pode separar vários termos com "|".
-h --help
Exiba uma mensagem de ajuda e saia
-p --pid=PID,PID...
Mostre apenas os PIDs fornecidos
-s --sort-key COLUMN
Ordene por esta coluna (use --sort-key help para uma lista de colunas). Isso forçará uma exibição em lista a menos que você especifique -t ao mesmo tempo. A ordenação no modo de árvore se aplica aos filhos diretos de cada processo.
-u --user[=USERNAME|UID]
Mostre apenas os processos de um determinado usuário ou do usuário atual, se não for especificado
-U --no-unicode
Não use caracteres Unicode, mas caracteres ASCII para medidores gráficos
-M --no-mouse
Desative o suporte ao controle do mouse
--readonly
Desative todos os recursos de alteração de sistema e processo
-V --version
Exiba informações da versão e saia
-t --tree
Mostre os processos na exibição de árvore. Isso pode ser usado para forçar uma exibição em árvore ao solicitar uma ordem de classificação com -s.
-H --highlight-changes=DELAY
Destaque os processos novos e antigos
--drop-capabilities[=off|basic|strict]
Somente Linux; esta opção deve ter sido habilitada no momento da compilação e requer suporte libcap em tempo de execução. Remova recursos desnecessários do Linux. No modo estrito, recursos como matar, alterar prioridades de processo e ler informações de contabilidade de atraso de processo não funcionarão devido a um número menor de recursos mantidos.
COMANDOS INTERATIVOS
Os seguintes comandos são suportados enquanto estiver em htop:
Tab, Shift-Tab
Seleciona a próxima / a tela anterior a ser exibida. Você pode habilitar a exibição dos nomes das telas na tela de Configuração (F2).
Up, Alt-k
Seleciona (destaca) o processo anterior na lista de processos. Desloca a lista, se necessário.
Down, Alt-j
Seleciona (destaca) o próximo processo na lista de processos. Desloca a lista, se necessário.
Left, Alt-h
Desloca a lista de processos para a esquerda.
Right, Alt-l
Desloca a lista de processos para a direita.
PgUp, PgDn
Desloca a lista de processos para cima ou para baixo, em uma janela.
Home Desloca para o início da lista de processos e seleciona o primeiro processo.
End Desloca para o final da lista de processos e seleciona o último processo.
Ctrl-A, ^
Desloca para a esquerda até o início da entrada do processo (ou seja, o início da linha).
Ctrl-E, $
Desloca para a direita até o final da entrada do processo (ou seja, o final da linha).
Space
Marca ou desmarca um processo. Os comandos que podem operar em vários processos, como "kill", serão então aplicados à lista de processos marcados, em vez do processo atualmente selecionado.
c Marca o processo atual e seus processos filhos. Os comandos que podem operar em vários processos, como "kill", serão então aplicados à lista de processos marcados, em vez do processo atualmente selecionado.
U Desmarca todos os processos (remove todas as marcas adicionadas com as teclas Space ou c).
s Rastreia as chamadas de sistema do processo: se o strace(1) estiver instalado, pressionar esta tecla anexará o strace ao processo atualmente selecionado, apresentando uma atualização em tempo real das chamadas de sistema emitidas pelo processo.
l Exibe os arquivos abertos para um processo: se o lsof(1) estiver instalado, pressionar esta tecla exibirá a lista de descritores de arquivo abertos pelo processo.
w Exibe a linha de comando do processo selecionado em uma tela separada, dividida em várias linhas, se necessário.
x Exibe os bloqueios de arquivo ativos do processo selecionado em uma tela separada.
F1, h, ?
Vai para a tela de ajuda
F2, S
Vai para a tela de configuração, onde você pode configurar os medidores exibidos na parte superior da tela, definir várias opções de exibição, escolher entre esquemas de cores e selecionar quais colunas são exibidas e em qual ordem.
F3, /
Pesquisa incremental nas linhas de comando de todos os processos exibidos. O comando atualmente selecionado (destacado) será atualizado à medida que você digita. Enquanto estiver no modo de pesquisa, pressionar F3 percorrerá as ocorrências correspondentes. Pressionar Shift-F3 percorrerá para trás.
Alternativamente, a pesquisa pode ser iniciada simplesmente digitando o comando que você está procurando, embora, para o primeiro caractere, os atalhos de teclado normais tenham precedência.
F4, \
Filtro incremental de processo: digite parte de uma linha de comando do processo e apenas os processos cujos nomes correspondem serão exibidos. Para cancelar o filtro, entre novamente na opção Filtro e pressione Esc. A correspondência é feita de forma que não diferencia maiúsculas de minúsculas. Os termos são strings fixas (sem regex). Você pode separar vários termos com "|".
F5, t
Visualização em árvore: organiza os processos por hierarquia e exibe as relações entre eles como uma árvore. Alternar a tecla desativará/ativará a visualização em árvore, retornando à visualização de classificação selecionada anteriormente. A seleção de uma visualização de classificação sairá da visualização em árvore.
F6, <, >
Seleciona um campo para classificação, também acessível através de < e >. O campo de classificação atual é indicado por um destaque no cabeçalho.
F7, ]
Aumenta a prioridade do processo selecionado (subtrai do valor de 'nice'). Isso só pode ser feito pelo superusuário.
F8, [
Diminui a prioridade do processo selecionado (adiciona ao valor de 'nice')
Shift-F7, } Aumenta a prioridade do autogrupo do processo selecionado (subtrai do valor de 'nice' do autogrupo). Isso só pode ser feito pelo superusuário.
Shift-F8, { Diminui a prioridade do autogrupo do processo selecionado (adiciona ao valor de 'nice' do autogrupo)
F9, k
“Matar” processo: envia um sinal, selecionado em um menu, para um ou um grupo de processos. Se processos foram marcados, envia o sinal para todos os processos marcados. Se nenhum processo estiver marcado, envia o sinal para o processo atualmente selecionado.
F10, q
Sair
I
Inverter a ordem de classificação: se a ordem de classificação for crescente, alterna para decrescente, e vice-versa.
+, -, *
Quando no modo de visualização em árvore, expande ou recolhe a subárvore. Quando uma subárvore estiver recolhida, um sinal "+" será exibido à esquerda do nome do processo. Pressionar "*" expandirá ou recolherá todos os filhos dos PIDs sem pais, geralmente o PID 1 (init) e o PID 2 (kthreadd no Linux, se os threads do kernel estiverem sendo exibidos).
a (em máquinas multiprocessadas)
Definir afinidade de CPU: especifica quais CPUs um processo tem permissão para usar.
u
Mostrar apenas processos pertencentes a um usuário especificado.
N
Classificar por PID.
M
Classificar por uso de memória (tecla de compatibilidade com o top).
P
Classificar por uso de processador (tecla de compatibilidade com o top).
T
Classificar por tempo (tecla de compatibilidade com o top).
F
“Seguir” processo: se a ordem de classificação fizer com que o processo atualmente selecionado se mova na lista, faz com que a barra de seleção o siga. Isso é útil para monitorar um processo: desta forma, você pode manter um processo sempre visível na tela. Quando uma tecla de movimento for usada, "seguir" perderá o efeito.
K
Ocultar threads do kernel: impede que os threads pertencentes ao kernel sejam exibidos na lista de processos. (Esta é uma tecla de alternância).
H
Ocultar threads de usuário: em sistemas que os representam de forma diferente dos processos normais (como os sistemas baseados em NPTL recentes), isso pode ocultar os threads dos processos do espaço do usuário na lista de processos. (Esta é uma tecla de alternância).
O
Ocultar processos conteinerizados: impede que os processos em execução em um contêiner sejam exibidos na lista de processos. (Esta é uma tecla de alternância).
p
Mostrar caminhos completos para os programas em execução, quando aplicável. (Esta é uma tecla de alternância).
Z
Pausar/retomar as atualizações do processo.
m
Mesclar exe, comm e cmdline, quando aplicável. (Esta é uma tecla de alternância).
Ctrl-L Atualizar: redesenhar a tela e recalcular os valores.
Números Pesquisa de PID: digite o ID do processo e o destaque da seleção será movido para ele.
COLUNAS
As colunas a seguir podem exibir dados sobre cada processo. Um valor de '-' em todas as linhas indica que uma coluna não é suportada no seu sistema, ou que atualmente não foi implementada no htop. Os nomes abaixo são aqueles usados na seção "Colunas Disponíveis" da tela de configuração. Se um nome diferente for exibido na tela principal do htop, ele será mostrado abaixo entre parênteses.
Command
A linha de comando completa do processo (ou seja, nome do programa e argumentos).
Se a opção 'Mesclar exe, comm e cmdline em Command' (ativada pela tecla 'm') estiver ativa, o caminho do executável (/proc/[pid]/exe) e o nome do comando (/proc/[pid]/comm) também serão exibidos, mesclados com a linha de comando, se disponíveis.
O nome base do programa é destacado se estiver configurado. Uma formatação de destaque adicional pode ser configurada para executáveis desatualizados (veja a coluna EXE abaixo).
A coluna Command deve ser a última coluna em cada tela, pois pode ficar muito longa e se beneficia de poder estender seu comprimento dinamicamente.
COMM
O nome do comando do processo obtido de /proc/[pid]/comm, se legível.
Requer kernel Linux 2.6.33 ou mais recente.
EXE
O nome base abreviado do executável do processo, obtido de /proc/[pid]/exe, se legível. O htop pode ler este arquivo no Linux para TODOS os processos apenas se tiver a capacidade CAP_SYS_PTRACE ou privilégios de root.
O nome base é marcado em vermelho se o executável usado para executar o processo foi substituído ou excluído do disco desde que o processo foi iniciado. A informação é obtida processando o conteúdo de /proc/[pid]/exe.
Além disso, o nome base é marcado em amarelo se alguma biblioteca for relatada como tendo sido substituída ou excluída do disco desde que foi carregada pela última vez. A informação é obtida processando o conteúdo de /proc/[pid]/maps.
Ao decidir a cor, a substituição do executável principal sempre tem precedência sobre a substituição de qualquer outra biblioteca. Se apenas o mapa de memória indicar uma substituição do executável principal, isso será exibido como se qualquer outra biblioteca tivesse sido substituída ou excluída.
Esta formatação de cores adicional pode ser configurada na seção "Opções de Exibição" da tela de configuração.
Exibir EXE requer CAP_SYS_PTRACE e PTRACE_MODE_READ_FSCRED.
PID
O ID do processo.
STATE (S)
O estado do processo: S para em repouso I para inativo (inatividade mais longa do que em repouso em plataformas que fazem essa distinção) R para em execução D para em repouso no disco (não interrompível) Z para zumbi (aguardando que o processo pai leia seu status de saída) T para rastreado ou suspenso (por exemplo, por SIGTSTP) W para paginação
PPID
O ID do processo pai.
PGRP
O ID do grupo do processo.
SESSION (SID)
O ID da sessão do processo.
TTY
O terminal de controle do processo.
TPGID
O ID do processo do processo em primeiro plano do grupo de controle do terminal.
MINFLT
O número de falhas de página ocorrendo na memória principal.
CMINFLT
O número de falhas menores para os processos filhos em espera (veja MINFLT acima).
MAJFLT
O número de falhas de página ocorrendo fora da memória principal.
CMAJFLT
O número de falhas graves para os processos filhos em espera (veja MAJFLT acima).
UTIME (UTIME+)
O tempo de CPU do usuário, que é a quantidade de tempo que o processo passou executando na CPU em modo de usuário (ou seja, tudo, exceto chamadas de sistema), medido em ticks de clock.
STIME (STIME+)
O tempo de CPU do sistema, que é a quantidade de tempo que o kernel passou executando chamadas de sistema em nome do processo, medido em ticks de clock.
CUTIME (CUTIME+)
O tempo de CPU do usuário dos filhos, que é a quantidade de tempo que os processos filhos em espera passaram executando em modo de usuário (veja UTIME acima).
CSTIME (CSTIME+)
O tempo de CPU do sistema dos filhos, que é a quantidade de tempo que o kernel passou executando chamadas de sistema em nome de todos os processos filhos em espera (veja STIME acima).
PRIORITY (PRI)
A prioridade interna do kernel para o processo, geralmente apenas seu valor "nice" mais vinte. Diferente para processos em tempo real.
NICE (NI)
O valor "nice" de um processo, de 19 (baixa prioridade) a -20 (alta prioridade). Um valor alto significa que o processo está sendo "gentil", permitindo que outros tenham uma prioridade relativa maior. As restrições de permissão do SO para ajustar a prioridade se aplicam.
STARTTIME (START)
O tempo em que o processo foi iniciado.
PROCESSOR (CPU)
O ID da CPU na qual o processo foi executado pela última vez.
M_VIRT (VIRT)
O tamanho da memória virtual do processo.
M_RESIDENT (RES)
O tamanho do conjunto residente (texto + dados + pilha) do processo (ou seja, o tamanho da memória física usada do processo).
M_SHARE (SHR)
O tamanho das páginas compartilhadas do processo.
M_TRS (CODE)
O tamanho do conjunto residente de texto do processo (ou seja, o tamanho das instruções executáveis do processo).
M_DRS (DATA)
O tamanho do conjunto residente de dados (dados + pilha) do processo (ou seja, o tamanho de tudo, exceto as instruções executáveis do processo).
M_LRS (LIB)
O tamanho da biblioteca do processo.
M_SWAP (SWAP)
O tamanho das páginas trocadas do processo.
M_PSS (PSS)
O tamanho proporcional do conjunto, o mesmo que M_RESIDENT, mas cada página é dividida pelo número de processos que a compartilham.
M_M_PSSWP (PSSWP)
A participação proporcional de troca deste mapeamento, ao contrário de M_SWAP, isso não leva em conta as páginas trocadas de objetos shmem subjacentes.
ST_UID (UID)
O ID do usuário do proprietário do processo.
PERCENT_CPU (CPU%)
A porcentagem do tempo de CPU que o processo está usando atualmente. Esta é a maneira padrão de representar o uso da CPU no Linux. Cada processo pode consumir até 100%, o que significa a capacidade total do núcleo em que está sendo executado. Isso às vezes é chamado de "modo Irix", por exemplo, em top(1).
PERCENT_NORM_CPU (NCPU%)
A porcentagem do tempo de CPU que o processo está usando atualmente, normalizada pelo número de CPUs. Isso às vezes é chamado de "modo Solaris", por exemplo, em top(1).
PERCENT_MEM (MEM%)
A porcentagem de memória que o processo está usando atualmente (com base no tamanho da memória residente do processo, veja M_RESIDENT acima).
USER O nome de usuário do proprietário do processo, ou o ID do usuário se o nome não puder ser determinado.
No Linux, o nome de usuário é destacado se o processo tiver privilégios elevados, ou seja, se tiver sido iniciado a partir de binários com capacidades de arquivo definidas ou mantidas, por meio do conjunto ambiente, após a mudança do usuário raiz.
TIME (TIME+)
O tempo, medido em ticks de relógio, que o processo passou em tempo de usuário e tempo de sistema (veja UTIME, STIME acima).
NLWP O número de processos leves (=threads) no processo.
TGID O ID do grupo de threads.
CTID ID do contêiner OpenVZ, também conhecido como ID do ambiente virtual.
VPID ID do processo OpenVZ.
VXID ID do processo VServer.
RCHAR (RD_CHAR)
O número de bytes que o processo leu.
WCHAR (WR_CHAR)
O número de bytes que o processo escreveu.
SYSCR (RD_SYSC)
O número de chamadas de sistema read(2) para o processo.
SYSCW (WR_SYSC)
O número de chamadas de sistema write(2) para o processo.
RBYTES (IO_RBYTES)
Bytes de E/S read(2) para o processo.
WBYTES (IO_WBYTES)
Bytes de E/S write(2) para o processo.
CNCLWB (IO_CANCEL)
Bytes de E/S write(2) cancelada.
IO_READ_RATE (DISK READ)
A taxa de E/S de read(2) em bytes por segundo, para o processo.
IO_WRITE_RATE (DISK WRITE)
A taxa de E/S de write(2) em bytes por segundo, para o processo.
IO_RATE (DISK R/W)
A taxa de E/S, IO_READ_RATE + IO_WRITE_RATE (veja acima).
CGROUP
Em qual cgroup o processo está. Para uma visualização abreviada, veja a coluna CCGROUP abaixo.
CCGROUP
Visualização abreviada do nome do cgroup no qual o processo está. Isso executa algumas substituições baseadas em padrões para encurtar a string exibida e, assim, condensar as informações.
/*.slice é encurtado para /[*] (exceções abaixo)
/system.slice é encurtado para /[S]
/user.slice é encurtado para /[U]
/user-*.slice é encurtado para /[U:*] (imediatamente antes de /[U] antes de ser removido)
/machine.slice é encurtado para /[M]
/machine-*.scope é encurtado para /[SNC:*] (SNC: contêiner systemd nspawn), maiúsculo para o monitor
/lxc.monitor.* é encurtado para /[LXC:*]
/lxc.payload.* é encurtado para /[lxc:*]
/*.scope é encurtado para /!*
/*.service é encurtado para /* (sufixo removido)
Sequências de escape encontradas (por exemplo, do systemd) dentro do nome do cgroup não são decodificadas.
OOM Pontuação do eliminador OOM.
CTXT Soma incremental de trocas de contexto voluntárias e não voluntárias.
IO_PRIORITY (IO)
A classe de agendamento de E/S, seguida da prioridade, se a classe a suportar:
R para tempo real
B para melhor esforço
id para inativo
PERCENT_CPU_DELAY (CPUD%)
A porcentagem de tempo gasto aguardando uma CPU (enquanto está em execução). Requer CAP_NET_ADMIN.
PERCENT_IO_DELAY (IOD%)
A porcentagem de tempo gasto aguardando a conclusão de E/S de bloco síncrona. Requer CAP_NET_ADMIN.
PERCENT_SWAP_DELAY (SWAPD%)
A porcentagem de tempo gasto na troca de páginas. Requer CAP_NET_ADMIN.
AGRP O identificador de autogrupo para o processo. Requer que o CFS do Linux esteja habilitado.
ANI O valor "nice" do autogrupo para o processo do autogrupo. Requer que o Linux CFS esteja habilitado.
Todas as outras flags Atualmente não suportado (sempre exibe '-').
BIBLIOTECAS EXTERNAS
Embora o htop dependa da maioria das bibliotecas que usa no momento da compilação, existem duas exceções notáveis a essa regra. Essas exceções estão relacionadas aos dados exibidos nos medidores no cabeçalho do htop e foram intencionalmente criadas como dependências opcionais em tempo de execução. Essas exceções são descritas abaixo:
libsystemd
As vinculações para libsystemd são usadas no medidor SystemD para determinar o número de serviços ativos e o estado geral do sistema. A busca pelas funções para determinar essas informações em tempo de execução permite que as compilações suportem esses medidores sem forçar o gerenciador de pacotes a instalar essas bibliotecas em sistemas que, de outra forma, não usam o systemd.
Resumo: sem dependência em tempo de compilação, dependência opcional em tempo de execução em libsystemd por meio de carregamento dinâmico, com fallback [systemctl]({filename}../../systemctl)(1).
libsensors
As vinculações para libsensors são usadas para as leituras de temperatura da CPU nos medidores de uso da CPU, se a exibição da temperatura estiver habilitada por meio da tela de configuração. Para que o htop mostre essas temperaturas corretamente, no entanto, é necessária uma configuração adequada do libsensors por meio de seus arquivos de configuração usuais e que todos os núcleos da CPU correspondam aos sensores de temperatura do driver coretemp, com o núcleo 0 correspondendo a um sensor rotulado como "Core 0". O pacote de temperatura pode ser fornecido como "Pacote id 0". Se ausente, ele é inferido como o valor máximo das leituras disponíveis por núcleo.
Resumo: dependência em tempo de compilação nos arquivos de cabeçalho C do libsensors(3), dependência opcional em tempo de execução no libsensors(3) por meio de carregamento dinâmico.
ARQUIVOS DE CONFIGURAÇÃO
Por padrão, o htop lê sua configuração do caminho compatível com XDG, \~/.config/htop/htoprc. O arquivo de configuração é sobrescrito após o encerramento limpo pelo programa de configuração interno do htop, portanto, não deve ser editado manualmente. Se nenhuma configuração de usuário existir, o htop tenta ler a configuração em todo o sistema de /etc/htoprc e, como último recurso, recorre a seus valores padrão codificados.
Você pode substituir o local do arquivo de configuração usando a variável de ambiente $HTOPRC (para que você possa ter várias configurações para diferentes máquinas que compartilham o mesmo diretório inicial, por exemplo).
O utilitário pcp-htop faz uso de htoprc de maneira semelhante. No entanto, o pcp-htop lê sua configuração de um caminho mais convencionalmente usado pelas ferramentas Performance Co-Pilot, \~/.pcp/htop/htoprc, para fornecer uma configuração separada quando o htop e o pcp-htop estiverem instalados e em uso. O pcp-htop oferece suporte a arquivos de configuração adicionais abaixo do mesmo diretório, permitindo que novos medidores, colunas e guias de tela sejam adicionados por meio da tela de configuração (F2). Isso exibe medidores, colunas e guias de tela adicionais disponíveis para cada medidor, coluna ou configuração de tela.
Estes arquivos de configuração do pcp-htop são lidos uma vez na inicialização. O formato desses arquivos é descrito em detalhes na página de manual pcp-htop(5).
Essa funcionalidade torna disponíveis muitos milhares de métricas do Performance Co-Pilot para exibição pelo pcp-htop, bem como a capacidade de exibir métricas personalizadas adicionadas em locais individuais. Aplicações e serviços instrumentados usando o formato OpenMetrics https://openmetrics.io também podem ser exibidos pelo pcp-htop, caso o componente pmdaopenmetrics(1) esteja configurado.
A configuração para htop e pcp-htop é salva apenas quando uma saída limpa é realizada. Enviar qualquer sinal fará com que todas as alterações de configuração sejam perdidas.
TAMANHOS DE MEMÓRIA
Os tamanhos de memória no htop são exibidos em um formato legível. Os tamanhos são impressos em potências de 1024 usando unidades IEC binárias. Se nenhum sufixo for exibido, as unidades são implicitamente K, como em KiB (kibibyte, 1 KiB = 1024 bytes).
A decisão de usar esta convenção foi tomada para economizar espaço na tela e tornar as representações de tamanho de memória consistentes em todo o htop, pois as alocações são granulares até páginas de memória completas (4 KiB para a maioria das plataformas).
VER TAMBÉM
proc(5), top(1), free(1), ps(1), uptime(1) e limits.conf(5).
VER TAMBÉM PARA PCP
pmdaopenmetrics(1), PCPIntro(1), PMAPI(3) e pcp-htop(5).
AUTORES
htop foi originalmente desenvolvido por Hisham Muhammad. Atualmente, é mantido pela comunidade em <_>.
pcp-htop é mantido como uma colaboração entre as comunidades <_> e <_>, e faz parte do conjunto de ferramentas Performance Co-Pilot.
DIREITOS AUTORAIS
Copyright © 2004-2019 Hisham Muhammad. Copyright © 2020-2025 equipe de desenvolvimento htop.
Licença GPLv2+: GNU General Public License versão 2 ou, à sua escolha, qualquer versão posterior.
Este é um software livre: você tem liberdade para modificá-lo e redistribuí-lo. NÃO HÁ GARANTIA, na medida permitida por lei.