Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

DesarrolloEmuladoresInternetJuegosMultimediaSistema

Gestores de Descargas - FreeRapidGestores de Descargas - ProzGUI

Gestores de Descargas - GNU - Wget




Gestores de Descargas - GNU Wget




Copyright

Copyright © José Luis Lara Carrascal  2008-2024   http://manualinux.es



Sumario

Introducción
Instalación
Configuración
Ejemplos de uso
Enlaces




Introducción  

GNU Wget
, al que para abreviar vamos a llamar simplemente Wget, es una utilidad de línea de comandos para la descarga no-interactiva de archivos de internet. Soporta los protocolos HTTP, HTTPS y FTP, así como el uso de proxys HTTP. Cuando hablamos de descarga no-interactiva nos referimos al hecho de que el programa puede funcionar sin la presencia del usuario, trabajando en 2º plano, cancelando la descarga cuando el sistema se apague y pudiendo reanudarla en el próximo inicio.

Es la utilidad preferida de la mayoría de programas de GNU/Linux que requieren de conectarse a internet para la descarga de archivos, se adapta a la velocidad de conexión y al consumo de recursos del sistema de una manera asombrosa, y su consumo de cpu y memoria es simplemente ridículo, si lo comparamos con los gestores de descargas en modo gráfico que existen en GNU/Linux, algunos de ellos meras interfaces gráficas de uso de Wget.

No sólo puede descargar archivos, sino que también puede descargar páginas web en formato HTML y XHTML, recreando la estructura, de forma local, del directorio ubicado en el servidor, respetando el archivo de exclusión (robots.txt) y convirtiendo los enlaces para poder visualizarlas cuando no se está conectado a internet.



Instalación  

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado Wget para la elaboración de este documento.

* GCC - (13.2.0) o Clang - (18.1.0)
* Gawk - (5.3.0)
* M4 - (1.4.19)
* Libtool - (2.4.7)
* Make - (4.4.1
* Automake - (1.16.5)
* Gettext - (0.22.5)
* Autoconf - (2.72)
* Flex - (2.6.4)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* GnuTLS - (3.8.3)
* Gpgme - (1.23.2)
* Libidn2 - (2.3.7)
* Libmetalink - (0.1.3)
* Libpsl - (0.21.5)
* Libunistring - (1.2)
* Nettle - (3.9.1)
* PCRE2 - (10.43)
* Zlib - (1.3.1)



Descarga

wget-1.24.5.tar.lz

Optimizaciones

$ export {C,CXX}FLAGS='-O3 -march=znver3 -mtune=znver3'

Donde pone znver3 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla:
Nota informativa sobre las optimizaciones para GCC
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Nota informativa sobre las optimizaciones para Clang
* La opción '-mtune=' está soportada a partir de la versión 3.4 de Clang.

* Los valores de color azul no son compatibles con Clang.

* Las filas con el fondo de color amarillo son valores exclusivos de Clang y, por lo tanto, no son aplicables con GCC.
Valores CPU
Genéricos
Intel
AMD

Optimizaciones adicionales

Optimizaciones adicionales 
GCC
Graphite
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
LTO
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto'
En versiones inferiores a GCC 10, sustituir auto por el número de núcleos que tenga nuestro procesador. Si sólo tiene uno, utilizar el parámetro -flto
PGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/wget'
2) Ejecutar 'make check' en el directorio de compilación.
3) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/wget -Wno-error=coverage-mismatch'
Clang
Polly
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
LTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto'
ThinLTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto=thin'
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma.
Unified LTO
LTO >> ThinLTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin'
ThinLTO >> LTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full'
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD.
PGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/wget'
2) Ejecutar 'make check' en el directorio de compilación.
3) Conversión del perfil de optimización a un formato legible por Clang.
$ PGODIR=/var/pgo/wget; llvm-profdata merge $PGODIR/default_*.profraw --output=$PGODIR/default.profdata
4) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/wget'
CSPGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-use=/var/pgo/wget -fcs-profile-generate=/var/pgo/wget'
2) Ejecutar 'make check' en el directorio de compilación.
3) Conversión y mezcla con el perfil PGO, del perfil de optimización a un formato legible por Clang.
$ PGODIR=/var/pgo/wget; llvm-profdata merge $PGODIR/default_*.profraw \
$PGODIR/default.profdata --output=$PGODIR/cspgo.profdata
4) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/wget/cspgo.profdata'

