Descargas no interactivas en Linux

LinuxBeginner
Practicar Ahora

Introducción

Bienvenido a este laboratorio para principiantes sobre descargas no interactivas en Linux. La capacidad de descargar archivos de manera eficiente desde la línea de comandos es una habilidad esencial para cualquier usuario de Linux o administrador de sistemas.

En este laboratorio, aprenderá cómo utilizar el comando wget, una poderosa utilidad que le permite descargar archivos de Internet sin intervención manual. Esta herramienta es especialmente útil cuando necesita descargar múltiples archivos, realizar descargas en segundo plano o automatizar tareas de descarga en scripts.

Al final de este laboratorio, entenderá cómo utilizar wget para descargar archivos individuales, renombrar descargas y descargar múltiples archivos desde una lista, todo a través de la línea de comandos sin interfaces gráficas o mensajes interactivos.

Configuración del entorno y descarga básica

En este primer paso, crearemos un directorio de trabajo y aprenderemos cómo descargar un solo archivo utilizando el comando wget.

Creación de un directorio de trabajo

Comencemos creando un directorio donde almacenaremos todos nuestros archivos descargados. Esto ayuda a mantener nuestros archivos organizados en un solo lugar.

Navegue hasta el directorio del proyecto y cree un nuevo directorio llamado download_resources:

cd ~/project
mkdir download_resources

Comprensión del comando wget

El comando wget es una utilidad para la descarga no interactiva de archivos desde la web. Su sintaxis básica es:

wget [opciones] [URL]

Su primera descarga

Ahora, usemos wget para descargar un archivo. Descargaremos un paquete de distribución de Python como archivo de prueba:

cd ~/project/download_resources
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz

Cuando ejecute este comando, debería ver una salida similar a esta:

--2024-01-10 10:14:51--  https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22540566 (21M) [application/octet-stream]
Saving to: 'Python-3.6.1.tgz'

Python-3.6.1.tgz                  100%[=============================================================>]  21.50M  26.8MB/s    in 0.8s

2024-01-10 10:14:52 (26.8 MB/s) - 'Python-3.6.1.tgz' saved [22540566/22540566]

Esta salida muestra:

  • La URL a la que se está accediendo
  • La dirección IP del servidor
  • La respuesta HTTP (200 OK significa éxito)
  • El tamaño del archivo (aproximadamente 21 MB)
  • El progreso de la descarga
  • La velocidad y el tiempo de descarga
  • Confirmación de que el archivo se guardó con su nombre original

Verifiquemos que el archivo se haya descargado correctamente:

ls -lh

Debería ver el archivo Python-3.6.1.tgz en el directorio con su tamaño correspondiente.

Descarga con nombres de archivos personalizados

En este paso, exploraremos cómo descargar un archivo y guardarlo con un nombre de archivo personalizado en lugar de utilizar el nombre predeterminado de la URL.

Uso de la opción -O

La opción -O (letra mayúscula O, no cero) te permite especificar el nombre del archivo de salida. Esto es útil cuando:

  • Quieres un nombre de archivo más descriptivo.
  • El nombre de archivo predeterminado de la URL es demasiado complejo.
  • Estás descargando múltiples versiones del mismo recurso.

Intentemos descargar otro paquete de Python, pero esta vez lo guardaremos con un nombre personalizado:

cd ~/project/download_resources
wget -O CustomPython.tgz https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz

En este comando:

  • -O CustomPython.tgz le dice a wget que guarde el archivo como CustomPython.tgz.
  • El archivo se descargará de la URL especificada, pero se guardará con nuestro nombre personalizado.

La salida será similar a la anterior, pero nota que la línea "Saving to" ahora muestra nuestro nombre de archivo personalizado:

--2024-01-10 10:20:51--  https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22676538 (22M) [application/octet-stream]
Saving to: 'CustomPython.tgz'

CustomPython.tgz                  100%[=============================================================>]  21.63M  25.9MB/s    in 0.8s

2024-01-10 10:20:52 (25.9 MB/s) - 'CustomPython.tgz' saved [22676538/22676538]

Verifiquemos que nuestro archivo se haya descargado con el nombre personalizado:

ls -lh

Ahora deberías ver tanto el archivo original Python-3.6.1.tgz como tu nuevo archivo CustomPython.tgz en el directorio.

Otras opciones útiles

Mientras aprendemos sobre las opciones de wget, aquí hay algunas más útiles:

  • -q (quiet): Suprime la salida, útil para scripts.
  • -c (continue): Reanuda la descarga de un archivo parcialmente descargado.
  • --limit-rate=1m: Limita la velocidad de descarga (por ejemplo, a 1 megabyte por segundo).

Por ejemplo, para descargar en silencio con un nombre personalizado:

