58 votes

Comment rendre wget plus rapide ou multithreading ?

Je viens de mettre à niveau le matériel de mon ordinateur (processeur + carte mère + carte graphique + mémoire + disque dur), ce qui nécessite l'installation d'un nouveau système d'exploitation. J'ai essayé de télécharger debian-6.0.6-amd64-netinst.iso avec wget mais la vitesse est si lente que je n'ai pas pu la supporter. 4Kb/s ~ 17 Kb/s Le site est lent comme une tortue qui court, et 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 pour le rendre plus rapide.

Y a-t-il un moyen de faire wget plus rapide ? Ou est-il possible de le rendre multithreading télécharger ?

PS : ma bande passante est de 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

78voto

bryantsai Points 1917

Pourquoi ne pas essayer axel ? Il s'agit d'un téléchargeur en ligne de commande à part entière.

Installer axel et le téléchargement de spawn par

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

'[Num_of_Thread]' est le nombre de connexions parallèles à créer pour chaque lien que vous souhaitez télécharger.

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

Contrairement à de nombreux autres gestionnaires de téléchargement, Axel télécharge toutes les données directement dans le fichier de destination, en utilisant un seul fil de discussion. Cela permet de gagner du temps à la fin car le programme ne doit pas concaténer toutes les parties téléchargées.

73voto

hmj6jmh Points 831

J'ai essayé axel sur Gufran mais il m'a énormément déçu. Mon but était de trouver un remplacement en CLI pour DownThemAll parce qu'il monopolise le processeur et le disque dur et ralentit l'ensemble du système, même sur un Mac Pro à 8 cœurs. Je voulais aussi un remplacement multithread de wget y curl et non pas une sorte de script qui en exécute plusieurs instances. J'ai donc cherché plus loin et j'ai trouvé ce que je pense être, à l'heure actuelle, l'ultime téléchargeur CLI multithreadé le plus moderne qui existe aria2 . Le gros problème que j'avais avec axel était qu'il faisait semblant de télécharger des fichiers sur SSL. Je l'ai surpris à faire ça avec tcdump . Il téléchargeait https comme des liens ordinaires http . Cela m'a vraiment énervé 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 violation de la sécurité. Pour en 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 est un guérillero du téléchargement. Il maximise la bande passante de mon FAI sans aucune charge sur le CPU ou le disque dur, contrairement à DTA. 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 c'est solide, pas faux. J'ai écrit un script qui imite le comportement de DTA, si ce n'est sa commodité.

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

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 y -s 10 autoriser jusqu'à 10 connexions par serveur, et -d "mydir" sort 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 du fichier à partir de la ligne de commande :

aria2files.sh files.txt

Il crée les répertoires et y effectue les téléchargements. Il peut créer des répertoires imbriqués comme le montre le deuxième exemple.

Pour plus de détails, voir mon billet Bash script pour télécharger des fichiers à partir d'URL vers des répertoires spécifiques listés dans un fichier texte. .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X