web-dev-qa-db-fra.com

Comment rendre wget plus rapide ou multithreading?

Je viens de mettre à niveau mon matériel informatique (unité centrale + carte mère + carte graphique + mémoire + disque dur), de sorte qu'il est nécessaire d'installer un nouveau système d'exploitation. J'ai essayé de télécharger debian-6.0.6-AMD64-netinst.iso avec la commande wget mais la vitesse est si lente que je ne pouvais plus supporter. 4Kb/s ~ 17 Kb/s, lent comme une tortue en cours d'exécution, ou encore plus lent si j'utilise Chrome.

J'ai lu les informations d'aide de wget, il semble qu'il n'y ait pas d'options qui pourraient accélérer les choses.

Est-il possible de faire wget plus rapidement? Ou est-il possible de le faire multi-threading télécharger?

PS: ma bande passante est 4M. J'utilise cette commande:

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

Pourquoi ne pas essayer axelname__? C'est un téléchargeur à part entière à base de ligne de commande.
install axelet spawn download par axel -a -n [Num_of_Thread] link1 link2 link3 ..., où '[Num_of_Thread]' est le nombre de connexions parallèles à créer pour chaque lien à télécharger.

-a montre simplement une barre de progression améliorée.

52
Gufran

J'ai essayé axel après la recommandation de Gufran , mais cela m'a énormément déçu. Mon objectif était de trouver un remplaçant CLI pour DownThemAll car il encombrerait le processeur et le disque dur et ralentirait tout le système, même sur un Mac Pro à 8 cœurs. Je souhaitais également un remplacement multithread pour wget et curl, et non un kludge d'un script exécutant plusieurs instances de ceux-ci. J'ai donc cherché plus loin et trouvé ce que je pense être le téléchargeur CLI multithread le plus moderne et le plus moderne qui soit - aria2 . Le gros problème que j'avais avec axel était qu'il "simulait" le téléchargement de fichiers via SSL. Je l'ai surpris en train de le faire avec tcdump. Il téléchargeait les liens https en tant que nom ordinaire http. Cela m'a vraiment fait chier et si je n'avais pas vérifié, j'aurais eu un faux sentiment de sécurité. Je doute que beaucoup de gens soient au courant de cette grave atteinte à la sécurité. Pour revenir à aria2, il est plus avancé que tout autre téléchargeur. Il prend en charge les protocoles HTTP (S), FTP, BitTorrent et Metalink, est multiplateforme et constitue une guérilla de téléchargement. Contrairement à la DTA, elle optimise la bande passante de mon FAI sans charge sur le processeur ou le disque dur. La page de manuel est gigantesque. Je n'utiliserai jamais plus que quelques-unes de ses nombreuses options. Et oh, BTW, j'ai vérifié ses performances SSL avec tcdump et il est solide, pas faux. J'ai écrit un script qui imite le comportement de DTA, sinon sa commodité.

La commande de base que j'utilise pour obtenir la bande passante maximale est

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

-c permet de poursuivre le téléchargement s'il est interrompu, -x 10 et -s 10 autorisent jusqu'à 10 connexions par serveur, et -d "mydir" envoie le fichier dans le répertoire 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"

Il lit un fichier texte au format:

files.txt:

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

Le script lit le nom de fichier depuis la ligne de commande:

aria2files.sh files.txt

Il crée les répertoires et les télécharge. Il peut créer des répertoires imbriqués comme indiqué dans le deuxième exemple.

Pour plus de détails, voir mon article script Bash permettant de télécharger des fichiers depuis des URL vers des répertoires spécifiés répertoriés dans un fichier texte .

51
hmj6jmh