martes, 19 de enero de 2010

Tutorial de WGet (gestor de descargas) 1a. parte

Es un hecho, la línea de comandos puede ser un poquito difícil de aprender, pero no necesariamente. Hay herramientas con las que podemos comenzar a jugar e ir tomando confianza, además de comprobar su utilidad y eficacia.

Con esto quiero decir, que si enseñar introducir a la línea de comandos de GNU/Linux (o cualquier herramienta GNU, aunque el núcleo no sea Linux), empieza por emular los viejos cursos de MS-DOS con las típicas órdenes para listar directorios, cambiar de directorio, abrir un documento, y de ahí lanzamos a los compas a las páginas de manual, o a los foros que muchas veces no son de gran ayuda; la gente no va a obtener resultados tangibles en el corto plazo.

A mí una herramienta GNU que me ha encantado desde la primera vez que la usé es WGet. La verdad es que si miramos su página "man" (man wget) nos puede abrumar la cantidad de opciones que encontraremos, cuando en realidad su uso cotidiano puede ser de lo más amigable y sencillo. Sin embargo es enormemente flexible, y con un poco de paciencia y ganas de trastear, podemos adaptarla a los más variados usos. Como hacer mirrors completos de sitios para leerlos sin conexión o transportarlos en nuestra USB, o incluso crear nuestro propio gestor de descargas, y que funcione incluso, en windows.

Ejemplo 1. Descargar un sólo archivo.

Digamos, la nueva versión de Trisquel GNU/Linux, una derivación de Ubuntu española, pero 100% Libre, no incluye software privativo, en contraste con la distribución de canonical.

wget http://gnulinuxlibre.net/wp-content/uploads/mirror/trisquel/trisquel_3.0.1_i686.iso

Más simple no podría ser. Pero tomemos en cuenta que la descarga es un tanto larga, sobre todo si, por ejemplo, no podemos esperar hasta que termine, digamos que estamos en el café internet. ¿cómo le hacemos para continuar la descarga desde otro sitio, o en otra ocasión? Variamos el comando un poquitín, así:

Ejemplo 1.1. Continuar descargas y Ver progreso:

wget -c -v http://gnulinuxlibre.net/wp-content/uploads/mirror/trisquel/trisquel_3.0.1_i686.iso

En realidad, podemos ver que la línea de comandos puede ser, de una lógica muy sencilla, sólo hemos agregado las opciones:

-c   continuar        y     -v    verbosity

¿Simple no? No puedo recordar la cantidad de veces que no tenía ni mi propia compu y en donde me dejaban trabajar, no siempre había internet, así que cuando podía pagarme una o dos horas de renta del café internet, mientras leía mis correos y publicaba notas, tenía funcionando el GNU WGet como gestor de descargas, sin importar que en ese café no pudiese instalar mi programa favorito de entonces: Firefox con el plugin DownThemAll! que era lo mejor que conocía antes de wget.

Sólo me bastaba con traer mi USB a donde quiera que fuese, con mi versión de GNU WGet para windows en una carpeta, desde la que podía correr desde la ventanita de MS-DOS mi descarga, y wget iba poniendo todo en la misma carpeta en que lo ejecutaba. Por si no te habías dado cuenta, dije GNU WGet en Windows, porque las herramientas GNU no dependen forzosamente del kernel Linux, aunque Linux sin GNU, no sea funcional. Claro que GNU con Linux es una mejor combinación, pero rara vez podía usar GNU/Linux en las compus de mis amigos y familia, por no decir que nunca me dieron chance en un café internet.

Justo entonces ¿qué pasa cuando en la casa de amigos o familia, no seria justo usar todo el ancho de banda disponible? Digamos que nos dan chance de ir descargando lo que queramos pero nuestrx amigx necesita usar al mismo tiempo el internet. De nuevo, es muy simple, limitamos la tasa (rate) de descarga con una opción o switch:

Ejemplo 1.2. Limitar la tasa de descarga.

wget -cv --limit-rate=10k http://gnulinuxlibre.net/wp-content/uploads/mirror/trisquel/trisquel_3.0.1_i686.iso

En este caso, le pedí que descargue a sólo 10 kilobytes por segundo, pero dependiendo del ancho de banda disponible, podemos especificar más o menos.

A veces me pasó en los cafés internet que eran unos fantoches ignorantes que no me permitían tener abierta una línea de comandos porque sospechaban que estaba hackeando o les daba miedo de que hacía cosas raras. Entonces disponía de sólo un minuto para entrar en la ventanita de MS-DOS, ir a mi carpeta en la USB donde tenía mi GNU Wget, y disparar el comando, pero podía dejarlo descargando sin tener abierta la terminal. En esos casos, agregaba otro switch al comando.

Ejemplo 1.3. Descarga en Background (segundo plano).

wget -b -cv http://gnulinuxlibre.net/wp-content/uploads/mirror/trisquel/trisquel_3.0.1_i686.iso

Del mismo modo que con las anteriores, continuaba la descarga del archivo hasta completarla. Una vez terminada, el proceso se cerraba. Sólo que no podía ver en pantalla el progreso pero eso me permitía cerrar la terminal inmediatamente. Y como yo les pagaba por usar la PC, no estaba dañando nada y sólo me estaban fastidiando, no limitaba en absoluto la velocidad, la dejaba usar la máxima disponible.

