Axel - A console based Download Accelerator for Linux
I am a big fan of wget. It provides you with immense capabilities, but when it comes to accelerating the download speed, wget doesn't provide any option. After searching for a decent download accelerator for Linux, I came across axel and it being a console tool is an added bonus.
Download accelerator do nothing special. Instead of downloading a file through a single connection they request for multiple copies of the file, part by part, through multiple http/ftp connections. In simple words, its as if multiple users are connected to the remote server, but downloading different parts of the same file. This makes the whole process immensely faster(note that, the speed will be bounded by the maximum capacity of your connection).
Install Axel on Ubuntu or Fedora
Axel is available in the default repositories of major distros. Run the following command to install it on your system.
[shredder12]$ sudo apt-get install axel #for Ubuntu or Debian based systems
[root]# yum install axel #for fedora or RedHat based systems
It doesn't provide as many options as wget, but if you just want to download a single file, axel is your best bet.
Please note that, multiple connections and faster speed do sound impressive but most ftp servers have limit on the number of concurrent connections. So, their admins are not a big fans of such tool which just fake multiple users. In such cases, you should go for alternate links. e.g. If you want to download Ubuntu ISO from a server, doesn't matter http/ftp, its always a good idea to choose multiple locations. This way the load will be well distributed among the servers and you'll be happy too.
Download from multiple locations
You can either give it multiple alternative locations to download the files.
[shredder12]$ axel <url1> <url2> <url3>
This will use all these mirrors to download the file.
Limit the download speed
If you want to limit the download speed.
[shredder12]$ axel -s 3000000 <url>
You have to mention the speed in bytes per second.
Limit the number of concurrent connections or threads
This can be done using the -n option.
[shredder12]$ axel -n 3 <url>
Change the name of the output file
The default behavior is to use the downloaded file name as the local name. But if you want to change the output or final name then use the -o option.
[shredder12]$ axel -o output_file.ext <url>
Mentioning a directory will save the file in that directory.
View the download information of each connection or thread
By default, the progress bar will show you the overall progress of the download. In case you are interested in knowing the information of each file, use the -a option to show an alternate progress bar.
[shredder12]$ axel -a n 3 <url>
You can also hardcode some of these options into its configuration file - /etc/axelrc(global) or ~/.axelrc(local). The file /etc/axelrc is well documented and modifying it is pretty easy.
As you can see, Axel is pretty good, but there are still a lot of things I wish would have been supported by it, eg - it doesn't work if ftp requires authentication etc. If only there was acceleration ability in wget :).