wget -q -O PythonQuiet.tgz https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz

Este comando no mostrará ninguna salida, pero el archivo se descargará. Puedes verificarlo con:

ls -lh

Ahora también deberías ver el archivo PythonQuiet.tgz en tu directorio.

Descarga de múltiples archivos desde una lista

En escenarios del mundo real, a menudo es necesario descargar múltiples archivos. Escribir manualmente cada comando wget sería ineficiente. Afortunadamente, wget puede descargar múltiples archivos desde una lista, lo cual es perfecto para la automatización.

Creación de un archivo con URLs

Primero, creemos un archivo de texto que contenga las URLs de los archivos que queremos descargar:

cd ~/project/download_resources
echo "https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz" > download_list.txt
echo "https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz" >> download_list.txt
echo "https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz" >> download_list.txt

En estos comandos:

  • El primer comando echo crea un nuevo archivo llamado download_list.txt y agrega la primera URL.
  • Los comandos echo subsiguientes agregan URLs adicionales al archivo utilizando >> (doble redirección).

Verifiquemos el contenido de nuestro archivo para asegurarnos de que sea correcto:

cat download_list.txt

Deberías ver tres URLs, cada una en su propia línea:

https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

Uso de wget con un archivo de entrada

Ahora podemos usar la opción -i con wget para leer las URLs de nuestro archivo y descargar todos los archivos:

wget -i download_list.txt

Este comando le dice a wget que lea las URLs de download_list.txt y descargue cada archivo en secuencia. Verás una salida para cada descarga, similar a cuando descargaste un solo archivo:

--2024-01-10 10:30:51--  https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22808518 (22M) [application/octet-stream]
Saving to: 'Python-3.7.0.tgz'

Python-3.7.0.tgz                  100%[=============================================================>]  21.75M  25.9MB/s    in 0.8s

2024-01-10 10:30:52 (25.9 MB/s) - 'Python-3.7.0.tgz' saved [22808518/22808518]

--2024-01-10 10:30:52--  https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
...

Verificación de archivos descargados

Después de que se completen las descargas, verifiquemos que todos los archivos se hayan descargado correctamente:

ls -lh Python-3.7.*

Deberías ver los tres archivos de Python 3.7.x que descargamos de la lista:

-rw-r--r-- 1 labex labex 22M Jan 10 10:30 Python-3.7.0.tgz
-rw-r--r-- 1 labex labex 22M Jan 10 10:30 Python-3.7.1.tgz
-rw-r--r-- 1 labex labex 22M Jan 10 10:31 Python-3.7.2.tgz

Creación de un script de descarga por lotes

Para uso futuro, creemos un simple script de shell que pueda descargar archivos desde una lista. Esto demuestra cómo se puede usar wget en la automatización:

cd ~/project/download_resources
nano batch_download.sh

Ingresa el siguiente contenido en el archivo:

#!/bin/bash
## A simple script to download files from a list
if [ -f "$1" ]; then
  echo "Downloading files from list: $1"
  wget -i "$1"
else
  echo "Error: File $1 not found"
  exit 1
fi

Guarda el archivo presionando Ctrl+O, luego Enter, y sal con Ctrl+X.

Haz el script ejecutable:

chmod +x batch_download.sh

Ahora puedes usar este script para descargar archivos de cualquier lista en el futuro:

./batch_download.sh download_list.txt

Este comando haría lo mismo que nuestro anterior comando wget -i download_list.txt, pero está envuelto en un script que puedes reutilizar.

Resumen

En este laboratorio, has aprendido cómo usar el comando wget para descargas no interactivas en Linux. Ahora tienes las habilidades para:

  • Descargar archivos individuales utilizando comandos básicos de wget.
  • Guardar archivos descargados con nombres personalizados utilizando la opción -O.
  • Crear una lista de URLs y descargar múltiples archivos a la vez utilizando la opción -i.
  • Crear scripts de automatización simples para descargas por lotes.

Estas habilidades son valiosas para administradores de sistemas, desarrolladores y cualquier usuario de Linux que necesite descargar archivos de manera eficiente desde la línea de comandos. Las descargas no interactivas son especialmente útiles para la automatización, la gestión remota de servidores y situaciones en las que no se dispone de una interfaz gráfica.

Algunas características adicionales de wget que podrías explorar por tu cuenta incluyen:

  • Descarga recursiva con -r para crear un espejo (mirror) de sitios web.
  • Descarga en segundo plano con -b para descargas de larga duración.
  • Uso de autenticación con --user y --password para recursos protegidos.
  • Configuración de tiempos de espera, reintentos y otros parámetros de conexión.

Con estas capacidades, puedes manejar una amplia gama de escenarios de descarga de manera eficiente desde la línea de comandos de Linux.