如何使wget更快或多线程?


39

我刚刚升级了计算机硬件(cpu +主板+图形卡+内存+硬盘),因此需要安装新的操作系统。我尝试debian-6.0.6-amd64-netinst.iso使用wget命令下载,但是速度太慢,以至于我无法忍受。4Kb/s ~ 17 Kb/s,像奔跑的乌龟一样慢,或者如果我使用Chrome则更慢。

我已经阅读了wget的帮助信息,似乎没有选项可以使其更快。

无论如何有使wget更快?还是有可能使其成为多线程下载?

PS:我的带宽是4M。我使用以下命令:

wget -c url  http://hammurabi.acc.umu.se/debian-cd/6.0.6/amd64/iso-cd/debian-6.0.6-amd64-netinst.iso

1
wget只是使用您的连接。因此,如果速度较慢,那就是您与服务器的连接。也许您很慢,也许服务器很慢。btw 4mbit = 0.5mb / s,更不用说损失了
Dr_Bunsen

@Dr_Bunsen感谢您的建议,我尝试了@Gufran建议的命令:axel,相比width wgetaxel它比以往更快。我认为在大多数情况下,我的下载速度的瓶颈是1。某些东西占用了带宽(如您所说:我很慢)。2。单线程。3。服务器运行缓慢。但我与1&3点无关。
Teifi 2012年

@Teifi一种可能性,如果axel使用相同的远程服务器时多线程的性能优于wget,则盒子与远程服务器之间的延迟非常高。检查您对远程服务器的ping操作。

Answers:


52

为什么不尝试axel?这是一个基于命令行的完整下载器。

安装axel并生成下载者

axel -a -n [Num_of_Thread] link1 link2 link3 ...

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

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

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


我想知道是否有一种方法,可能通过别名和包装在可用时使用axel代替curl或wget,除非命令行中有多个参数。
索林

1
我认为这个建议不足以下载一个文件。请帮我纠正。我在这里尝试askubuntu.com/q/813483/25388
莱奥列奥波尔德·赫兹준 영

54

我尝试axelGufran的建议,但令我非常失望。我的目标是找到CLI替代品,DownThemAll因为即使在8核Mac Pro上,它也会占用CPU和硬盘并减慢整个系统的速度。我还希望用wget和的多线程替换,而curl不是运行多个脚本实例的脚本的某些混淆。因此,我进行了进一步搜索,发现我现在所认为的是最先进的现代多线程CLI下载器aria2。我遇到的最大问题axel是,它伪造了通过SSL下载文件的功能。我发现它是这样做的tcdump。它像平常一样下载https链接http。那真的让我很生气,如果我不检查的话,我会产生一种虚假的安全感。我怀疑很多人都知道这种严重的安全漏洞。回到aria2,它比其他任何下载器都先进。它支持HTTP(S),FTP,BitTorrent和Metalink协议,是多平台的,并且是下载游标。与DTA不同,它最大程度地增加了ISP的带宽,而CPU或硬盘上没有负载。手册页很大。我永远不会使用其众多选项中的几个。哦,顺便说一句,我检查了它的SSL性能,tcdump它是可靠的,不是伪造的。我编写了一个脚本,它模仿了DTA的行为(如果不方便的话)。

我用来获取最大带宽的基本命令是

aria2c --file-allocation=none -c -x 10 -s 10 -d "mydir" URL

-c如果下载中断,则允许继续下载,-x 10并且-s 10每个服务器最多允许10个连接,并将-d "mydir"文件输出到directory 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

它创建目录并下载到它们。它可以创建嵌套目录,如第二个示例所示。

有关更多详细信息,请参阅我的帖子Bash脚本,该脚本可将URL中的文件下载到文本文件中列出的指定目录


您也可以在这里应用您的方法吗?askubuntu.com/q/813483/25388我的尝试失败aria2c -x10 -s10 http://horatio.cs.nyu.edu/mit/tiny/data/tiny_images.bin
莱奥波德·赫兹(LéoLéopoldHertz)2016年

谢谢@ hmj6jmh!用于在Rapsberry裨模型3的记录:wget -4 -c <https://URL/ISO_FILE>给我〜40 KB /秒(87300K .......... .......... 11% 38.7K 4h28m当相同的文件与下载aria2c --disable-ipv6 -c给〜250 KB /秒(144MiB/717MiB(20%) CN:1 DL:250KiB ETA:39m3s])。
tuk0z

1
如果您(像我一样)想要避免Sourceforge,则aria2是存储库的一部分,因此您可以使用sudo apt install aria2
Bar

好答案。对于仅强制使用HTTPS的网站,axel直接整理不起作用。它似乎已更新为使用HTTPS,但该版本尚未在我的存储库中。 aria2对我来说很好
WindowsEscapist
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.