
curl e o sucessor wget2. A série corrente do GNU Wget é a 1.25.O wget baixa arquivo pelo terminal e — a característica que o tornou insubstituível — retoma download interrompido. Quem já perdeu uma ISO de 2 GB no fim da barra, em conexão ruim, sabe por que isso importa. Ele continua sendo a ferramenta certa para script, para servidor sem interface gráfica e para quando a conexão não é confiável.
De onde veio
O wget nasceu em 1995 como Geturl, escrito por Hrvoje Nikšić. O nome mudou quando o autor soube de um programa homônimo do Amiga, e o W veio de World Wide Web. Faz parte do Projeto GNU, é escrito em C portátil e fala HTTP, HTTPS e FTP.
Ele preencheu um buraco real da época: não havia um programa único e confiável que baixasse por HTTP e FTP sem depender de Perl. E, num tempo de conexão discada e link universitário lento, a capacidade de sobreviver a uma queda de rede sem intervenção humana era o recurso, não um detalhe.
Uma nota de rodapé histórica: em 2010 a analista Chelsea Manning usou o wget, dentro da rede SIPRNet, para baixar os 250 mil telegramas diplomáticos do banco Net-Centric Diplomacy, entregues depois ao WikiLeaks. Os registros das guerras do Iraque e do Afeganistão, que costumam entrar na mesma frase, saíram por outro caminho — foram exportados direto do sistema CIDNE, sem o wget. A ferramenta é neutra; o uso, nem sempre.
O básico
# baixa um arquivo no diretorio atual
wget https://exemplo.com/arquivo.iso
# -c retoma de onde parou, se o arquivo ja existir parcialmente
wget -c https://exemplo.com/arquivo.iso
# salva com outro nome
wget -O ubuntu.iso https://exemplo.com/arquivo.iso
# salva em outro diretorio
wget -P ~/Downloads https://exemplo.com/arquivo.iso
# baixa em segundo plano, com log em wget-log
wget -b https://exemplo.com/arquivo-grande.iso
O -c é o motivo de o comando existir. Ele manda o servidor continuar do byte onde o arquivo local parou, em vez de recomeçar. Funciona se o servidor suportar requisição parcial — quase todos suportam.
Um cuidado que quase ninguém menciona: o -c presume que o arquivo local com aquele nome é o começo 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á existe — o resultado tem o tamanho certo, o conteúdo corrompido e nenhum aviso. Retome só o que você mesmo começou.
Quando a rede é ruim
# tenta indefinidamente, com espera crescente de ate 30s entre tentativas
wget -c --tries=0 --waitretry=30 https://exemplo.com/arquivo.iso
# desiste de uma tentativa que travar por mais de 30s
wget -c --timeout=30 --tries=20 https://exemplo.com/arquivo.iso
# limita a banda, para nao engasgar a conexao da casa ou do escritorio
wget --limit-rate=500k https://exemplo.com/arquivo.iso
Sobre o --waitretry: ele não é intervalo fixo, é um teto. O wget espera 1 segundo após a primeira falha, 2 após a segunda, e assim por diante até o valor que você deu. E o padrão já é 10 segundos, então --waitretry=10 não muda nada — só vale escrever para aumentar. O --tries também já vem em 20; --tries=0 é que significa infinito.
O --limit-rate é subestimado: num servidor compartilhado, baixar a toda velocidade derruba a latência de todo mundo. Segurar em 500 KB/s costuma ser a diferença entre um download educado e um chamado no suporte.
Vários arquivos de uma vez
# um arquivo de texto com uma URL por linha
wget -i lista-de-urls.txt
# continuando e limitando a banda, para uma lista grande
wget -c --limit-rate=1m -i lista-de-urls.txt
# todos os PDFs de uma pagina, sem subir de diretorio
wget -r -l 1 -np -A pdf https://exemplo.com/documentos/
No último, cada flag conta: -r é recursivo, -l 1 limita a um nível de profundidade, -np (no-parent) impede que ele suba para o diretório acima, e -A pdf aceita só PDFs. Sem o -np e sem o -l, um recursivo pode sair baixando o site inteiro.
Espelhar um site
# baixa uma pagina com tudo que ela precisa para abrir offline
wget -p -k https://exemplo.com/artigo.html
# espelho completo do site, navegavel offline
wget --mirror -p -k -P ./copia https://exemplo.com/
-p traz imagens, CSS e scripts da página; -k converte os links para apontar para os arquivos locais; --mirror equivale a -r -N -l inf --no-remove-listing — recursão infinita com verificação de data.
Duas cortesias que evitam bloqueio: use --wait=1 para não martelar o servidor, e respeite o robots.txt. Existe -e robots=off, mas ignorar a política do site é decisão sua e costuma render bloqueio de IP.
Cabeçalhos, autenticação e certificado
# identificar-se como um navegador
wget -U "Mozilla/5.0" https://exemplo.com/arquivo
# enviar um cabecalho (ex.: token de API)
wget --header="Authorization: Bearer SEU_TOKEN" https://api.exemplo.com/dados
# autenticacao HTTP basica
wget --user=usuario --ask-password https://exemplo.com/privado/arquivo
Você vai encontrar, em fóruns, a sugestão de usar --no-check-certificate quando dá erro de SSL. Ela desliga a verificação do certificado e abre caminho para interceptação. Erro de certificado quase sempre é relógio do sistema errado ou pacote de CAs desatualizado — corrija a causa (sudo apt install --reinstall ca-certificates) em vez de desligar a checagem.
wget ou curl?
Os dois baixam arquivo, mas resolvem problemas diferentes:
- wget ganha em download: retoma sozinho, é recursivo, espelha site e insiste quando a rede cai. É a ferramenta de buscar arquivo.
- curl ganha em API: fala muito mais protocolos, monta requisições complexas, envia dados e imprime na saída padrão por natureza — encaixa em pipe. É a ferramenta de conversar com serviço.
wget -O - https://exemplo.com/script.sh | less # wget imprimindo na saida
curl -L -O https://exemplo.com/arquivo.iso # curl salvando com o nome remoto
Note o -L no curl: ele não segue redirecionamento por padrão, e o wget segue. É a pegadinha mais comum de quem troca um pelo outro num script.
E o wget2
O projeto GNU mantém o wget2, reescrito com downloads paralelos, suporte a HTTP/2 e compressão — bem mais rápido em sites com muitos arquivos pequenos. Onde estiver empacotado, instala junto sem conflito, com o binário wget2:
sudo apt install wget2
wget2 --version
A versão instalada, porém, varia bastante — vale conferir antes de contar com um recurso novo:
wget --version | head -1
O Ubuntu 24.04 LTS traz a 1.21.4; o Debian 13, a 1.25.0. E há um caso que quebra a suposição: no Fedora, desde a versão 40, o comando wget já é o wget2 — o pacote clássico foi aposentado e substituído. Onde os dois convivem (Debian, Ubuntu), o wget2 instala ao lado do wget sem conflito. A própria proposta de substituição do Fedora registra as lacunas do sucessor: fora WARC e FTP, ele é compatível.
Confira o download antes de usar
Baixar por conexão instável, com retomada, e sair gravando num pendrive sem verificar é o caminho mais curto para perder uma tarde com uma instalação que falha no meio. Toda distribuição publica um arquivo de somas ao lado da imagem:
wget https://exemplo.com/SHA256SUMS
wget https://exemplo.com/imagem.iso
sha256sum -c SHA256SUMS --ignore-missing
# imagem.iso: SUCESSO
O --ignore-missing evita erro para as outras imagens listadas no arquivo que você não baixou. Se a saída disser FALHOU, o download veio corrompido — apague e baixe de novo, sem -c.
Para continuar
- Usando o comando dd — para gravar no pendrive a ISO que você acabou de baixar
- 500 comandos do Linux
- Manual oficial do GNU Wget