Como descargar archivos desde la consola Linux
Descargar archivos de internet es una necesidad que tarde o temprano siempre aparece ya sea en el uso diario de nuestro escritorio Linux o en tareas de administración de servidores, por eso escribo este artículo a cerca de como descargar archivos desde la consola Linux.
No siempre tendremos una interfaz gráfica a nuestra disposición, sobre todo cuando administramos servidores, de ahí que en este artículo sólo hablaremos de como descargar desde la consola.
Para descargar archivos necesitaremos algún tipo de cliente HTTP o programa que envíe las peticiones HTTP adecuadas para poder iniciar las descargas. En Linux disponemos de varios programas de este tipo pero sólo voy a hablar de las más comunes que serán Wget, cURL y Axel. Los dos primeros vienen instalados por defecto en la gran mayoría de distribuciones Linux y son los más conocidos pero decidí incluir Axel porque a pesar de no ser tan conocido tiene una serie de características que en ciertas situaciones nos pueden ayudar a acelerar las descargas.
Además haremos una breve comparativa a la hora de descargar archivos grandes para ver cual nos ha dado mayores velocidades de descarga.
Programas para descargar archivos desde la consola Linux
Como ya dijimos vamos a hablar básicamente de tres programas (Wget, cURL y Axel) para descargar dese la terminal Linux y comentaré brevemente las opciones que nos ofrecen para poder elegir el que más nos convenga.
GNU Wget
Se le conoce entre los usuarios simplemente como Wget y es una herramienta que funciona desde nuestro terminal Linux (también hay disponible versión para Windows) y que nos permite descargar cualquier tipo de archivo. Como características principales tenemos:
- Soporta varios protocolos: HTTP, HTTPS y FTP.
- Permite resumir descargas interrumpidas.
- Soporta cookies HTTP.
- Soporta el uso de proxies HTTP.
- Incluido por defecto en practicamente todas las distribuciones Linux.
- Es gratuito y de código abierto.
Su uso es bastante sencillo y disponemos de un completo manual en inglés que nos facilita su manejo. Un ejemplo básico de comando para descargar un archivo con Wget es:
wget https://www.vozidea.com/archivo.zip
cURL
La más completa herramienta de terminal para trabajar con URLs y peticiones HTTP ya que no sólo está enfocado a realizar descargas sino que con cURL se pueden realizar otras tareas como enviar correos, manejar conexiones Telnet, etc… Tiene una funcionalidad muy extensa pero atendiendo a las características que nos interesan a la hora de descargar archivos tendriamos:
- Soporta multitud de protocolos: HTTP, HTTPS, FTP, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet y TFTP.
- Soporta el uso de cookies HTTP.
- Soporta el uso de proxies HTTP y proxies SOCKS.
- Soporte para resumir descargas interrumpidas.
- Incluido por defecto en muchas distribuciones Linux.
- Es totalmente gratuito y de código abierto.
Al tener una funcionalidad tan amplia su uso se complica un poco más que el de Wget pero no mucho, también disponemos de un manual en inglés lleno de ejemplos. La forma de uso más básica de cURL para decargar un archivo es:
curl https://www.vozidea.com/archivo.zip
Axel
Como se trata de descargar archivos desde la consola he decidido incluir esta aplicación que nos ayudará a descargar archivos grandes a mayores velocidades de una forma sencilla.
Antes de nada debo explicar una de las opciones que tenemos a la hora de descargar archivos mediante el protocolo HTTP y que se trata de descargar empleando segmentos o rangos de bytes, es decir, un mismo archivo se puede dividir en varios segmentos y descargar cada segmento de forma individual y así conseguimos incrementar la velocidad de descarga. La descarga por segmentos se puede hacer si conocemos bien el protocolo HTTP y las cabeceras que tenemos que enviar por eso tanto con Wget como con cURL se podrían descargar archivos por segmentos. En el caso de Wget hay que trastear directamente con las cabeceras HTTP mientras que cURL ofrece la opción --range
para definir un rango de forma más sencilla.
El problema de usar cURL y Wget es que no podemos emplear la función de descarga por segmentos de una forma sencilla ejecutando un simple comando y es aquí donde entra en juego Axel que si nos permite descargar en segmentos con un simple comando. Por defecto Axel divide el archivo a descargar en 4 segmentos, pero esto se puede ajustar a nuestro gusto con la opción -n x
o --num-connections=x
donde x
es el número de segmentos.
El ejemplo más sencillo de uso es:
axel https://www.vozidea.com/archivo.zip
La instalación en distribuciones basadas en Debian como Ubuntu, Mint y similares es muy sencilla:
sudo apt-get install axel
Axel no dispone de una buena página de documentación online pero con el comando de ayuda man axel
es suficiente para hacerse una idea de su funcionamiento.
Comparativa de velocidad a la hora de descargar archivos
Hemos hecho varias pruebas con los tres programas y hemos podido observar que Wget y cURL se comportan de forma similar, aunque casi siempre cURL nos ha dado un poco más de velocidad pero no grandes diferencias.
Axel es el más rápido cuando se trata de descargar archivos de servidores que limitan la velocidad de cada conexión, reduciendo incluso a menos de la mitad el tiempo de descarga pero también hay que decir que en servidores que no tienen esa limitación los resultados fueron similares a los de cURL y Wget.