Як зробити 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.