{"id":151,"date":"2017-04-06T11:01:28","date_gmt":"2017-04-06T14:01:28","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2017\/04\/usando-comando-wget-no-linux\/"},"modified":"2026-09-08T02:28:46","modified_gmt":"2026-09-08T05:28:46","slug":"usando-comando-wget-no-linux","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/usando-comando-wget-no-linux\/","title":{"rendered":"Usando o comando wget no Linux"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro com as m\u00e3os no teclado e no mouse, acompanhando um download em progresso no terminal, com pacotes descendo da nuvem\" src=\"\/wp-content\/uploads\/2026\/09\/wget-v3.webp\" width=\"1052\" height=\"652\" \/><\/p>\n<div style=\"background:#fff8e1;border-left:4px solid #8b1a1a;padding:.8em 1em;margin:1em 0\"><strong>Nota (2026):<\/strong> post de 2017, revisado. Os exemplos foram refeitos (o link do Ubuntu 16.04 j\u00e1 n\u00e3o existe) e acrescentei o que o texto original n\u00e3o tinha: limite de banda, lista de downloads, espelhamento de site, a compara\u00e7\u00e3o honesta com o <code data-no-translation=\"\">curl<\/code> e o sucessor <code data-no-translation=\"\">wget2<\/code>. A s\u00e9rie corrente do GNU Wget \u00e9 a <strong>1.25<\/strong>.<\/div>\n<p>O <strong>wget<\/strong> baixa arquivo pelo terminal e \u2014 a caracter\u00edstica que o tornou insubstitu\u00edvel \u2014 <strong>retoma download interrompido<\/strong>. Quem j\u00e1 perdeu uma ISO de 2 GB no fim da barra, em conex\u00e3o ruim, sabe por que isso importa. Ele continua sendo a ferramenta certa para script, para servidor sem interface gr\u00e1fica e para quando a conex\u00e3o n\u00e3o \u00e9 confi\u00e1vel.<\/p>\n<p><!-- more --><\/p>\n<h2>De onde veio<\/h2>\n<p>O wget nasceu em 1995 como <strong>Geturl<\/strong>, escrito por Hrvoje Nik\u0161i\u0107. O nome mudou quando o autor soube de um programa hom\u00f4nimo do Amiga, e o <em>W<\/em> veio de World Wide Web. Faz parte do Projeto GNU, \u00e9 escrito em C port\u00e1til e fala HTTP, HTTPS e FTP.<\/p>\n<p>Ele preencheu um buraco real da \u00e9poca: n\u00e3o havia um programa \u00fanico e confi\u00e1vel que baixasse por HTTP e FTP sem depender de Perl. E, num tempo de conex\u00e3o discada e link universit\u00e1rio lento, a capacidade de sobreviver a uma queda de rede sem interven\u00e7\u00e3o humana era o recurso, n\u00e3o um detalhe.<\/p>\n<p>Uma nota de rodap\u00e9 hist\u00f3rica: em 2010 a analista Chelsea Manning usou o wget, dentro da rede SIPRNet, para baixar os <strong>250 mil telegramas diplom\u00e1ticos<\/strong> do banco Net-Centric Diplomacy, entregues depois ao WikiLeaks. Os registros das guerras do Iraque e do Afeganist\u00e3o, que costumam entrar na mesma frase, sa\u00edram por outro caminho \u2014 foram exportados direto do sistema CIDNE, sem o wget. A ferramenta \u00e9 neutra; o uso, nem sempre.<\/p>\n<h2>O b\u00e1sico<\/h2>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># baixa um arquivo no diretorio atual\nwget https:\/\/exemplo.com\/arquivo.iso\n\n# -c retoma de onde parou, se o arquivo ja existir parcialmente\nwget -c https:\/\/exemplo.com\/arquivo.iso\n\n# salva com outro nome\nwget -O ubuntu.iso https:\/\/exemplo.com\/arquivo.iso\n\n# salva em outro diretorio\nwget -P ~\/Downloads https:\/\/exemplo.com\/arquivo.iso\n\n# baixa em segundo plano, com log em wget-log\nwget -b https:\/\/exemplo.com\/arquivo-grande.iso\n<\/code><\/pre>\n<p>O <code data-no-translation=\"\">-c<\/code> \u00e9 o motivo de o comando existir. Ele manda o servidor continuar do byte onde o arquivo local parou, em vez de recome\u00e7ar. Funciona se o servidor suportar requisi\u00e7\u00e3o parcial \u2014 quase todos suportam.<\/p>\n<p>Um cuidado que quase ningu\u00e9m menciona: o <code data-no-translation=\"\">-c<\/code> <strong>presume<\/strong> que o arquivo local com aquele nome \u00e9 o come\u00e7o do arquivo remoto. Se houver ali outro arquivo qualquer de mesmo nome, ele pede o resto a partir daquele tamanho e cola no que j\u00e1 existe \u2014 o resultado tem o tamanho certo, o conte\u00fado corrompido e nenhum aviso. Retome s\u00f3 o que voc\u00ea mesmo come\u00e7ou.<\/p>\n<h2>Quando a rede \u00e9 ruim<\/h2>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># tenta indefinidamente, com espera crescente de ate 30s entre tentativas\nwget -c --tries=0 --waitretry=30 https:\/\/exemplo.com\/arquivo.iso\n\n# desiste de uma tentativa que travar por mais de 30s\nwget -c --timeout=30 --tries=20 https:\/\/exemplo.com\/arquivo.iso\n\n# limita a banda, para nao engasgar a conexao da casa ou do escritorio\nwget --limit-rate=500k https:\/\/exemplo.com\/arquivo.iso\n<\/code><\/pre>\n<p>Sobre o <code data-no-translation=\"\">--waitretry<\/code>: ele n\u00e3o \u00e9 intervalo fixo, \u00e9 um <em>teto<\/em>. O wget espera 1 segundo ap\u00f3s a primeira falha, 2 ap\u00f3s a segunda, e assim por diante at\u00e9 o valor que voc\u00ea deu. E o padr\u00e3o j\u00e1 \u00e9 10 segundos, ent\u00e3o <code data-no-translation=\"\">--waitretry=10<\/code> n\u00e3o muda nada \u2014 s\u00f3 vale escrever para aumentar. O <code data-no-translation=\"\">--tries<\/code> tamb\u00e9m j\u00e1 vem em 20; <code data-no-translation=\"\">--tries=0<\/code> \u00e9 que significa infinito.<\/p>\n<p>O <code data-no-translation=\"\">--limit-rate<\/code> \u00e9 subestimado: num servidor compartilhado, baixar a toda velocidade derruba a lat\u00eancia de todo mundo. Segurar em 500 KB\/s costuma ser a diferen\u00e7a entre um download educado e um chamado no suporte.<\/p>\n<h2>V\u00e1rios arquivos de uma vez<\/h2>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># um arquivo de texto com uma URL por linha\nwget -i lista-de-urls.txt\n\n# continuando e limitando a banda, para uma lista grande\nwget -c --limit-rate=1m -i lista-de-urls.txt\n\n# todos os PDFs de uma pagina, sem subir de diretorio\nwget -r -l 1 -np -A pdf https:\/\/exemplo.com\/documentos\/\n<\/code><\/pre>\n<p>No \u00faltimo, cada flag conta: <code data-no-translation=\"\">-r<\/code> \u00e9 recursivo, <code data-no-translation=\"\">-l 1<\/code> limita a um n\u00edvel de profundidade, <code data-no-translation=\"\">-np<\/code> (<em>no-parent<\/em>) impede que ele suba para o diret\u00f3rio acima, e <code data-no-translation=\"\">-A pdf<\/code> aceita s\u00f3 PDFs. Sem o <code data-no-translation=\"\">-np<\/code> e sem o <code data-no-translation=\"\">-l<\/code>, um recursivo pode sair baixando o site inteiro.<\/p>\n<h2>Espelhar um site<\/h2>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># baixa uma pagina com tudo que ela precisa para abrir offline\nwget -p -k https:\/\/exemplo.com\/artigo.html\n\n# espelho completo do site, navegavel offline\nwget --mirror -p -k -P .\/copia https:\/\/exemplo.com\/\n<\/code><\/pre>\n<p><code data-no-translation=\"\">-p<\/code> traz imagens, CSS e scripts da p\u00e1gina; <code data-no-translation=\"\">-k<\/code> converte os links para apontar para os arquivos locais; <code data-no-translation=\"\">--mirror<\/code> equivale a <code data-no-translation=\"\">-r -N -l inf --no-remove-listing<\/code> \u2014 recurs\u00e3o infinita com verifica\u00e7\u00e3o de data.<\/p>\n<p>Duas cortesias que evitam bloqueio: use <code data-no-translation=\"\">--wait=1<\/code> para n\u00e3o martelar o servidor, e respeite o <code data-no-translation=\"\">robots.txt<\/code>. Existe <code data-no-translation=\"\">-e robots=off<\/code>, mas ignorar a pol\u00edtica do site \u00e9 decis\u00e3o sua e costuma render bloqueio de IP.<\/p>\n<h2>Cabe\u00e7alhos, autentica\u00e7\u00e3o e certificado<\/h2>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># identificar-se como um navegador\nwget -U \"Mozilla\/5.0\" https:\/\/exemplo.com\/arquivo\n\n# enviar um cabecalho (ex.: token de API)\nwget --header=\"Authorization: Bearer SEU_TOKEN\" https:\/\/api.exemplo.com\/dados\n\n# autenticacao HTTP basica\nwget --user=usuario --ask-password https:\/\/exemplo.com\/privado\/arquivo\n<\/code><\/pre>\n<p>Voc\u00ea vai encontrar, em f\u00f3runs, a sugest\u00e3o de usar <code data-no-translation=\"\">--no-check-certificate<\/code> quando d\u00e1 erro de SSL. Ela desliga a verifica\u00e7\u00e3o do certificado e abre caminho para intercepta\u00e7\u00e3o. Erro de certificado quase sempre \u00e9 rel\u00f3gio do sistema errado ou pacote de CAs desatualizado \u2014 corrija a causa (<code data-no-translation=\"\">sudo apt install --reinstall ca-certificates<\/code>) em vez de desligar a checagem.<\/p>\n<h2>wget ou curl?<\/h2>\n<p>Os dois baixam arquivo, mas resolvem problemas diferentes:<\/p>\n<ul>\n<li><strong>wget<\/strong> ganha em download: retoma sozinho, \u00e9 recursivo, espelha site e insiste quando a rede cai. \u00c9 a ferramenta de <em>buscar arquivo<\/em>.<\/li>\n<li><strong>curl<\/strong> ganha em API: fala muito mais protocolos, monta requisi\u00e7\u00f5es complexas, envia dados e imprime na sa\u00edda padr\u00e3o por natureza \u2014 encaixa em pipe. \u00c9 a ferramenta de <em>conversar com servi\u00e7o<\/em>.<\/li>\n<\/ul>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">wget -O - https:\/\/exemplo.com\/script.sh | less   # wget imprimindo na saida\ncurl -L -O https:\/\/exemplo.com\/arquivo.iso       # curl salvando com o nome remoto\n<\/code><\/pre>\n<p>Note o <code data-no-translation=\"\">-L<\/code> no curl: ele n\u00e3o segue redirecionamento por padr\u00e3o, e o wget segue. \u00c9 a pegadinha mais comum de quem troca um pelo outro num script.<\/p>\n<h2>E o wget2<\/h2>\n<p>O projeto GNU mant\u00e9m o <a href=\"https:\/\/gitlab.com\/gnuwget\/wget2\">wget2<\/a>, reescrito com downloads paralelos, suporte a HTTP\/2 e compress\u00e3o \u2014 bem mais r\u00e1pido em sites com muitos arquivos pequenos. Onde estiver empacotado, instala junto sem conflito, com o bin\u00e1rio <code data-no-translation=\"\">wget2<\/code>:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo apt install wget2\nwget2 --version\n<\/code><\/pre>\n<p>A vers\u00e3o instalada, por\u00e9m, varia bastante \u2014 vale conferir antes de contar com um recurso novo:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">wget --version | head -1\n<\/code><\/pre>\n<p>O Ubuntu 24.04 LTS traz a <strong>1.21.4<\/strong>; o Debian 13, a <strong>1.25.0<\/strong>. E h\u00e1 um caso que quebra a suposi\u00e7\u00e3o: <strong>no Fedora, desde a vers\u00e3o 40, o comando <code data-no-translation=\"\">wget<\/code> j\u00e1 \u00e9 o wget2<\/strong> \u2014 o pacote cl\u00e1ssico foi aposentado e substitu\u00eddo. Onde os dois convivem (Debian, Ubuntu), o wget2 instala ao lado do wget sem conflito. A pr\u00f3pria proposta de substitui\u00e7\u00e3o do Fedora registra as lacunas do sucessor: fora WARC e FTP, ele \u00e9 compat\u00edvel.<\/p>\n<h2>Confira o download antes de usar<\/h2>\n<p>Baixar por conex\u00e3o inst\u00e1vel, com retomada, e sair gravando num pendrive sem verificar \u00e9 o caminho mais curto para perder uma tarde com uma instala\u00e7\u00e3o que falha no meio. Toda distribui\u00e7\u00e3o publica um arquivo de somas ao lado da imagem:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">wget https:\/\/exemplo.com\/SHA256SUMS\nwget https:\/\/exemplo.com\/imagem.iso\n\nsha256sum -c SHA256SUMS --ignore-missing\n# imagem.iso: SUCESSO\n<\/code><\/pre>\n<p>O <code data-no-translation=\"\">--ignore-missing<\/code> evita erro para as outras imagens listadas no arquivo que voc\u00ea n\u00e3o baixou. Se a sa\u00edda disser <em>FALHOU<\/em>, o download veio corrompido \u2014 apague e baixe de novo, sem <code data-no-translation=\"\">-c<\/code>.<\/p>\n<h2>Para continuar<\/h2>\n<ul>\n<li><a href=\"\/es\/2017\/04\/usando-comando-dd-no-linux\/\">Usando o comando dd<\/a> \u2014 para gravar no pendrive a ISO que voc\u00ea acabou de baixar<\/li>\n<li><a href=\"\/es\/2017\/04\/500-comandos-do-linux\/\">500 comandos do Linux<\/a><\/li>\n<li><a href=\"https:\/\/www.gnu.org\/software\/wget\/manual\/wget.html\">Manual oficial do GNU Wget<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>O wget baixa arquivo pelo terminal e \u2014 a caracter\u00edstica que o tornou insubstitu\u00edvel \u2014 retoma download interrompido. Quem j\u00e1 perdeu uma ISO de 2 GB no fim da barra, em conex\u00e3o ruim, sabe por que isso importa. Ele continua &#8230; <a title=\"Usando o comando wget no Linux\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/usando-comando-wget-no-linux\/\" aria-label=\"Read more about Usando o comando wget no Linux\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,2],"tags":[124,413,412,4,117,411],"class_list":["post-151","post","type-post","status-publish","format-standard","hentry","category-dicas","category-linux","tag-comandos","tag-curl","tag-download","tag-linux","tag-terminal","tag-wget"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=151"}],"version-history":[{"count":6,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/151\/revisions"}],"predecessor-version":[{"id":1073,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/151\/revisions\/1073"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}