Як зробити wget швидшим чи багатопоточним?


39

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

Я прочитав довідкову інформацію про wget , здається, немає варіантів, які могли б зробити це швидше.

Чи все-таки можна зробити wget швидше? Або можливо зробити його завантаження багатопотоковим ?

PS: моя пропускна здатність - 4М. Я використовую цю команду:

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 4mbit = 0,5mb / s, не кажучи вже про втрати тощо
Dr_Bunsen

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

@Teifi Однією можливістю, якщо axelбагатопотокова передача працює краще, ніж wget при використанні одного і того ж віддаленого сервера, затримка між вашим кодом і віддаленим сервером дуже велика. Перевірте свій ping на віддалений сервер.
Джон Сіу

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

Відповіді:


52

Чому б не спробувати axel? Це повноцінний завантажувач командного рядка.

Встановити axelта нерестувати завантаження

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

де '[Num_of_Thread]'кількість паралельних з'єднань, які потрібно створити для кожного посилання, яке ви хочете завантажити.

-a просто покажіть покращену панель прогресу.

На відміну від багатьох інших менеджерів завантажень, Axel завантажує всі дані безпосередньо в цільовий файл, використовуючи один єдиний потік. Це економить деякий час наприкінці, оскільки програмі не потрібно об'єднувати всі завантажені частини.


Мені цікаво, чи є спосіб, можливо, через псевдонім і обгортку використовувати axel, коли він доступний замість curl або wget, якщо тільки в командному рядку немає більше одного параметра.
sorin

1
Я думаю, що цієї пропозиції недостатньо для завантаження одного файлу. Будь ласка, виправте мене, якщо потрібно. Моя спроба тут askubuntu.com/q/813483/25388
Léo Léopold Hertz 준영

54

Я спробував axelза рекомендацією Гуфрана , але це мене дуже розчарувало. Моєю метою було знайти заміну CLI, DownThemAllтому що він підвішує процесор і жорсткий диск і сповільнює роботу всієї системи навіть на 8-ядерному Mac Pro. Я також хотів багатопотокової заміни, wgetа curlне деякого хитрості скрипту, який запускає кілька примірників. Тож я шукав далі і виявив, що, на мою думку, зараз найвищий сучасний багатопотоковий завантажувач CLI - aria2 . Великою проблемою у мене axelбуло те, що він "підробив" завантаження файлів через SSL. Я зловив це, роблячи це tcdump. Він завантажував httpsпосилання як звичайніhttp. Це нас справді розлютило, і якби я не перевірив, я мав би помилкове почуття безпеки. Сумніваюсь, що багато людей знають про це серйозне порушення безпеки. Повертаючись до цього aria2, він більш досконалий, ніж будь-який інший завантажувач. Він підтримує протоколи HTTP (S), FTP, BitTorrent і Metalink, є багатоплатформою і є партизанським завантаженням. Він збільшує пропускну здатність мого провайдера без навантаження на процесор або жорсткий диск, на відміну від DTA. Сторінка людини - гігантська. Я ніколи не буду використовувати більше ніж декілька його безлічі варіантів. І о, BTW, я перевірив його 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 Модель 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.