Como tornar o wget mais rápido ou multithreading?


39

Acabei de atualizar o hardware do meu computador (cpu + placa-mãe + placa gráfica + memória + disco rígido), para que seja necessário instalar um novo sistema operacional. Tentei fazer o download debian-6.0.6-amd64-netinst.isocom o wgetcomando, mas a velocidade é tão lenta que eu não aguentava. 4Kb/s ~ 17 Kb/s, lento como uma tartaruga correndo ou ainda mais lento se eu usar o Chrome.

Eu li as informações de ajuda do wget , parece que não há opções para torná-lo mais rápido.

Existe alguma maneira de tornar o wget mais rápido? Ou é possível fazer o download multi-threading ?

PS: minha largura de banda é de 4 milhões. Eu uso este comando:

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

11
O wget apenas usa sua conexão. Portanto, se for lento, é a sua conexão com o servidor. Talvez você seja lento, talvez o servidor seja. Entre 4Mbit = 0,5MB / s, para não mencionar a perda etc
Dr_Bunsen

@Dr_Bunsenobrigado por seu conselho, eu tentei o comando que @Gufransugeriu: axel, largura de comparação wget, axelé mais rápido do que nunca. Acho que na maioria das situações, o gargalo da minha velocidade de download é 1 . algo ocupou a largura de banda (como você disse: sou lento ). 2 . rosca única. 3 . o servidor está lento. Mas não tenho nada a ver com o ponto 1 e 3 .
Teifi

@Teifi Uma possibilidade, se o axelmulti-thread tiver um desempenho melhor que o wget ao usar o mesmo servidor remoto, a latência entre sua caixa e o servidor remoto é muito alta. Verifique seu ping no servidor remoto.
John Siu

Você já experimentou o HTTrack? httrack.com/page/1/en/index.html
amanthethy

Respostas:


52

Por que não tentar axel? É um completo Downloader baseado em linha de comando.

Instalar axele gerar o download por

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

onde '[Num_of_Thread]'é o número de conexões paralelas a serem criadas para cada link que você deseja baixar.

-a apenas mostre uma barra de progresso aprimorada.

Ao contrário de muitos outros gerenciadores de download, o Axel baixa todos os dados diretamente no arquivo de destino, usando um único encadeamento. Isso economiza algum tempo no final, porque o programa não precisa concatenar todas as partes baixadas.


Gostaria de saber se existe uma maneira, talvez através de alias e wrapper, de usar o axel quando estiver disponível, em vez de curl ou wget, a menos que haja mais de um parâmetro na linha de comando.
sorin

11
Eu acho que essa proposta não é suficiente para o download de um arquivo. Por favor, corrija-me se necessário. Minha tentativa aqui askubuntu.com/q/813483/25388
Léo Léopold Hertz 준영

54

Tentei axela recomendação de Gufran , mas isso me decepcionou enormemente. Meu objetivo era encontrar um substituto para a CLI DownThemAllporque ele monopoliza a CPU e o disco rígido e retarda todo o sistema, mesmo em um Mac Pro de 8 núcleos. Eu também queria uma substituição multithread para , wgete curlnão alguns cliques de um script que executa várias instâncias deles. Então, pesquisei mais e descobri o que acho atualmente o melhor e mais moderno downloader de CLI multithread que existe - aria2 . O grande problema que tive axelfoi que ele 'falsificou' o download de arquivos via SSL. Eu peguei fazendo isso com tcdump. Ele estava baixando httpslinks normalmentehttp. Isso realmente me irritou e se eu não tivesse verificado, eu teria uma falsa sensação de segurança. Duvido que muitas pessoas conheçam essa grave violação de segurança. Voltando ao aria2, é mais avançado do que qualquer outro downloader. Ele suporta os protocolos HTTP (S), FTP, BitTorrent e Metalink, é multiplataforma e é um guerrilheiro de download. Maximiza a largura de banda do meu ISP sem carga na CPU ou no disco rígido, ao contrário do DTA. A página de manual é gigantesca. Nunca usarei mais do que algumas de suas muitas opções. E, ah, BTW, eu verifiquei o desempenho do SSL tcdumpe ele é sólido, não falso. Eu escrevi um script que imita o comportamento do DTA, se não sua conveniência.

O comando básico que eu uso para obter largura de banda máxima é

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

-cpermite a continuação do download, se for interrompido, -x 10e -s 10permite até 10 conexões por servidor, e -d "mydir"envia o arquivo para o diretório 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"

Ele lê um arquivo de texto no formato:

files.txt:

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

O script lê o nome do arquivo na linha de comando:

aria2files.sh files.txt

Ele cria os diretórios e baixa para eles. Ele pode criar diretórios aninhados, como mostrado no segundo exemplo.

Para obter mais detalhes, consulte meu script post Bash para baixar arquivos de URLs para diretórios especificados listados em um arquivo de texto .


Você pode aplicar seu método aqui também askubuntu.com/q/813483/25388 Minha tentativa malsucedida aria2c -x10 -s10 http://horatio.cs.nyu.edu/mit/tiny/data/tiny_images.bin.
Léo Léopold Hertz ·

Obrigado @ hmj6jmh! Para o registro em um Rapsberry Pi Modelo 3: wget -4 -c <https://URL/ISO_FILE>dá-me ~ 40 KB / sec ( 87300K .......... .......... 11% 38.7K 4h28mquando o mesmo arquivo baixado com aria2c --disable-ipv6 -cdá ~ 250 KB / sec ( 144MiB/717MiB(20%) CN:1 DL:250KiB ETA:39m3s]).
tuk0z

11
Se você (como eu) deseja evitar o Sourceforge, o aria2 faz parte dos repositórios, para que você possa instalá-lo com o sudo apt install aria2
código #

Boa resposta. Para sites que forçam apenas HTTPS, a axelcorreção direta não funciona. Parece ter sido atualizado para usar HTTPS, mas essa versão ainda não está em meus repositórios. aria2funcionou bem para mim.
usar o seguinte comando
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.