Copyright
Copyright © José
Luis Lara Carrascal 2008-2012 
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 - (4.7.1) o Clang - (3.1)
* Gawk - (4.0.1)
* M4 - (1.4.16)
* Libtool - (2.4.2)
* Make - (3.82)
* Automake - (1.12.2)
* Gettext - (0.18.1.1)
* Autoconf - (2.69)
* Flex - (2.5.37)
Librerías
de Desarrollo
* GnuTLS - (3.0.21)
* Libgcrypt - (1.5.0)
* Libgpg-error - (1.10)
* Zlib - (1.2.7)
Descarga
wget-1.14.tar.xz
Optimizaciones
GCC
$ export
{CFLAGS,CXXFLAGS}='-O3 -march=amdfam10 -mtune=amdfam10'
|
Clang
$ export
{CFLAGS,CXXFLAGS}='-O3 -march=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.x e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
|
Nota informativa sobre las optimizaciones para Clang
|
* La opción '-mtune=' no
está soportada por 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 |
| generic |
Produce un código
binario optimizado para la mayor parte de procesadores existentes.
Utilizar este valor si no sabemos el nombre del procesador que
tenemos en nuestro equipo. Este valor sólo es aplicable en
la opción '-mtune='. Esta opción está disponible a
partir de GCC 4.2.x. |
| i386 |
Intel i386.
|
| i486 |
Intel i486. |
| i586, pentium |
Intel Pentium sin soporte de instrucciones MMX. |
| pentium-mmx |
Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX. |
| pentiumpro |
Intel PentiumPro. |
| i686 |
Produce un código binario optimizado para la mayor parte de
procesadores compatibles con la serie 80686 de Intel. Todos los actuales lo son. |
| pentium2 |
Intel Pentium2 basado en PentiumPro con soporte de instrucciones MMX. |
| pentium3, pentium3m |
Intel Pentium3 basado en PentiumPro con soporte de instrucciones MMX y SSE. |
| pentium-m |
Versión de bajo
consumo de Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2.
Utilizado por los portátiles Centrino. |
| pentium4, pentium4m |
Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2. |
| x86-64 |
Procesadores
AMD y compatibles con soporte de instrucciones x86-64, SSE2 y
extensiones
64-bit. |
| yonah |
Procesadores
basados en la microarquitectura de Pentium M, con soporte de
instrucciones MMX, SSE, SSE2 y SSE3. |
| prescott |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
| nocona |
Versión mejorada de Intel Pentium4 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
| core2 |
Intel Core2 con
extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3 y
SSSE3. Esta opción está disponible a partir de GCC 4.3.x. |
| penryn |
Intel
Penryn con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3 y SSE4.1. |
| corei7 |
Intel Core i7 con
extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1 y SSE4.2. Soporta también los procesadores Intel
Core i3 e i5. Esta opción está disponible a partir
de GCC 4.6.x. |
| nehalem |
Procesadores
basados en la microarquitectura de procesador Nehalem de Intel. |
| westmere |
Procesadores
basados en la microarquitectura de procesador Westmere de Intel. |
| corei7-avx |
Intel Core i7 con
extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AVX, AES y PCLMUL. Soporta también los
procesadores Intel Core i3 e i5. Esta opción está
disponible a partir de GCC 4.6.x. |
| core-avx-i |
Intel Core (ivyBridge) con
extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND y F16C. Esta opción está disponible a partir
de GCC 4.7.x. |
| core-avx2 |
Intel Core (Haswell). Esta opción está disponible a partir
de GCC 4.7.x. |
| atom |
Intel Atom con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3 y SSSE3. Esta opción está
disponible a partir de GCC 4.5.x. |
| k6 |
AMD K6 con soporte de instrucciones MMX. |
| k6-2, k6-3 |
Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!. |
| athlon, athlon-tbird |
AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y SSE prefetch. |
| athlon4, athlon-xp, athlon-mp |
Versiones mejoradas de AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y full SSE. |
| k8, opteron, athlon64, athlon-fx |
Procesadores basados en
AMD K8 core con soporte de instrucciones x86-64 (MMX, SSE, SSE2,
3DNow!, enhanced 3DNow! y extensiones 64-bit). |
| k8-sse3, opteron-sse3, athlon64-sse3 |
Versiones mejoradas de
AMD K8 core con soporte de instrucciones SSE3. Esta opción
está disponible a partir de GCC 4.3.x. |
| amdfam10, barcelona |
Procesadores basados en
AMD Family 10h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM y extensiones
64-bit). Esta opción está disponible a partir de GCC 4.3.x. |
| btver1 |
Procesadores basados en
AMD Family 14h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, CX16, ABM y extensiones 64-bit). Esta opción está disponible a partir
de GCC 4.6.x. |
| bdver1 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.7.x. |
| bdver2 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (BMI, TBM, F16C, FMA, LWP, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.7.x. |
| winchip-c6 |
IDT Winchip C6, que equivale a un i486 con soporte de instrucciones MMX. |
| winchip2 |
IDT Winchip2, que equivale a un i486 con soporte de instrucciones MMX y 3DNow!. |
| c3 |
Via C3 con soporte de instrucciones MMX y 3DNow!. |
| c3-2 |
Via C3-2 con soporte de instrucciones MMX y SSE. |
| geode |
AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3.x. |
| native |
Produce un código
binario optimizado para el procesador que tengamos en nuestro sistema,
siendo éste detectado utilizando la instrucción cpuid.
Procesadores antiguos pueden no ser detectados utilizando este valor.
Esta opción está disponible a
partir de GCC 4.2.x. |
Extracción
y Configuración 
$ tar Jxvf wget-1.14.tar.xz
$ cd wget-1.14
$ export {CC,CXX}=clang
$ ./configure --disable-dependency-tracking --prefix=/usr --sysconfdir=/etc |
Explicación
de los comandos
export {CC,CXX}=clang
:
Si vamos a compilar el paquete con Clang, establecemos
la correspondiente variable de entorno.
--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
Instalación
como root
$ su
# make install-strip
|
Instalación
del archivo de configuración personal en nuestro home
$ cp /etc/wgetrc ~/.wgetrc |
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 como root:
2)
MODO MANUALINUX
El principal inconveniente del comando anterior es
que
tenermos 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.14-scripts.tar.gz
$ su
# tar zxvf wget-1.14-scripts.tar.gz
# cd wget-1.14-scripts
# ./Desinstalar_wget-1.14 |
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.14-scripts.tar.gz
# cd wget-1.14-scripts
# ./Respaldar_wget-1.14 |
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.14
|
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 78, 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 and ftp.
# They will override the value in the environment.
http_proxy = 127.0.0.1:8118
#ftp_proxy = http://proxy.yoyodyne.com:18023/ |
Luego nos vamos a la línea 83, 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.freehostia.com/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.
|