Как сделать wget быстрее или многопоточным?


39

Я только что обновил аппаратную часть своего компьютера (процессор + материнская плата + графическая карта + память + жесткий диск), поэтому требуется установка новой ОС. Я пытался загрузить debian-6.0.6-amd64-netinst.isoс помощью wgetкоманды, но скорость настолько низкая, что я не мог вынести. 4Kb/s ~ 17 Kb/s, медленно, как бегущая черепаха, или еще медленнее, если я использую Chrome.

Я прочитал справочную информацию wget , кажется, что нет никаких вариантов, которые могли бы сделать это быстрее.

Есть ли способ сделать wget быстрее? Или есть возможность сделать многопоточную загрузку?

PS: моя пропускная способность 4M. Я использую эту команду:

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 просто использует ваше соединение. Так что, если он медленный, это ваше соединение с сервером. Может быть, вы медленный, может быть, сервер. btw 4 Мбит = 0,5 Мбит / с, не говоря уже о потере и т. д.
Dr_Bunsen

@Dr_Bunsenспасибо за ваш совет, я попробовал команду, которая @Gufranпредложила: axelпо сравнению ширина wget, axelбыстрее, чем когда-либо. Я думаю, что в большинстве ситуаций узким местом моей скорости загрузки являются 1 . что-то заняло пропускную способность (как вы сказали: я медленный ). 2 . однопоточный. 3 . сервер работает медленно Но я не имею ничего общего с пунктами 1 и 3 .
Тейфи

@Teifi Одна из возможностей, если axelмногопоточность работает лучше, чем wget, при использовании одного и того же удаленного сервера, задержка между вашим устройством и удаленным сервером очень высока. Проверьте ваш пинг на удаленный сервер.
Джон Сиу

Вы пробовали HTTrack? httrack.com/page/1/en/index.html
amanthethy

Ответы:


52

Почему бы не попробовать axel? Это полноценный загрузчик командных строк.

Установить axelи запустить загрузку по

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

где '[Num_of_Thread]'число параллельных соединений, создаваемых для каждой ссылки, которую вы хотите скачать.

-a просто покажите улучшенный индикатор прогресса.

В отличие от многих других менеджеров загрузки, Axel загружает все данные непосредственно в конечный файл, используя один поток. Это экономит некоторое время в конце, потому что программе не нужно объединять все загруженные части.


Мне интересно, есть ли способ, может быть, с помощью псевдонима и оболочки, чтобы использовать аксель, когда доступен вместо curl или wget, если в командной строке не более одного параметра.
Сорин

1
Я думаю, что этого предложения недостаточно для загрузки одного файла. Пожалуйста, поправьте меня при необходимости. Моя попытка здесь askubuntu.com/q/813483/25388
Лео Леопольд Герц 준영

54

Я пытался axelпо Gufran рекомендации «s , но он очень меня разочаровал. Моя цель состояла в том, чтобы найти замену CLI, DownThemAllпотому что он загружает процессор и жесткий диск и замедляет работу всей системы даже на 8-ядерном Mac Pro. Я также хотел многопоточную замену, wgetа curlне какой-то кусочек скрипта, который запускает несколько таких экземпляров. Поэтому я продолжил поиск и нашел то, что я считаю сейчас самым совершенным многопоточным загрузчиком CLI - aria2 . Большая проблема, с которой я столкнулся, axelзаключалась в том, что он «фальсифицировал» загрузку файлов через SSL. Я поймал это, делая это с tcdump. Скачивал httpsссылки как обычноhttp, Это действительно разозлило меня, и если бы я не проверил, у меня было бы ложное чувство безопасности. Я сомневаюсь, что многие люди знают об этом серьезном нарушении безопасности. Возвращаясь к этому aria2, он более продвинут, чем любой другой загрузчик. Он поддерживает протоколы HTTP (S), FTP, BitTorrent и Metalink, является мультиплатформенным и является партизанской загрузкой. Это максимизирует пропускную способность моего провайдера без нагрузки на процессор или жесткий диск, в отличие от DTA. Страница man является гигантской. Я никогда не буду использовать больше, чем несколько из его многочисленных вариантов. И, кстати, я проверил его SSL-производительность, tcdumpи он твердый, а не подделка. Я написал скрипт, который имитирует поведение DTA, если не его удобство.

Основная команда, которую я использую для получения максимальной пропускной способности:

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

-cпозволяет продолжить загрузку, если она прервана, -x 10и -s 10разрешить до 10 подключений на сервер, и -d "mydir"выводит файл в каталог 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"

Читает текстовый файл в формате:

files.txt:

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

Скрипт читает имя файла из командной строки:

aria2files.sh files.txt

Он создает каталоги и загружает их. Он может создавать вложенные каталоги, как показано во втором примере.

Для более подробной информации смотрите мой пост Bash скрипт для загрузки файлов с URL-адресов в указанные каталоги, перечисленные в текстовом файле .


Можете ли вы применить здесь свой метод? Askubuntu.com/q/813483/25388 Моя неудачная попытка aria2c -x10 -s10 http://horatio.cs.nyu.edu/mit/tiny/data/tiny_images.bin.
Лео Леопольд Герц 준영

Спасибо @ hmj6jmh! Для записи на Rapsberry Pi Model 3: wget -4 -c <https://URL/ISO_FILE>дает мне ~ 40 КБ / с ( 87300K .......... .......... 11% 38.7K 4h28mкогда тот же файл, загруженный с помощью, aria2c --disable-ipv6 -cдает ~ 250 КБ / с ( 144MiB/717MiB(20%) CN:1 DL:250KiB ETA:39m3s]).
tuk0z

1
Если вы (как и я) хотите избежать Sourceforge, aria2 является частью репозиториев, так что вы можете установить его с помощьюsudo apt install aria2
Bar

Хороший ответ. Для сайтов, использующих только HTTPS, axelпрямое соединение не работает. Кажется, он был обновлен для использования HTTPS, но эта версия еще не в моих репозиториях. aria2работал хорошо для меня.
WindowsEscapist
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.