Podría darse el caso que un estimadx amigx o familiar nos permita dejar descargando en su PC lo que queramos, pero también el va a usar la conexión y bueno, es nuestrx amigx y no vamos a abusar de su confianza. En ese caso, vamos a agregar también el switch limit-rate, y para que no haya necesidad de tener la terminal de MS-DOS abierta, también background.

Ejemplo 1.4. En Background, Continuando descargas, Volcando información y Limitando Rate (tasa).

wget -b -cv --limit-rate=5k http://gnulinuxlibre.net/wp-content/uploads/mirror/trisquel/trisquel_3.0.1_i686.iso

Ahora lo reduje a 5 kilobytes por segundo ya que no sabemos que tanto necesite consumir de internet nuestrx amigx, y así contamos con ese(a) valedor(a) para posteriores apoyos.

¿Pero que pasa si queremos descargar no un archivo, sino una página que incluye gráficos, estilos, y toda una serie de monadas que sin ellas perderíamos buena parte de la diversión? Pues basta con usar el switch -p (Page), y si no termina en html, usaremos también el switch E (extension), para que agregue al final .html y lo reconozca cualquier navegador (hasta Iexplorer).

Ejemplo 1.5. Descargar página con todos los archivos de los que depende para mostrarse correctamente.

wget -pE -cv http://mexico.indymedia.org/?article999

Para el ejemplo esta vez usamos sólo los switches page, extension, continue y verbosity. No es una página enorme así que podemos apreciar la descarga de cada archivo, y en este caso, buscaremos en la carpeta en que ejecutamos wget, el archivo article999.html

Finalmente, para terminar esta primera parte del tutorial de GNU WGet, vamos a empezar a usarlo como un gestor de descargas 100% funcional, digamos que tenemos una lista de archivos que descargar, no necesitamos arrancar un proceso de wget cada vez y estar pendientes de si ya terminó la anterior o no. Sólo necesitamos escribir en cualquier archivo de texto sencillo (lleve extensión .txt o no, eso no importa), la lista de URLs de cada objeto que vamos a bajar (las direcciones que comienzan por http o ftp). Podemos usar notepad incluso.

Ejemplo 2. Input (entrada) de una lista de direcciones.

wget -b --limit-rate=20k -cv -Ep -i mis_páginas.txt

Analicemos el comando anterior de modo que resumamos la lección de hoy,

Notamos que estamos usando todos los switches que hemos usado hasta ahora, sin embargo podríamos omitir cualquiera aunque tendría diferentes efectos:

  • si omitimos -b (background), no podemos cerrar la terminal, nos mostrará lo que va haciendo, aunque sí podemos minimizarla si es una ventana.
  • omitiendo --limit-rate=20k usa el máximo ancho de banda disponible, podemos cambiar también el máximo al que pedimos que haga las bajadas.
  • omitiendo -c (continue) si se nos ha cortado alguna descarga previa, descargará de nuevo todo el archivo, lo que nos lleva a desperdicir espacio y tiempo valiosos.
  • omitiendo -v (verbosity) no generará un archivo de registro tan grande, pero tampoco podremos diagnosticar revisándolo en que punto falló y que progreso llevaba la última descarga.
  • omitiendo -E (extension) si los archivos no terminan en html, y se trata de páginas web, no cambiará su extensión en cuyo caso puede que le cueste trabajo a los navegadores reconocer que se trata de una página y no las abra correctamente.
  • omitiendo -p (page), tampoco descargará los archivos que en dichas páginas se muestren, en cuyo caso, nos quedaremos con páginas con sólo texto y sin siquiera estilos en caso de haberlos.

También podemos cambiar el orden de los switches, no es necesario un orden en particular, excepción hecha del switch -i (Input) antes del archivo que lista las direcciones con las que va a trabajar el gestor. Esto por si no te acuerdas de algún switch y poco antes de ingresar el comando, recuerdas que te hace falta una opción, simplemente la agregas al final seprándola con un espacio del resto.


Te invito a que juegues con las opciones que ya conoces, puedes escribirme tus dudas o si te atoraste en algo, con gusto te ayudaré.

En la siguiente lección, abordaremos como usar GNU Wget para crear copias locales (mirrors) de algún sitio en particular o de una pequeña parte.

Por lo pronto, te dejó con la página de wget para windows por si necesitas bajártelo. Si ya usas GNU/Linux, no la necesitas, Wget ya es una de las utilidades básicas que de hecho muchos otros programas usan para descargar lo que necesiten, por ejemplo, synaptic y aptitude en debian.

http://gnuwin32.sourceforge.net/packages/wget.htm WGet para windows

Archivos zip que puedes descargar y descomprimir en tu USB (o hasta en un cd o mini-CD grabables), hay que descomprimirlos en una sóla carpeta, no funcionan separados.

Hay también un instalador, por si puedes instalarlo en la PC en que vas a trabajar:

http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe Gnu Wget para windows, instalador

Happy hacking!

No hay comentarios:

Publicar un comentario