wget ist ein nettes Kommandozeilenwerkzeug, um Webseiten oder Dateien per HTTP oder ftp herunterzuladen. Wenn man eine lange Datei herunterlädt und die Verbindung bricht ab, kann man mit wget -c (oder wget --continue) an der Stelle des Abbruchs fortsetzen, ohne die Datei komplett neu laden zu müssen.
wget kennt eine ganze Reihe nützlicher Optionen.
Homepage: http://www.gnu.org/software/wget/wget.html
Lizenz: GPL
INFO! wget hat sich zwar als Downloadstandard auf der Konsole durchgesetzt, aber wie wir schon von Betriebssystemen gelernt haben sollten, Standard ist aber nicht gleichbedeutend ist mit Nonplusultra jedenfalls gibt es einige Sicherheitslücken in wget - die Meldungen sind zwar von 2004 aber immer noch aktuell:
Als Workaround schlägt der wget-Maintainer den Einsatz anderer Tools wie axel, pavuk oder ncftpget vor. Ein Tutorial zu axel findet sich hier. Natürlich kann Axel auch für Portage (Gentoo) oder auch für apt-get (Debian) nehmen, um auch dort wget zu ersetzen, und die Downloads zu beschleunigen. (Achtung aber, nicht jeder Server mag mehrere Verbindungen auf einmal - dann einfach axel mit -n 1 betreiben, dann verhält sich der Axel wie der wget).
Alternativen
axel (kann auch multithreaded downloaden)
Tipps & Tricks
Herunterladen von Dateien
Normalerweise ruft man wget mit der Zeile
wget http://www.foo.net/download/paket.rpm
auf. Dies holt die Datei paket.rpm auf den lokalen Rechner. Bricht der Download irgendwo ab, kann man den Rest mit
wget -c http://www.foo.net/download/paket.rpm oder wget --continue http://www.foo.net/download/paket.rpm
abholen.
Manchmal wird das Herunterladen durch den Server verweigert. Es erscheint FEHLER 403: Forbidden. Mit der Option --user-agent=ein_beliebiger_Browsername kann der Fehler ggf. übergangen werden (Beispiel: DruckAnsicht).
Zu wget gibt es eine Reihe graphischer Frontends, z.B. KWebGet oder GTM. wget ist jedoch eine gute Möglichkeit für Ein- und Umsteiger erste Erfahrungen mit der Kommandozeile zu machen, da es einfach zu bedienen ist, man nicht allzuviel damit kaputtmachen kann und man endlich weiß, dass ein Browser zum Herunterladen vieler und vor allem großer Dateien nicht taugt .
Zyklisches Herunterladen von Dateien
Möchte man eine Datei zyklisch, z.B. einmal pro Minute, herunterladen, kann man - z.B. um das Bild einer Webcam einmal pro Minute zu speichern - folgendes kleines Skript verwenden:
#/bin/sh while /bin/true; do wget http://host/webcam.jpg -O webcam_`/bin/date '+%Y%m%d_%H%M'`.jpg; sleep 60; done;
Die Dateien heißen dann "webcam_20100615_0946.jpg" usw. Das Skript kann mit Strg+C abgebrochen werden.
Mini-Howto
wget -r -l 2 http://www.webseite.org/index.html oder wget --recursive --level=2 http://www.webseite.org/index.html
holt die Webseite index.html vom Server. Zusätzlich werden rekursiv (-r) alle Dateien geholt, die sich bis zu 2 (-l 2) Verweise von der Hauptseite weg befinden. Dabei wird auch die Verzeichnisstruktur des Servers im Downloadverzeichnis abgebildet.
Achtung: Setzt man -l auf den Wert 0, so heißt das, dass die Rekursionstiefe nicht 0, sondern unendlich ist. Somit würde man schätzungsweise das komplette Internet auf die lokale Festplatte schaufeln .
wget beherrscht auch die Option -i. Dann liest wget die abzuholenden Dateien aus einer Datei. Das ist beispielsweise nützlich, wenn man eine Reihe von Dateien (beispielsweise die neuesten KDE-Binaries ) von einem Server holen möchte.
Beispiel:
Die Datei Filelinks enthält die URLs zu den einzelnen Paketen. Dann kann man mit
wget -i Filelinks oder wget --input-file=Filelinks
alle Dateien abholen lassen. Ist der Download fertig, empfiehlt es sich, den Befehl mit der Option -c erneut auszuführen und die wget-Ausgabe zu beobachten:
wget -c -i Filelinks Paket1.rpm: Download der Datei bereits vollständig. Paket2.rpm: Download der Datei bereits vollständig. Paketn.rpm: Download der Datei bereits vollständig.
So stellt man sicher, dass die Dateien auch tatsächlich komplett übertragen wurden. Da es aber auch Netzwerktraffic verursacht, nur dann einsetzen, wenn unbedingt nötig. Eine (schnellere) Alternative hierzu ist puf (Parallel URL Fetch).
wget und proxys
Damit wget auch über den proxy benutzt werden kann, müssen der bzw. die Proxies entweder in der Datei ~/.wgetrc oder als Umgebungsvariablen gesetzt sein.
Werden die Variablen verwendet, so werden diese auch von manchen anderen Programmen (z. B. lynx) genutzt
Interessant sind in der Datei ~/.wgetrc folgende Optionen:
http_proxy = mein.proxy:8080 ftp_proxy = mein.proxy:8080
Alternativ: Setzen der Variable(n):
export http_proxy=mein.proxy:8080 export ftp_proxy=mein.proxy:8080
Frage und Antwort
Frage: Gibt es eigentlich eine Möglichkeit eine Seite per wget zu holen und gleich anzuzeigen? Ich suche nämlich noch eine schnellere Alternative zu curl. -- DanielBrüßler 2003-11-24 19:25:59
Antwort: wget -O - http://www.example.org/, das "-" nach dem "-O" gibt an, dass Quelle auf STDOUT ausgegeben wird. -- DanijelTasov
Antwort: dog (advanced replacement for cat) könnte hilfreich sein.
Frage: Beim Übertragen von Dateien >2G über http mit einem wget von Knoppix 3.1 und Debian Woody schlägt ein assert() in retr.c:254 fehl. Bug? Was kann man tun? -- 131.220.99.35 2004-01-30 16:11:02
wget 1.9.1-5 hat einen Bug, der verhindert, dass große Dateien heruntergeladen werden können. Es gibt Fixe, aber noch nicht in der offiziellen Version.