Usando el comando wget en Linux

Mascote do LinuxPro com as mãos no teclado e no mouse, acompanhando um download em progresso no terminal, com pacotes descendo da nuvem

Nota (2026): entrada de 2017, revisada. Los ejemplos se rehícieron (el enlace de Ubuntu 16.04 ya no existe) y añadí lo que el texto original no tenía: límite de ancho de banda, lista de descargas, mirroring de sitio, la comparación honesta con el curl y el sucesor wget2. La serie actual de GNU Wget es la 1.25.

O wget descarga archivos desde la terminal y — la característica que lo hizo insustituible — reanuda la descarga interrumpida. Quien ya ha perdido una ISO de 2 GB al final de la barra, con una conexión mala, sabe por qué esto importa. Sigue siendo la herramienta adecuada para scripting, para servidores sin interfaz gráfica y para cuando la conexión no es fiable.

De dónde viene

El wget nació en 1995 como Geturl, escrito por Hrvoje Nikšić. El nombre cambió cuando el autor se enteró de un programa homónimo de Amiga, y la W proviene de World Wide Web. Forma parte del Proyecto GNU, está escrito en C portátil y habla HTTP, HTTPS y FTP.

Cubrió un hueco real de la época: no existía un único programa fiable que descargase por HTTP y FTP sin depender de Perl. Y, en una época de conexión telefónica y enlace universitario lento, la capacidad de sobrevivir a una caída de red sin intervención humana era la característica, no un detalle.

Una nota a pie de página histórica: en 2010 la analista Chelsea Manning usó wget, dentro de la red SIPRNet, para descargar los 250 mil telegramas diplomáticos del banco Net-Centric Diplomacy, entregados después a WikiLeaks. Los registros de las guerras de Irak y Afganistán, que suelen aparecer en la misma frase, salieron por otro camino: se exportaron directamente desde el sistema CIDNE, sin el wget. La herramienta es neutra; el uso, no siempre.

Lo 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 es el motivo por el que existe el comando. Indica al servidor que continúe desde el byte donde se quedó el archivo local, en lugar de empezar de nuevo. Funciona si el servidor admite solicitudes parciales, algo que hacen casi todos.

Un cuidado que casi nadie menciona: el comando -c asume que el archivo local con ese nombre es el comienzo del archivo remoto. Si allí hay otro archivo cualquiera con el mismo nombre, pide el resto a partir de ese tamaño y lo pega sobre lo que ya existe: el resultado tiene el tamaño correcto, el contenido corrupto y ningún aviso. Retoma únicamente lo que tú mismo comenzaste.

Cuando la red es mala

# 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 el --waitretry: no es un intervalo fijo, es un techo. wget espera 1 segundos tras el primer fallo, 2 tras el segundo, y así sucesivamente hasta el valor que le indicaste. Y el valor por defecto ya es 10 segundos, así que --waitretry=10 no cambia nada — solo merece la pena escribirlo para aumentarlo. El --tries también viene ya en 20; --tries=0 es lo que significa infinito.

O --limit-rate está subestimado: en un servidor compartido, descargar a toda velocidad derriba la latencia de todo el mundo. Limitar a 500 KB/s suele ser la diferencia entre una descarga educada y una llamada al soporte.

Varios archivos a la 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/

En esta última, cada opción cuenta: -r es recursivo, -l 1 limita a un nivel de profundidad, -np (no-parent) evita que suba al directorio superior, y -A pdf acepta solo PDFs. Sin el -np y sin el -l, un recursivo puede terminar descargando todo el sitio.

Espejar un sitio web

# 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 trae imágenes, CSS y scripts de la página; -k convierte los enlaces para que apunten a los archivos locales; --mirror equivale a -r -N -l inf --no-remove-listing — recursión infinita con verificación de fecha.

Dos detalles que evitan bloqueos: usa --wait=1 para no martillear el servidor y respeta la robots.txt. Existe -e robots=off, pero ignorar la política del sitio es decisión tuya y suele acabar en bloqueo de IP.

Cabeceras, autenticación y 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

Vas a encontrar, en foros, la sugerencia de usar --no-check-certificate cuando da error de SSL. Eso desactiva la verificación del certificado y abre la puerta a interceptaciones. Un error de certificado casi siempre es reloj del sistema mal ajustado o paquete de CAs desactualizado — corrige la causa (sudo apt install --reinstall ca-certificates) en vez de desactivar la comprobación.

¿wget o curl?

Ambos descargan archivos, pero resuelven problemas diferentes:

  • wget gana en descarga: retoma solo, es recursivo, replica el sitio e insiste cuando se cae la red. Es la herramienta de buscar archivo.
  • curl gana en API: habla muchos más protocolos, monta solicitudes complejas, envía datos e imprime en la salida estándar por naturaleza — encaja en pipe. Es la herramienta para conversar con un servicio.
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

Fíjate en el -L en curl: no sigue redirecciones por defecto, y wget sí. Es la pega más común de quien intercambia uno por otro en un script.

Y qué pasa con wget2

El proyecto GNU mantiene wget2, reescrito con descargas paralelas, soporte para HTTP/2 y compresión — bastante más rápido en sitios con muchos archivos pequeños. Donde esté empaquetado, se instala junto sin conflicto, con el binario wget2:

sudo apt install wget2
wget2 --version

La versión instalada, sin embargo, varía bastante — vale la pena comprobarla antes de confiar en una función nueva:

wget --version | head -1

Ubuntu 24.04 LTS trae la 1.21.4; Debian 13, la 1.25.0. Y hay un caso que rompe la suposición: en Fedora, desde la versión 40, el comando wget ya es el wget2 — el paquete clásico ha sido jubilado y sustituido. Donde ambos coexisten (Debian, Ubuntu), wget2 se instala junto a wget sin conflicto. La propia propuesta de sustitución de Fedora registra las carencias del sucesor: fuera de WARC y FTP, es compatible.

Verifica la descarga antes de usarla

Descargar con una conexión inestable, con reanudación, y salir grabando en un pendrive sin verificar es el camino más corto para perder una tarde con una instalación que falla a mitad de camino. Toda distribución publica un archivo de sumas junto a la imagen:

wget https://exemplo.com/SHA256SUMS
wget https://exemplo.com/imagem.iso

sha256sum -c SHA256SUMS --ignore-missing
# imagem.iso: SUCESSO

O --ignore-missing evita errores en las demás imágenes listadas en el archivo que no has descargado. Si la salida dice FALLÓ, la descarga llegó corrupta: bórrala y vuelve a descargarla, sin -c.

Para continuar