Jak sprawić, by wget był szybszy lub wielowątkowy?

39

Właśnie zaktualizowałem swój sprzęt komputerowy (procesor + płyta główna + karta graficzna + pamięć + dysk twardy), więc potrzebna jest instalacja nowego systemu operacyjnego. Próbowałem pobrać za debian-6.0.6-amd64-netinst.isopomocą wgetpolecenia, ale prędkość jest tak wolna, że ​​nie mogłem znieść. 4Kb/s ~ 17 Kb/s, wolniej jak biegnący żółw lub nawet wolniej, jeśli korzystam z Chrome.

Przeczytałem informacje o pomocy wget , wygląda na to, że nie ma opcji, które mogłyby przyspieszyć.

Czy jest jakiś sposób na przyspieszenie wgeta ? Czy jest możliwe, aby pobieranie było wielowątkowe ?

PS: moja przepustowość to 4M. Używam tego polecenia:

wget -c url  http://hammurabi.acc.umu.se/debian-cd/6.0.6/amd64/iso-cd/debian-6.0.6-amd64-netinst.iso
Teifi
źródło
1
wget po prostu używa twojego połączenia. Więc jeśli jest wolny, oznacza to twoje połączenie z serwerem. Może jesteś wolny, może serwer. btw 4 Mb = 0,5 Mb / s, nie wspominając o stracie itp.
Dr_Bunsen
@Dr_Bunsendziękuję za radę, próbowałem polecenie, które @Gufransugerowane: axelw porównaniu szerokości wget, axeljest szybsza niż kiedykolwiek. Myślę, że w większości sytuacji wąskim gardłem mojej prędkości pobierania jest 1 . coś zajęło przepustowość (jak powiedziałeś: jestem wolny ). 2 . jednowątkowe. 3 . serwer jest wolny. Ale nie mam nic wspólnego z punktem 1 i 3 .
Teifi
@Teifi Jedną z możliwości, jeśli axelwiele wątków działa lepiej niż wget, gdy używasz tego samego zdalnego serwera, opóźnienie między twoim urządzeniem a zdalnym serwerem jest bardzo wysokie. Sprawdź ping do zdalnego serwera.
John Siu
Czy próbowałeś HTTrack? httrack.com/page/1/en/index.html
amanthethy

Odpowiedzi:

52

Dlaczego nie spróbować axel? Jest to w pełni funkcjonalny Downloader oparty na linii poleceń.

Zainstaluj axeli odradzaj pobieranie przez

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

gdzie '[Num_of_Thread]'jest liczba równoległych połączeń do utworzenia dla każdego łącza, które chcesz pobrać.

-a po prostu pokaż ulepszony pasek postępu.

W przeciwieństwie do wielu innych menedżerów pobierania, Axel pobiera wszystkie dane bezpośrednio do pliku docelowego, używając jednego wątku. To oszczędza trochę czasu na końcu, ponieważ program nie musi łączyć wszystkich pobranych części.

Gufran
źródło
Zastanawiam się, czy istnieje sposób, może za pomocą aliasu i otoki użyć Axel, gdy jest dostępny zamiast curl lub wget, chyba że w wierszu poleceń jest więcej niż jeden parametr.
sorin
1
Myślę, że ta propozycja nie jest wystarczająca do pobrania jednego pliku. Proszę popraw mnie, jeśli to konieczne. Moja próba tutaj askubuntu.com/q/813483/25388
Léo Léopold Hertz -
54

Próbowałem axelna Gufran zalecenie „s, ale to ogromnie mnie rozczarowało. Moim celem było znalezienie zamiennika CLI, DownThemAllponieważ powoduje on przeciążenie procesora i dysku twardego oraz spowalnia cały system nawet na 8-rdzeniowym Mac Pro. Chciałem też zastąpić wielowątkowy zamiennik skryptu, który uruchamia wiele jego wystąpień, wgeta curlnie jakąś kludge. Poszukałem więc dalej i odkryłem, że moim zdaniem jest to najnowocześniejszy wielowątkowy downloader CLI - aria2 . Dużym problemem, z jakim miałem do czynienia, axelbyło to, że „fałszowało” pobieranie plików przez SSL. Przyłapałem to na tym tcdump. Jak zwykle pobierał httpslinkihttp. To mnie naprawdę wkurzyło i gdybym nie sprawdził, miałbym fałszywe poczucie bezpieczeństwa. Wątpię, aby wiele osób wiedziało o tym poważnym naruszeniu bezpieczeństwa. Wracając do aria2, jest bardziej zaawansowany niż jakikolwiek inny downloader. Obsługuje protokoły HTTP (S), FTP, BitTorrent i Metalink, jest wieloplatformowy i jest partyzantką pobierania. Maksymalizuje przepustowość mojego ISP bez obciążenia procesora lub dysku twardego, w przeciwieństwie do DTA. Strona podręcznika jest gigantyczna. Nigdy nie użyję więcej niż kilku jego wielu opcji. Aha, BTW, sprawdziłem jego działanie SSL tcdumpi jest solidne, a nie fałszywe. Napisałem skrypt, który naśladuje zachowanie DTA, jeśli nie jego wygodę.

Podstawowym poleceniem, którego używam do uzyskania maksymalnej przepustowości, jest

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

-cumożliwia kontynuowanie pobierania, jeśli zostanie przerwane, -x 10i -s 10pozwala na maksymalnie 10 połączeń na serwer, i -d "mydir"wysyła plik do katalogu 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"

Czyta plik tekstowy w formacie:

files.txt:

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

Skrypt odczytuje nazwę pliku z wiersza poleceń:

aria2files.sh files.txt

Tworzy katalogi i pobiera do nich pliki. Może tworzyć zagnieżdżone katalogi, jak pokazano w drugim przykładzie.

Aby uzyskać więcej informacji, zobacz mój post Skrypt Bash do pobierania plików z adresów URL do określonych katalogów wymienionych w pliku tekstowym .

hmj6jmh
źródło
Czy możesz również zastosować tutaj swoją metodę askubuntu.com/q/813483/25388 Moja nieudana próba aria2c -x10 -s10 http://horatio.cs.nyu.edu/mit/tiny/data/tiny_images.bin.
Léo Léopold Hertz 준영 17.08.16
Dzięki @ hmj6jmh! Dla rekordu na Rapsberry Pi Model 3: wget -4 -c <https://URL/ISO_FILE>daje mi ~ 40 KB / s ( 87300K .......... .......... 11% 38.7K 4h28mgdy ten sam pobrany plik aria2c --disable-ipv6 -cdaje ~ 250 KB / s ( 144MiB/717MiB(20%) CN:1 DL:250KiB ETA:39m3s]).
tuk0z
1
Jeśli (podobnie jak ja) chcesz uniknąć Sourceforge, aria2 jest częścią repozytoriów, więc możesz zainstalować go za pomocąsudo apt install aria2
Bar
Dobra odpowiedź. W przypadku witryn, które wymuszają stosowanie wyłącznie HTTPS, axelfunkcja prostowania nie działa. Wygląda na to, że został zaktualizowany do używania HTTPS, ale tej wersji jeszcze nie ma w moich repozytoriach. aria2działało dobrze dla mnie.
WindowsEscapist