Parámetros adicionales

Parámetros adicionales de eliminación de avisos en el proceso de compilación
$ export {C,CXX}FLAGS+=' -w'

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc13/lib64"
Cada usuario tendrá que establecer la ruta de búsqueda de directorios, en función de la distribución que utilice.

Establecer el uso de enlazador dinámico para Mold
$ export LDFLAGS+=' -fuse-ld=mold'

Establecer el uso de enlazador dinámico para LLD
Clang
$ export LDFLAGS+=' -fuse-ld=lld'
Optimizaciones complementarias LTO/ThinLTO/PGO de LLD
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt'
Optimizaciones complementarias LTO de LLD
$ export LDFLAGS+=" -Wl,--lto-partitions=$(expr $(nproc) / 2)"
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)"

Establecer la variable de entorno de uso de compilador para Clang
$ export CC=clang CXX=clang++

Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar lxvf wget-1.24.5.tar.lz
$ cd wget-1.24.5
$ ./configure --prefix=/usr --sysconfdir=/etc

Explicación de los comandos

--prefix=/usr : Instala el programa en el directorio principal /usr.
--sysconfdir=/etc : Instala el archivo de configuración en /etc, en lugar de /usr/etc.

Compilación

$ make

Parámetros de compilación opcionales

-j$(nproc)) : Establece el número de procesos de compilación en paralelo, en función del número de núcleos e hilos que tenga nuestro procesador, tomando como referencia la información mostrada por el sistema con el comando correspondiente. Si nuestro procesador es mononúcleo de un solo hilo, no añadir esta opción.

Instalación como root

$ su -c "make install-strip"

Instalación del archivo de configuración personal en nuestro home

$ cp /etc/wgetrc ~/.wgetrc

Borrar las locales adicionales instaladas con la utilidad BleachBit

$ su -c "bleachbit -c system.localizations"

Estadísticas de Compilación e Instalación de Wget

Estadísticas de Compilación e Instalación de Wget
CPU AMD Ryzen 3 5 5500
MHz 3593.250 (BoostMax=4457.000)
RAM 32 GB
Sistema de archivos XFS
Versión del Kernel 6.8.0-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU powersave (balance performance)
Planificador de CPU BORE
Versión de Glibc 2.39
Enlazador dinámico LLD 18.1.0
Compilador Clang 18.1.0
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -fprofile-use=/var/pgo/wget/cspgo.profdata -Wl,--lto=thin -Wl,--thinlto-jobs=6 -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt
Parámetros de compilación -j12
Tiempo de compilación 2"
Archivos instalados 5
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 928 KB

Archivo de configuración personal

~/.wgetrc Es el archivo de configuración personal de Wget en nuestro home.

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando:

$ su -c "make uninstall"

2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenemos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

wget-1.24.5-scripts.tar.gz

$ su
# tar zxvf wget-1.24.5-scripts.tar.gz
# cd wget-1.24.5-scripts
# ./Desinstalar_wget-1.24.5

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf wget-1.24.5-scripts.tar.gz
# cd wget-1.24.5-scripts
# ./Respaldar_wget-1.24.5

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_wget-1.24.5



Configuración de Wget  

Del archivo de configuración, lo único a tener en cuenta y que tendremos que editar es el apartado que hace referencia al proxy a utilizar (en el caso de que tengamos pensado hacerlo). Personalmente, utilizo la combinación Tor+Privoxy como proxy para la descarga de archivos de servidores con cortes continuos en la conexión, como pueden ser el de VLC o el de la web de VirtualBox, no digo ya las tortugas que tiene SourceForge, perdón, las réplicas que tiene SourceForge.

