如何使wget更快或多线程?

我刚刚升级了我的电脑硬件(CPU + 主板 + 显卡 + 内存 + 硬盘),所以需要安装一个新的操作系统。我尝试使用wget命令下载debian-6.0.6-amd64-netinst.iso,但速度太慢了,我无法忍受。只有4Kb/s ~ 17 Kb/s,慢得像一只爬行的乌龟,甚至在使用Chrome时更慢。
我已经阅读了wget的帮助信息,似乎没有任何选项可以使其更快。
有没有办法让wget更快?或者有没有可能实现多线程下载?
附注:我的带宽是4M。我使用的命令是:
wget -c url  http://hammurabi.acc.umu.se/debian-cd/6.0.6/amd64/iso-cd/debian-6.0.6-amd64-netinst.iso

1wget只是利用你的连接。所以如果它很慢,那就是你与服务器的连接问题。也许是你的网速慢,也许是服务器的问题。 顺便说一下,4mbit等于0.5mb/s,更不用说丢包等问题了。 - Dr_Bunsen
@Dr_Bunsen,谢谢您的建议,我尝试了@Gufran建议的命令:axel,与wget相比,axel速度更快了。我认为在大多数情况下,我的下载速度瓶颈主要有三个方面:1. 有些东西占用了带宽(就像您说的:“我很慢”)。2. 单线程下载。3. 服务器速度慢。但是对于1和3这两点,我无能为力。 - Teifi
@Teifi 如果在使用相同的远程服务器时,axel 多线程比 wget 表现更好,那么有可能是你的计算机与远程服务器之间的延迟非常高。请检查一下你与远程服务器的 ping 值。 - John Siu
你尝试过HTTrack吗?http://www.httrack.com/page/1/en/index.html - amanthethy
请参阅https://stackoverflow.com/questions/3430810/multiple-simultaneous-downloads-using-wget。 - rogerdpack
2个回答

为什么不试试 "axel" 呢?它是一个功能齐全的基于命令行的下载器。
通过安装 "axel" 并执行下载命令,可以开始下载。
axel -a -n [Num_of_Thread] link1 link2 link3 ...

其中'[Num_of_Thread]'是您想要下载的每个链接创建的并行连接数。

-a只是显示一个改进的进度条。

与许多其他下载管理器不同,Axel直接将所有数据下载到目标文件中,使用一个单独的线程。这样在最后节省了一些时间,因为程序不需要将所有已下载的部分连接起来。


我在想是否有一种方法,可能通过别名和包装器来使用axel,而不是curl或wget,除非命令行中有多个参数。 - sorin
2我认为这个提案对于下载一个文件来说是不够的。如果有必要,请纠正我。我的尝试在这里:http://askubuntu.com/q/813483/25388 - Léo Léopold Hertz 준영
非常感谢您这个!:) - rjurney
回复:“我认为这个提案对于下载一个文件来说是不够的。”实际上,恰恰相反,axel被设计用于多线程下载单个文件,尤其是在存在多个源链接的情况下。 - Cieniek
Axel工作得很好!我的网络连接也有问题,但使用不同的VPN时,它以每秒7MB的速度下载32个线程所示。如果需要允许自签名证书,请添加-k。 - justdan23

我在Gufran的推荐下尝试了axel,但它让我非常失望。我的目标是找到一个命令行界面替代品来取代DownThemAll,因为它占用CPU和硬盘资源,在8核Mac Pro上甚至会拖慢整个系统。我还想要一个多线程替代品来替代wget和curl,而不是运行多个这些实例的脚本。所以我继续搜索,找到了我认为现在是最先进的多线程命令行下载工具--aria2。我对axel的一个大问题是它“伪造”了通过SSL下载文件。我用tcdump发现了这一点。它将https链接下载为普通的http链接。这真的让我很生气,如果我没有检查的话,我可能会有一种虚假的安全感。我怀疑很少有人知道这个严重的安全漏洞。回到aria2,它比任何其他下载工具都更先进。它支持HTTP(S)、FTP、BitTorrent和Metalink协议,是跨平台的,并且是一个下载战士。它可以充分利用我的ISP带宽,而不会给CPU或硬盘带来负载,这与DTA不同。它的手册非常庞大,我永远不会使用其中的很多选项。顺便说一句,我用tcdump检查了它的SSL性能,它是可靠的,不是伪造的。我编写了一个模仿DTA行为的脚本,虽然不像DTA那样方便。
我用来获取最大带宽的基本命令是:
aria2c --file-allocation=none -c -x 10 -s 10 -d "mydir" URL

使用-c选项可以在下载中断后继续下载,-x 10-s 10选项允许每个服务器最多建立10个连接,-d "mydir"选项将文件输出到目录mydir

aria2files.sh:

#!/bin/bash

filename="$1" # get filename from command line argument

while read -r line
do
    if [ "$line" ] # skip blank lines
    then
        if [[ "$line" =~ (https?|ftp)\:\/\/ ]] # line contains a URL, download file
        then
            echo "URL: '$line'"
            aria2c --file-allocation=none -c -x 10 -s 10 -d "$currdir" "$line"
        else # line contains a directory name, create directory if not already present
            echo "Directory: '$line'"
            currdir="$line"
            if [ ! -d "$currdir" ]
            then
                mkdir -p "$currdir" # '-p' enables creation of nested directories in one command
            fi
        fi
    fi
done < "$filename"

它读取格式为文本文件:

files.txt:

dierctory 1
url1
url2
…
directory 2/subdirectory/sub-subdirectory/…
url3
url4
…
…
…

脚本从命令行中读取文件名。
aria2files.sh files.txt

它创建目录并下载到这些目录中。它可以创建嵌套目录,如第二个示例所示。
要了解更多详细信息,请查看我的帖子从URL下载文件到指定目录的Bash脚本

你能在这里也应用你的方法吗?http://askubuntu.com/q/813483/25388 我尝试过但没有成功的命令是aria2c -x10 -s10 http://horatio.cs.nyu.edu/mit/tiny/data/tiny_images.bin - Léo Léopold Hertz 준영
1感谢@hmj6jmh!就树莓派3代而言: wget -4 -c <https://URL/ISO_FILE> 给我大约40 KB/sec(当使用aria2c --disable-ipv6 -c下载同一文件时,速度为大约250 KB/sec,进展为144MiB/717MiB(20%) CN:1 DL:250KiB ETA:39m3s])。 - tuk0z
6如果你(像我一样)想要避免使用Sourceforge,aria2是软件仓库的一部分,所以你可以使用sudo apt install aria2命令来安装它。 - Bar
好答案。对于强制使用HTTPS的网站,axel根本不起作用。它似乎已经更新为使用HTTPS,但这个版本还没有在我的软件源中。aria2对我来说效果很好。 - WindowsEscapist
要更改默认的下载行为,您可以在$XDG_CONFIG_HOME/aria2/aria2.conf文件中提供这些设置,其中XDG_CONFIG_HOME通常位于unix系统的~/.config/目录下。请参阅man aria2c以获取您可以添加到aria2.conf文件中的可用选项。 - Samir
太棒了!在RHEL9上(使用EPEL存储库),这个答案非常有效。让我用curl以50MB/s的速度下载ISO文件,而不是6MB/s。 - Orsiris de Jong