¿Cómo hacer que wget sea más rápido o multiproceso?

39

Acabo de actualizar el hardware de mi computadora (cpu + placa base + tarjeta gráfica + memoria + disco duro), por lo que es necesario instalar un nuevo sistema operativo. Traté de descargar debian-6.0.6-amd64-netinst.isocon el wgetcomando, pero la velocidad es tan lenta que no pude soportarlo. 4Kb/s ~ 17 Kb/s, lento como una tortuga corriendo, o incluso más lento si uso Chrome.

He leído la información de ayuda de wget , parece que no hay opciones que podrían hacerlo más rápido.

¿Hay alguna forma de hacer que wget sea más rápido? ¿O es posible hacer una descarga de subprocesos múltiples ?

PD: mi ancho de banda es de 4M. Yo uso este comando:

wget -c url  http://hammurabi.acc.umu.se/debian-cd/6.0.6/amd64/iso-cd/debian-6.0.6-amd64-netinst.iso
Teifi
fuente
1
wget solo usa tu conexión. Entonces, si es lento, esa es su conexión con el servidor. Tal vez eres lento, tal vez el servidor lo es. por cierto 4mbit = 0.5mb / s, sin mencionar la pérdida, etc.
Dr_Bunsen
@Dr_Bunsengracias por tu consejo, probé el comando que @Gufransugería:, en axelcomparación con el ancho wget, axeles más rápido que nunca. Creo que en la mayoría de las situaciones, el cuello de botella de mi velocidad de descarga es 1 . algo ocupaba el ancho de banda (como dijiste: soy lento ). 2 . Enhebrado simple. 3 . El servidor es lento. Pero no tengo nada que ver con el punto 1 y 3 .
Teifi
@Teifi Una posibilidad si axellos subprocesos múltiples funcionan mejor que wget cuando se usa el mismo servidor remoto, la latencia entre su caja y el servidor remoto es muy alta. Verifique su ping al servidor remoto.
John Siu
¿Has probado HTTrack? httrack.com/page/1/en/index.html
amanthethy

Respuestas:

52

¿Por qué no intentarlo axel? Es un descargador basado en la línea de comandos de pleno derecho.

Instalar axely generar descarga por

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

donde '[Num_of_Thread]'es el número de conexiones paralelas a crear para cada enlace que desea descargar.

-a solo muestra una barra de progreso mejorada.

A diferencia de muchos otros administradores de descargas, Axel descarga todos los datos directamente al archivo de destino, utilizando un solo hilo. Esto ahorra algo de tiempo al final porque el programa no tiene que concatenar todas las partes descargadas.

Gufran
fuente
Me pregunto si hay una manera, tal vez a través de un alias y un contenedor, para usar axel cuando esté disponible en lugar de curl o wget, a menos que haya más de un parámetro en la línea de comando.
sorin
1
Creo que esta propuesta no es suficiente para la descarga de un archivo. Por favor, corrígeme si es necesario. Mi intento aquí askubuntu.com/q/813483/25388
Léo Léopold Hertz 준영
54

Probé axela Gufran recomendación 's pero me enormemente decepcionado. Mi objetivo era encontrar un reemplazo de CLI DownThemAllporque acapara la CPU y el disco duro y ralentiza todo el sistema incluso en un Mac Pro de 8 núcleos. También quería un reemplazo multiproceso para , wgety curlno un poco de un script que ejecuta múltiples instancias de estos. Así que busqué más y encontré lo que creo que en este momento es el descargador de CLI multiproceso más moderno que existe: aria2 . El gran problema que tuve axelfue que 'falsificó' la descarga de archivos a través de SSL. Lo atrapé haciendo eso con tcdump. Estaba descargando httpsenlaces como de costumbrehttp. Eso realmente me molestó y si no lo hubiera comprobado, habría tenido una falsa sensación de seguridad. Dudo que mucha gente sepa sobre esta grave violación de la seguridad. Volviendo a aria2, es más avanzado que cualquier otro descargador. Es compatible con los protocolos HTTP (S), FTP, BitTorrent y Metalink, es multiplataforma y es una guerrilla de descarga. Maximiza el ancho de banda de mi ISP sin carga en la CPU o el disco duro, a diferencia del DTA. La página del manual es gigantesca. Nunca usaré más que algunas de sus muchas opciones. Y, por cierto, verifiqué su rendimiento SSL tcdumpy es sólido, no falso. Escribí un script que imita el comportamiento de DTA, si no su conveniencia.

El comando básico que uso para obtener el ancho de banda máximo es

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

-cpermite la continuación de la descarga si se interrumpe, -x 10y -s 10permite hasta 10 conexiones por servidor, y -d "mydir"envía el archivo al directorio 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"

Lee un archivo de texto del formato:

files.txt:

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

El script lee el nombre del archivo desde la línea de comando:

aria2files.sh files.txt

Crea los directorios y las descarga a ellos. Puede crear directorios anidados como se muestra en el segundo ejemplo.

Para obtener más detalles, consulte mi script Bash posterior para descargar archivos de URL a directorios específicos enumerados en un archivo de texto .

hmj6jmh
fuente
¿Puedes aplicar tu método aquí también askubuntu.com/q/813483/25388 Mi intento fallido aria2c -x10 -s10 http://horatio.cs.nyu.edu/mit/tiny/data/tiny_images.bin.
Léo Léopold Hertz 준영
Gracias @ hmj6jmh! Para el registro en un Rapsberry Pi Model 3: wget -4 -c <https://URL/ISO_FILE>me da ~ 40 KB / seg ( 87300K .......... .......... 11% 38.7K 4h28mcuando el mismo archivo descargado aria2c --disable-ipv6 -cda ~ 250 KB / seg ( 144MiB/717MiB(20%) CN:1 DL:250KiB ETA:39m3s]).
tuk0z
1
Si (como yo) quiere evitar Sourceforge, aria2 es parte de los repositorios, por lo que puede instalarlo consudo apt install aria2
Bar
Buena respuesta. Para los sitios que fuerzan solo HTTPS, la aplicación axeldirecta no funciona. Parece que se ha actualizado para usar HTTPS, pero esa versión aún no está en mis repositorios. aria2funcionó bien para mí
WindowsEscapist