Bagaimana cara membuat wget lebih cepat atau multithreading?


39

Saya baru saja memutakhirkan perangkat keras komputer saya (cpu + motherboard + kartu grafis + memori + hard disk), sehingga menginstal OS baru diperlukan. Saya mencoba mengunduh debian-6.0.6-amd64-netinst.isodengan wgetperintah tetapi kecepatannya sangat lambat sehingga saya tidak tahan. 4Kb/s ~ 17 Kb/s, lambat seperti kura-kura berlari, atau bahkan lebih lambat jika saya menggunakan Chrome.

Saya sudah membaca informasi bantuan wget , sepertinya tidak ada pilihan yang bisa membuatnya lebih cepat.

Apakah ada cara untuk membuat wget lebih cepat? Atau mungkinkah membuatnya menjadi unduhan multi-threading ?

PS: bandwidth saya 4M. Saya menggunakan perintah ini:

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 hanya menggunakan koneksi Anda. Jadi jika lambat, itu koneksi Anda dengan server. Mungkin Anda lambat, mungkin servernya. btw 4mbit = 0,5mb / s, belum lagi kerugian dll
Dr_Bunsen

@Dr_Bunsenterima kasih atas saran Anda, saya mencoba perintah yang @Gufranmenyarankan axel:, dibandingkan lebar wget, axellebih cepat dari sebelumnya. Saya pikir dalam sebagian besar situasi, hambatan dari kecepatan pengunduhan saya adalah 1 . sesuatu menduduki bandwidth (seperti yang Anda katakan: saya lambat ). 2 . threading tunggal. 3 . server lambat. Tetapi saya tidak ada hubungannya dengan poin 1 & 3 .
Teifi

@Teifi Satu kemungkinan jika axelmulti-thread berkinerja lebih baik daripada wget saat menggunakan server jauh yang sama, latensi antara kotak Anda dan server jauh sangat tinggi. Periksa ping Anda ke server jarak jauh.
John Siu

Sudahkah Anda mencoba HTTrack? httrack.com/page/1/en/index.html
amanthethy

Jawaban:


52

Kenapa tidak mencobanya axel? Ini adalah Pengunduh berbasis Command line sepenuhnya matang.

Instal axeldan spawn unduhan oleh

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

di mana '[Num_of_Thread]'jumlah koneksi paralel yang dibuat untuk setiap tautan yang ingin Anda unduh.

-a cukup tampilkan bilah kemajuan yang ditingkatkan.

Tidak seperti banyak manajer unduhan lainnya, Axel mengunduh semua data langsung ke file tujuan, menggunakan satu utas tunggal. Ini menghemat waktu pada akhirnya karena program tidak harus menggabungkan semua bagian yang diunduh.


Saya bertanya-tanya apakah ada cara, mungkin via alias dan pembungkus untuk menggunakan axel ketika tersedia, bukan curl atau wget, kecuali ada lebih dari satu parameter ke baris perintah.
sorin

1
Saya pikir proposal ini tidak cukup untuk mengunduh satu file. Tolong, perbaiki saya jika perlu. Usaha saya di sini askubuntu.com/q/813483/25388
Léo Léopold Hertz 준영

54

Saya mencoba axelatas rekomendasi Gufran tetapi sangat mengecewakan saya. Tujuan saya adalah untuk menemukan pengganti CLI DownThemAllkarena ia menggunakan CPU dan hard disk dan memperlambat seluruh sistem bahkan pada Mac Pro 8-core. Saya juga menginginkan penggantian multithreaded untuk wgetdan curl, bukan beberapa naskah yang menjalankan banyak contoh ini. Jadi saya mencari lebih jauh dan menemukan apa yang saya pikirkan saat ini adalah pengunduh CLI multithreaded paling modern yang ada - aria2 . Masalah besar yang saya miliki axeladalah 'memalsukan' mengunduh file melalui SSL. Aku ketahuan melakukannya dengan itu tcdump. Itu mengunduh httpstautan seperti biasahttp. Itu benar-benar membuatku jengkel dan jika aku tidak memeriksanya, aku akan memiliki rasa aman yang salah. Saya ragu bahwa banyak orang tahu tentang pelanggaran keamanan yang serius ini. Kembali ke aria2, itu lebih maju daripada pengunduh lainnya. Ini mendukung protokol HTTP (S), FTP, BitTorrent, dan Metalink, adalah multiplatform, dan merupakan gerilya unduhan. Ini memaksimalkan bandwidth ISP saya tanpa beban pada CPU atau hard disk, tidak seperti DTA. Halaman manual raksasa. Saya tidak akan pernah menggunakan lebih dari beberapa dari banyak pilihannya. Dan oh, BTW, saya memeriksa kinerja SSL-nya tcdumpdan itu solid, bukan palsu. Saya menulis sebuah skrip yang meniru perilaku DTA, jika bukan kenyamanannya.

Perintah dasar yang saya gunakan untuk mendapatkan bandwidth maks adalah

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

-cmemungkinkan kelanjutan pengunduhan jika terputus, -x 10dan -s 10memungkinkan hingga 10 koneksi per server, dan -d "mydir"menampilkan file ke direktori 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"

Bunyinya file teks format:

files.txt:

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

Script membaca nama file dari baris perintah:

aria2files.sh files.txt

Itu menciptakan direktori dan unduhan untuk mereka. Itu dapat membuat direktori bersarang seperti yang ditunjukkan pada contoh kedua.

Untuk lebih jelasnya lihat skrip Bash posting saya untuk mengunduh file dari URL ke direktori tertentu yang tercantum dalam file teks .


Dapatkah Anda menerapkan metode Anda di sini juga askubuntu.com/q/813483/25388 Upaya saya yang gagal aria2c -x10 -s10 http://horatio.cs.nyu.edu/mit/tiny/data/tiny_images.bin.
Léo Léopold Hertz 준영

Terima kasih @ hmj6jmh! Sebagai catatan pada Rapsberry Pi Model 3: wget -4 -c <https://URL/ISO_FILE>beri saya ~ 40 KB / detik ( 87300K .......... .......... 11% 38.7K 4h28msaat file yang sama diunduh dengan aria2c --disable-ipv6 -cmemberi ~ 250 KB / detik ( 144MiB/717MiB(20%) CN:1 DL:250KiB ETA:39m3s]).
tuk0z

1
Jika Anda (seperti saya) ingin menghindari Sourceforge, aria2 adalah bagian dari repositori, sehingga Anda dapat menginstalnya dengansudo apt install aria2
Bar

Jawaban yang bagus. Untuk situs yang memaksakan HTTPS saja, axelstraight-up tidak berfungsi. Tampaknya telah diperbarui untuk menggunakan HTTPS, tetapi versi itu belum ada di repositori saya. aria2bekerja dengan baik untuk saya.
WindowsEscapist
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.