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-2018   http://manualinux.eu



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 - (8.1.0) o Clang - (6.0.0)
* Gawk - (4.2.1)
* M4 - (1.4.18)
* Libtool - (2.4.6)
* Make - (4.2.1)
* Automake - (1.16.1)
* Gettext - (0.19.8.1)
* Autoconf - (2.69)
* Flex - (2.6.4)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* GnuTLS - (3.5.18)
* Gpgme - (1.11.1)
* Libidn2 - (2.0.4)
* Libmetalink - (0.1.3)
* Libpsl - (0.20.2)
* Libunistring - (0.9.9)
* Nettle - (3.3)
* PCRE - (8.42)
* Zlib - (1.2.11)



Descarga

wget-1.19.5.tar.lz

Optimizaciones

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

Donde pone amdfam10 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
VIA
IDT

Optimizaciones adicionales

Optimizaciones adicionales 
GCC
Graphite
$ export {C,CXX}FLAGS+=' -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block'
LTO
$ export AR=gcc-ar RANLIB=gcc-ranlib NM=gcc-nm
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=2'
Donde pone 2 se indica el número de núcleos de nuestro procesador, si sólo tiene uno, utilizar el parámetro -flto

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.

Parámetros adicionales

Parámetros adicionales de eliminación de avisos específicos en el proceso de compilación
Clang
$ export {C,CXX}FLAGS+=' -Qunused-arguments'

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"

Establecer el uso de enlazador dinámico para LLD
$ export LDFLAGS+=' -fuse-ld=lld'
Optimizaciones complementarias LTO de LLD
$ export LDFLAGS+=' -Wl,--lto-partitions=2'
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=' -Wl,--thinlto-jobs=2'
Donde pone 2 se indica el número de núcleos de nuestro procesador, si sólo tiene uno, no es necesario añadir el parámetro en cuestión.

Establecer la variable de entorno de uso de compilador para Clang
$ export {CC,CXX}=clang
Si utilizamos Clang con Ccache, tendremos que establecer la variable de entorno correspondiente de Ccache de uso de compilador.
$ export CCACHE_CC=clang

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

$ tar lxvf wget-1.19.5.tar.lz
$ cd wget-1.19.5
$ ./configure --disable-dependency-tracking --prefix=/usr --sysconfdir=/etc

Explicación de los comandos

--disable-dependency-tracking : Acelera el tiempo de compilación.
--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

-j2 : Si tenemos un procesador de doble núcleo (dual-core), y el kernel está optimizado para el mismo y es SMP, con este parámetro aumentaremos el número de procesos de compilación simultáneos a un nivel de 2 y aceleraremos el tiempo de compilación del programa de forma considerable.
-j4 : Lo mismo que arriba pero con procesadores de 4 núcleos (quad-core).

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 Phenom(tm) II X4 965 Processor
MHz 3415.709
RAM 4096 MB
Sistema de archivos XFS
Versión del Kernel 4.16.7-ck1 SMP PREEMPT x86_64
Modo de frecuencia de la CPU ondemand
Versión de Glibc 2.27
Enlazador dinámico LLD 6.0.0
Compilador Clang 6.0.0
Parámetros de optimización -03 -march=amdfam10 -mtune=amdfam10 -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto=thin
Parámetros de compilación -j4
Tiempo de compilación 9"
Archivos instalados 5
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 956 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.19.5-scripts.tar.gz

$ su
# tar zxvf wget-1.19.5-scripts.tar.gz
# cd wget-1.19.5-scripts
# ./Desinstalar_wget-1.19.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.19.5-scripts.tar.gz
# cd wget-1.19.5-scripts
# ./Respaldar_wget-1.19.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.19.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 http://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 06-05-2018

Gestores de Descargas - GNU - Wget

Gestores de Descargas - FreeRapidGestores de Descargas - ProzGUI