Abrimos el archivo ~/.wgetrc con un editor de texto y nos vamos a la línea 85, la descomentamos y añadimos el proxy a utilizar, en el ejemplo, el anterior mencionado, con la dirección de Privoxy.

# You can set the default proxies for Wget to use for http, https, and ftp.
# They will override the value in the environment.
#https_proxy = http://proxy.yoyodyne.com:18023/
http_proxy = 127.0.0.1:8118
#ftp_proxy = http://proxy.yoyodyne.com:18023/

Luego nos vamos a la línea 89, la descomentamos y colocamos la opción use_proxy en off, para evitar que el proxy esté siempre activado, para activarlo lo haremos con la correspondiente opción de línea de comandos.

# If you do not want to use proxy at all, set this to off.
use_proxy = off

Cuando queramos activar el proxy, le pasamos el siguiente parámetro a Wget, --proxy=on



Ejemplos de uso de Wget  

En los ejemplos que pongo a continuación, siempre utilizo la opción -c por defecto, que nos permite por un lado, continuar las descargas incompletas y por otro, evita que nos bajemos algo que ya tenemos en el directorio donde estemos ejecutando el programa.

1) Descarga de un archivo

[jose@localhost ~]$ wget -c http://ftp.gnome.org/pub/GNOME/sources/gtk+/2.12/gtk+-2.12.10-2.12.11.diff.gz
--2008-07-22 03:01:38--  http://ftp.gnome.org/pub/GNOME/sources/gtk+/2.12/gtk+-2.12.10-2.12.11.diff.gz
Resolviendo ftp.gnome.org... 130.239.18.173, 2001:6b0:e:2018::173
Connecting to ftp.gnome.org|130.239.18.173|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 216543 (211K) [application/x-gzip]
Saving to: `gtk+-2.12.10-2.12.11.diff.gz'

26% [=========>                             ] 56.641      --.-K/s  eta 45s

2) Descarga de un archivo mediante proxy

[jose@localhost ~]$ wget -c --proxy=on http://files.libburnia-project.org/releases/libisoburn-0.2.2.pl00.tar.gz
--2008-07-22 03:05:03--  http://files.libburnia-project.org/releases/libisoburn-0.2.2.pl00.tar.gz
Connecting to 127.0.0.1:8118... conectado.
Petición Proxy enviada, esperando respuesta... 200 OK
Longitud: 580184 (567K) [application/x-gzip]
Saving to: `libisoburn-0.2.2.pl00.tar.gz'

66% [========================>              ] 385.708     4,40K/s  eta 43s


3) Descarga de múltiples archivos mediante listado local

Abrimos un editor de texto y añadimos todos los enlaces de los archivos que pretendamos descargar, un ejemplo,

http://files.libburnia-project.org/releases/libisofs-0.6.6.tar.gz
http://files.libburnia-project.org/releases/libburn-0.5.0.pl00.tar.gz
http://files.libburnia-project.org/releases/libisoburn-0.2.2.pl00.tar.gz

La guardamos por ejemplo, con el nombre, paquetes.txt y desde el mismo directorio donde tengamos este archivo ejecutamos el siguiente comando, la opción -i es la que se utiliza siempre para hacer referencia al archivo de texto con los enlaces de descarga.

[jose@localhost descargas]$ wget -c -i paquetes.txt
--2008-07-22 03:16:31--  http://files.libburnia-project.org/releases/libisofs-0.6.6.tar.gz
Resolviendo files.libburnia-project.org... 67.15.104.78
Connecting to files.libburnia-project.org|67.15.104.78|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 540785 (528K) [application/x-gzip]
Saving to: `libisofs-0.6.6.tar.gz'

100%[======================================>] 540.785     4,93K/s   in 3m 17s

2008-07-22 03:19:50 (2,68 KB/s) - `libisofs-0.6.6.tar.gz' saved [540785/540785]

