Wget'ı daha hızlı veya çok iş parçacıklı hale getirmek nasıl?


39

Bilgisayar donanımımı yeni yükselttim (cpu + anakart + grafik kartı + bellek + sabit disk), böylece yeni bir işletim sistemi kurmak gerekli. Ben indirmek için çalıştı debian-6.0.6-amd64-netinst.isoile wgetkomuta ancak hız çok yavaş ben buna dayanamam olmasıdır. 4Kb/s ~ 17 Kb/s, çalışan bir kaplumbağa gibi yavaş ya da Chrome kullanıyorsam daha yavaş.

Wget'in yardım bilgisini okudum, sanırım daha hızlı yapabilecek hiçbir seçenek yok.

Yapmak için yine de var mı wget hızlı? Yoksa çoklu iş parçacığı indirme yapmak mümkün mü?

Not: Bant genişliğim 4M. Bu komutu kullanıyorum:

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 sadece bağlantınızı kullanır. Yani yavaşsa, sunucu ile bağlantınız budur. Belki yavaşsın, belki sunucu. btw 4mbit = 0.5mb / s, kayıp
vs.'den

@Dr_BunsenTavsiyeniz için teşekkür ederim, @Gufranönerilen komutu denedim :, axelkarşılaştırılan genişlik wget, axelher zamankinden daha hızlı. Sanırım çoğu durumda, indirme hızımdaki tıkanıklık 1 . bir şey bant genişliğini işgal etti (dediğiniz gibi: yavaşım ). 2 . Tek diş. 3 . sunucu yavaş. Ama 1 ve 3 puanla hiçbir ilgim yok .
Teifi

@Teifi axelAynı uzak sunucuyu kullanırken çoklu iş parçacığı wget'den daha iyi performans gösteriyorsa, kutunuzla uzak sunucu arasındaki gecikme çok yüksektir. Pinginizi uzak sunucuya kontrol edin.
John Siu

Yanıtlar:


52

Neden deneyin axel? Tam teşekküllü bir Komut satırı tabanlı Downloader.

Kur axelve spawn tarafından indir

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

nereye '[Num_of_Thread]'indirmek istediğiniz her bağlantı için yaratmak paralel bağlantıların sayısıdır.

-a sadece gelişmiş bir ilerleme çubuğu göster.

Diğer birçok indirme yöneticisinin aksine, Axel tüm verileri tek bir iş parçacığı kullanarak doğrudan hedef dosyaya indirir. Bu, programın indirilen tüm parçaları birleştirmek zorunda kalmamasından dolayı biraz zaman kazandırır.


Komut satırında birden fazla parametre olmadıkça, kıvrılma veya yazma yerine kullanılabilir olduğunda eksen kullanmanın bir takma adı ve sargısı yoluyla belki bir yol olup olmadığını merak ediyorum.
Sorin

1
Bu teklifin bir dosyanın indirilmesi için yeterli olmadığını düşünüyorum. Lütfen gerekirse beni düzeltin. Buradaki girişimim askubuntu.com/q/813483/25388
Léo Léopold Hertz 준영

54

Denedim axelüzerine Gufran 'ın önerisi ama o derece beni hayal kırıklığına uğrattı. Amacım, CLI'nin yerini DownThemAllalmaktı çünkü CPU'yu ve sabit diskini kapatıyor ve 8 çekirdekli bir Mac Pro'da bile tüm sistemi yavaşlatıyordu. Ben de bir çok iş parçacıklı değiştirme istedik wgetve curlbu birden çok örneğini çalıştıran bir betik bazı kludge. Bu yüzden daha fazla araştırdım ve şu anda düşündüğüm şeyi buldum: en modern çok iş parçacıklı CLI indiricisi var - aria2 . Karşılaştığım en büyük sorun axel, SSL üzerinden dosya indirirken 'sahte' olmasıydı. Bunu yaparken yakaladım tcdump. Bu indirme oldu httpssıradan olarak bağlantılarıhttp. Bu beni gerçekten sinirlendirdi ve kontrol etmeseydim, yanlış bir güvenlik hissim olurdu. Pek çok insanın güvenlikteki bu ciddi ihlalden haberdar olduğunu sanmıyorum. Geri dönersek aria2, diğer tüm indiricilere göre daha gelişmiş. HTTP (S), FTP, BitTorrent ve Metalink protokollerini destekliyor, çoklu platform ve bir indirme gerillası. ISS'imin bant genişliğini, DTA'nın aksine CPU veya sabit disk üzerinde herhangi bir yük olmadan maksimuma çıkarır. Erkek sayfası devasa. Asla birçok seçeneğinden daha fazlasını kullanmayacağım. Ve ah, BTW, SSL performansını kontrol ettim ve tcdumpsağlam, sahte değil. DTA'nın davranışını taklit eden, uygun olmasa da bir senaryo yazdım.

Maksimum bant genişliği elde etmek için kullandığım temel komut

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

-co kesintiye alır eğer indirmek devamını verir -x 10ve -s 10sunucu başına 10 adete kadar bağlantıya izin verir ve -d "mydir"dizine çıkışlar dosya 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"

Biçimin bir metin dosyasını okur:

files.txt:

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

Komut dosyası, dosya adını komut satırından okur:

aria2files.sh files.txt

Dizinleri oluşturur ve bunlara indirir. İkinci örnekte gösterildiği gibi iç içe dizinler oluşturabilir.

Daha fazla ayrıntı için , URL'lerden bir metin dosyasında listelenen belirli dizinlere dosya indirmek için Bash sonrası komut dosyama bakın .


Yönteminizi burada da uygulayabilir misiniz? Askubuntu.com/q/813483/25388 Başarısız denemem aria2c -x10 -s10 http://horatio.cs.nyu.edu/mit/tiny/data/tiny_images.bin.
Léo Léopold Hertz 준영

@ Hmj6jmh teşekkürler! Rapsberry Pi Model 3'teki kayıt için: wget -4 -c <https://URL/ISO_FILE>bana ~ 40 KB / sn verir ( 87300K .......... .......... 11% 38.7K 4h28maynı dosya indirildiğinde aria2c --disable-ipv6 -c~ 250 KB / sn ( 144MiB/717MiB(20%) CN:1 DL:250KiB ETA:39m3s]) verir.)
tuk0z

1
Eğer (benim gibi) Sourceforge'dan kaçınmak istiyorsan, aria2 depoların bir parçası, bu yüzden kurabilirsinsudo apt install aria2
Bar

İyi cevap. Yalnızca HTTPS'yi zorlayan siteler için, axeldüzeltme işlemi çalışmaz. HTTPS kullanacak şekilde güncellendi, ancak bu sürüm henüz depolarımda yok. aria2benim için iyi çalıştı.
WindowsEscapist
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.