Come rendere wget più veloce o multithreading?


39

Ho appena aggiornato l'hardware del mio computer (CPU + scheda madre + scheda grafica + memoria + disco rigido), quindi è necessario installare un nuovo sistema operativo. Ho provato a scaricare debian-6.0.6-amd64-netinst.isocon wgetcomando ma la velocità è così bassa che non potevo sopportare.4Kb/s ~ 17 Kb/s, lento come una tartaruga in esecuzione, o ancora più lento se uso Chrome.

Ho letto le informazioni di aiuto di wget , sembra che non ci siano opzioni per renderlo più veloce.

Esiste un modo per rendere wget più veloce? O è possibile effettuare il download multi-thread ?

PS: la mia larghezza di banda è 4M. Io uso questo comando:

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 usa solo la tua connessione. Quindi, se è lento, questa è la tua connessione con il server. Forse sei lento, forse lo è il server. tra 4mbit = 0,5mb / s, per non parlare della perdita ecc.
Dr_Bunsen,

@Dr_Bunsengrazie per il vostro consiglio, ho provato il comando che @Gufranha suggerito: axel, larghezza rispetto wget, axelè più veloce che mai. Penso che nella maggior parte dei casi, il collo di bottiglia della mia velocità di download sia 1 . qualcosa occupava la larghezza di banda (come hai detto: sono lento ). 2 . single-threading. 3 . il server è lento. Ma non ho nulla a che fare con il punto 1 e 3 .
Teifi,

@Teifi Una possibilità se il axelmulti-thread funziona meglio di wget quando si utilizza lo stesso server remoto, la latenza tra il box e il server remoto è molto alta. Controlla il ping sul server remoto.
John Siu,

Risposte:


52

Perché non provarci axel ? È un downloader completo basato sulla riga di comando.

Installa axele genera il download di

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

dove '[Num_of_Thread]' trova il numero di connessioni parallele da creare per ciascun collegamento che si desidera scaricare.

-a mostra solo una barra di avanzamento migliorata.

A differenza di molti altri gestori di download, Axel scarica tutti i dati direttamente nel file di destinazione, utilizzando un singolo thread. Ciò consente di risparmiare un po 'di tempo alla fine perché il programma non deve concatenare tutte le parti scaricate.


Mi chiedo se esiste un modo, forse tramite alias e wrapper, di utilizzare axel quando è disponibile anziché curl o wget, a meno che non ci sia più di un parametro nella riga di comando.
sorin,

1
Penso che questa proposta non sia sufficiente per il download di un file. Per favore, correggimi se necessario. Il mio tentativo qui askubuntu.com/q/813483/25388
Léo Léopold Hertz

54

Ho cercato axelsu Gufran raccomandazione s' ma enormemente mi ha deluso. Il mio obiettivo era quello di trovare un sostituto della CLI DownThemAllperché impugna la CPU e il disco rigido e rallenta l'intero sistema anche su un Mac Pro a 8 core. Volevo anche un sostituto multithread per wgetecurl , non un po 'di kludge di uno script che esegue più istanze di questi. Quindi ho cercato ulteriormente e ho trovato quello che penso in questo momento è l'ultimo downloader CLI multithread più moderno che ci sia - aria2 . Il grosso problema che ho avuto è axelstato il fatto che "simulava" il download di file su SSL. L'ho beccato a farlo contcdump . Stava scaricando i httpscollegamenti come di consuetohttp. Questo mi ha davvero fatto incazzare e se non avessi controllato, avrei avuto un falso senso di sicurezza. Dubito che molte persone siano a conoscenza di questa grave violazione della sicurezza. Tornando a aria2, è più avanzato di qualsiasi altro downloader. Supporta i protocolli HTTP (S), FTP, BitTorrent e Metalink, è multipiattaforma ed è una guerriglia da download. Massimizza la larghezza di banda del mio ISP senza carico sulla CPU o sul disco rigido, a differenza di DTA. La pagina man è gigantesca. Non userò mai più di alcune delle sue molte opzioni. E oh, a proposito, ho controllato le sue prestazioni SSL contcdump ed è solido, non falso. Ho scritto una sceneggiatura che imita il comportamento di DTA, se non la sua convenienza.

Il comando di base che uso per ottenere la massima larghezza di banda è

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

-cconsente la continuazione del download se viene interrotto, -x 10e-s 10 permettono fino a 10 connessioni per server e -d "mydir"file di output alla directorymydir .

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"

Legge un file di testo nel formato:

files.txt:

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

Lo script legge il nome file dalla riga di comando:

aria2files.sh files.txt

Crea le directory e le scarica. Può creare directory nidificate come mostrato nel secondo esempio.

Per maggiori dettagli vedere il mio post script Bash per scaricare file da URL in directory specificate elencate in un file di testo .


Puoi applicare il tuo metodo anche qui askubuntu.com/q/813483/25388 Il mio tentativo fallito aria2c -x10 -s10 http://horatio.cs.nyu.edu/mit/tiny/data/tiny_images.bin.
Léo Léopold Hertz

Grazie @ hmj6jmh! Per la cronaca su un Rapsberry Pi modello 3: wget -4 -c <https://URL/ISO_FILE>mi dà ~ 40 KB / sec ( 87300K .......... .......... 11% 38.7K 4h28mquando lo stesso file scaricato con aria2c --disable-ipv6 -cdà ~ 250 KB / sec ( 144MiB/717MiB(20%) CN:1 DL:250KiB ETA:39m3s]).
tuk0z

1
Se (come me) vuoi evitare Sourceforge, aria2 fa parte dei repository, quindi puoi installarlo consudo apt install aria2
Bar

Buona risposta. Per i siti che impongono solo HTTPS, il funzionamento axeldiretto non funziona. Sembra che sia stato aggiornato per usare HTTPS, ma quella versione non è ancora nei miei repository. aria2ha funzionato bene per me.
WindowsEscapist
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.