--2008-07-22 03:19:50--  http://files.libburnia-project.org/releases/libburn-0.5.0.pl00.tar.gz
Connecting to files.libburnia-project.org|67.15.104.78|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 704280 (688K) [application/x-gzip]
Saving to: `libburn-0.5.0.pl00.tar.gz'

22% [=======>                               ] 157.680     3,87K/s  eta 3m 54s


Si queremos utilizar el proxy, el comando sería el siguiente,

$ wget -c --proxy=on -i paquetes.txt

4) Descarga FTP mediante el uso de filtros


Pongamos el caso de que nos queremos descargar todos los paquetes tar.bz2 de un directorio de un servidor FTP como por ejemplo el de X.org, con el siguiente comando lo tendremos muy fácil,

[jose@localhost descargas]$ wget -c -x --retr-symlinks ftp://ftp.x.org//pub/X11R7.3/src/lib/*.bz2
--2008-07-22 03:37:23--  ftp://ftp.x.org//pub/X11R7.3/src/lib/*.bz2
           => `ftp.x.org/pub/X11R7.3/src/lib/.listing'
Resolviendo ftp.x.org... 18.7.25.161
Connecting to ftp.x.org|18.7.25.161|:21... conectado.
Identificándose como anonymous ... ¡Dentro!
==> SYST ... hecho.   ==> PWD ... hecho.
==> TYPE I ... hecho.  ==> CWD /pub/X11R7.3/src/lib ... hecho.
==> PASV ... hecho.   ==> LIST ... hecho.

    [    <=>                                ] 11.461      10,3K/s   in 1,1s

2008-07-22 03:37:38 (10,3 KB/s) - `ftp.x.org/pub/X11R7.3/src/lib/.listing' saved [11461]

`ftp.x.org/pub/X11R7.3/src/lib/.listing' eliminado.
--2008-07-22 03:37:38--  ftp://ftp.x.org//pub/X11R7.3/src/lib/libAppleWM-1.0.0.tar.bz2
           => `ftp.x.org/pub/X11R7.3/src/lib/libAppleWM-1.0.0.tar.bz2'
==> no se requiere CWD.
==> PASV ... hecho.   ==> RETR libAppleWM-1.0.0.tar.bz2 ... hecho.
Longitud: 48

100%[=====================================================================>] 213

2008-07-22 03:38:59 (2,62 KB/s) - `ftp.x.org/pub/X11R7.3/src/lib/libAppleWM-1.0.

--2008-07-22 03:38:59--  ftp://ftp.x.org//pub/X11R7.3/src/lib/libFS-1.0.0.tar.bz
           => `ftp.x.org/pub/X11R7.3/src/lib/libFS-1.0.0.tar.bz2'
==> no se requiere CWD.
==> PASV ... hecho.   ==> RETR libFS-1.0.0.tar.bz2 ... hecho.
Longitud: 43

100%[=====================================================================>] 236

La opción -x fuerza la recreación del directorio remoto de forma local, la opción -retr-symlinks fuerza a Wget a descargarse el archivo original, ya que los del directorio remoto son simples enlaces simbólicos. El filtro que hemos utilizado es el *.bz2 y siempre hay que colocarlo en el final de la ruta del enlace FTP, ftp://ftp.x.org//pub/X11R7.3/src/lib/*.bz2. La opción de filtros sólo funciona con el protocolo FTP.

5) Descarga de una página web


En este ejemplo nos vamos al sitio español del LFS, y nos descargamos el manual completo del LFS.

[jose@localhost descargas]$ wget -c -x -r -k -np http://www.escomposlinux.org/lfs-es/lfs-es-6.3/
--2008-07-22 03:59:16--  http://www.escomposlinux.org/lfs-es/lfs-es-6.3/
Resolviendo www.escomposlinux.org... 80.24.19.36
Connecting to www.escomposlinux.org|80.24.19.36|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 25384 (25K) [text/html]
Saving to: `www.escomposlinux.org/lfs-es/lfs-es-6.3/index.html'

100%[======================================>] 25.384      11,4K/s   in 2,2s

2008-07-22 03:59:19 (11,4 KB/s) - `www.escomposlinux.org/lfs-es/lfs-es-6.3/index.html' saved [25384/25384]

Cargando robots.txt; por favor ignore los errores.
--2008-07-22 03:59:19--  http://www.escomposlinux.org/robots.txt
Reusing existing connection to www.escomposlinux.org:80.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 32 [text/plain]
Saving to: `www.escomposlinux.org/robots.txt'

100%[======================================>] 32          --.-K/s   in 0s

2008-07-22 03:59:20 (759 KB/s) - `www.escomposlinux.org/robots.txt' saved [32/32]

--2008-07-22 03:59:20--  http://www.escomposlinux.org/lfs-es/lfs-es-6.3/stylesheets/lfs.css
Reusing existing connection to www.escomposlinux.org:80.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 8166 (8,0K) [text/css]
Saving to: `www.escomposlinux.org/lfs-es/lfs-es-6.3/stylesheets/lfs.css'

100%[======================================>] 8.166       13,1K/s   in 0,6s

La opción -r hace la descarga de forma recursiva, la opción -k convierte los enlaces remotos en enlaces locales para su visualización sin necesidad de estar conectados y la opción -np evita que Wget continúe la descarga recursiva en el nivel superior del directorio inicial del enlace.

6) Descarga de un archivo de vídeo y reproducción del mismo de forma simultánea


Este ejemplo lo podemos ver también en la documentación de MPlayer que se instala con el programa, que es de donde lo he cogido. Se trata de la descarga de un archivo de vídeo mediante Wget y de la reproducción simultánea con MPlayer mediante la ejecución de una tubería (sucesión de procesos donde el siguiente coge los datos del anterior, se dividen con el símbolo | ).

$ wget -c https://manualinux.eu/videos/josito.avi -O - | mplayer -nofs -cache 8192 -

7) Descarga de un archivo de un sitio web usando un agente de usuario diferente


Muchos sitios web limitan los accesos a sus archivos de descarga mediante el uso de una lista de navegadores predefinidos, con lo que si intentamos descargar un archivo en cuestión desde alguno de ellos, nos sucede esto:

[jose@localhost descargas]$ wget -c http://rbelmont.mameworld.info/sdlmame0134.zip
--2009-09-22 22:58:14--  http://rbelmont.mameworld.info/sdlmame0134.zip
Resolviendo rbelmont.mameworld.info... 174.132.130.226
Connecting to rbelmont.mameworld.info|174.132.130.226|:80... conectado.
Petición HTTP enviada, esperando respuesta... 403 Forbidden
2009-09-22 22:58:15 ERROR 403: Forbidden.


Lo solucionamos cambiando el agente de usuario que sirve para identificar al programa por uno más conocido, con el parámetro -U "Mozilla 5.0", y el resultado es el siguiente:

[jose@localhost descargas]$ wget -c -U "Mozilla 5.0" http://rbelmont.mameworld.info/sdlmame0134.zip
--2009-09-22 23:02:09--  http://rbelmont.mameworld.info/sdlmame0134.zip
Resolviendo rbelmont.mameworld.info... 174.132.130.226
Connecting to rbelmont.mameworld.info|174.132.130.226|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 18230792 (17M) [application/zip]
Saving to: `sdlmame0134.zip'

 0% [                                       ] 60.913      4,35K/s  eta 64m 55s 




Enlaces  


http://www.gnu.org/software/wget >> La web de Wget.

http://gnuwin32.sourceforge.net/packages/wget.htm >> La versión para Windows de Wget.


Foro Galería Blog


Actualizado el 11-03-2024

Gestores de Descargas - GNU - Wget

Gestores de Descargas - FreeRapidGestores de Descargas - ProzGUI