“wget” spiegelt Inhalte von Web- und FTP-Servern, kann abgebrochene Downloads fortsetzen und bietet eine praktische Update-Funktion, mit der Sie bei Änderungen immer auf dem neuesten Stand bleiben.
Grafische Downloadmanager wie KGet [1] machen das Herunterladen ganzer Web-Archive kinderleicht – allerdings dauert es manchmal eine kleine Ewigkeit, sich durch die ganzen Konfigurationsdialoge zu klicken. Als Alternative bietet sich auf der Kommandozeile wget an: Wir zeigen, wie Sie geschickt Optionen kombinieren und damit die wichtigsten wget-Features nutzen.
Alle Optionen des Programms haben eine kurze und eine lange Form. So lässt sich wget beispielsweise mit -r oder --recursive starten – beide Parameter bewirken das Gleiche. Meist haben die langen Versionen eine größere Aussagekraft und lassen sich daher leichter merken, bedeuten aber höheren Tippaufwand. Für den Fall, dass Sie eine Kurzfassung vergessen haben, bietet sich ein Blick in die Manpage an (man wget). Alternativ erhalten Sie eine Kurzdarstellung aller Optionen auf der Kommandozeile, wenn Sie wget -h (--help) tippen. In diesem Artikel stehen alternative Schreibweisen für Parameter in Klammern hinter der Kurzform.
Richtig verbunden
Für den ersten Programmaufruf stellen Sie zunächst sicher, dass es eine funktionierende Internet-Verbindung gibt. Außerdem empfiehlt es sich, ein Testverzeichnis anzulegen und in dieses hineinzuwechseln:
mkdir wgettest cd wgettest
Jetzt ist es Zeit für den ersten wget-Aufruf. Geben Sie eine Web-Adresse an, die Sie herunterladen möchten – wget berichtet auf der Konsole, was im Hintergrund abläuft (Listing 1).
Listing 1
Erster Wget-Test
huhn@susevm:~> wget www.easylinux.de --2016-10-04 10:31:08-- http://www.easylinux.de/ Auflösen des Hostnamen »www.easylinux.de (www.easylinux.de)«... 195.122.146.187 Verbindungsaufbau zu www.easylinux.de (www.easylinux.de)|195.122.146.187|:80... verbunden. HTTP-Anforderung gesendet, warte auf Antwort... 200 OK Länge: 18753 (18K) [text/html] In »»index.html«« speichern. 100%[======================================>] 18.753 --.-K/s in 0,09s 2016-10-04 10:31:08 (211 KB/s) - »»index.html«« gespeichert [18753/18753]
Neben der Uhrzeit und der zu spiegelnden Adresse sehen Sie, dass wget den Hostnamen, also den Namen des Zielrechners, auflöst. “Auflösen” bedeutet hier, dass wget zum Namen die zugehörige IP-Adresse (62.245.157.216) ermittelt. wget verbindet sich nun mit dem Web-Server von EasyLinux (“:80” steht hier für Port 80, den Standard-Port für HTTP). Danach folgen Größe und Dateityp ([text/html]), und der Download beginnt. Die Statusanzeige (====>) informiert Sie, wie weit der Download fortgeschritten ist.
Wer diese Angaben nicht sehen möchte, teilt dies dem Programm einfach über den Parameter -q (--quiet, englisch “quiet” = leise, still) mit. Der Aufruf lautet dann wget -q www.easylinux.de. Damit eventuelle Fehlermeldungen und/oder ein paar grundlegende Informationen dennoch durchkommen, gibt es eine Zwischenlösung – wget -nv www.easylinux.de (--non-verbose) meldet nicht ganz so viel wie der Standardaufruf, schweigt sich aber auch nicht vollkommen aus.
Im aktuellen Verzeichnis befindet sich jetzt die Datei index.html – wget hat allerdings weder Bilder noch Unterverzeichnisse kopiert.
Ich will alles!
Um in die Tiefe zu gehen und auch Bilder und Unterverzeichnisse vom Server herunterzuladen, verwenden Sie die Option -r (--recursive) – wget folgt nun den Links und der Verzeichnisstruktur des Servers. Dabei erscheinen Ausgaben ähnlich wie in Listing 1 für jede Datei, die das Tool herunterlädt.
In Ihrem Testverzeichnis liegt nun ein Unterverzeichnis www.easylinux.de, in das rekursiv die Struktur des EasyLinux-Web-Servers übertragen wurde (Abbildung 1). (Sie werden diesen Vorgang in der Regel abbrechen wollen, da sonst wirklich der gesamte Inhalt unseres Web-Servers heruntergeladen wird.) In diesem Zusammenhang bietet sich die Option -l tiefe (--level=tiefe) an, wobei tiefe für die Verzeichnistiefe steht, in die Sie vordringen wollen. Standardmäßig spiegelt wget fünf Level. Um lediglich die Struktur bis zu einem Unterverzeichnis zu übertragen, verwenden Sie wget -r -l1 www.easylinux.de.

Abbildung 1: Beim rekursiven Herunterladen legt “wget” Schritt für Schritt eine lokale Kopie des Webservers an.
Wer häufiger vom gleichen Server Daten spiegelt, wird sich über den Parameter -N (--timestamping) freuen: wget vergleicht damit für jede Datei die Größe und das Datum mit einer bereits vorhandenen lokalen Kopie (Listing 2).
Listing 2
Nur aktualisierte Dateien ziehen
huhn@susevm:~> wget -r -l1 -N www.easylinux.de --2016-10-04 10:37:32-- http://www.easylinux.de/ Auflösen des Hostnamen »www.easylinux.de (www.easylinux.de)«... 195.122.146.187 Verbindungsaufbau zu www.easylinux.de (www.easylinux.de)|195.122.146.187|:80... verbunden. HTTP-Anforderung gesendet, warte auf Antwort... 200 OK Länge: 1016 [text/html]Größen stimmen nicht überein (lokal 18753) -- erneuter Download. [...] --2016-10-04 10:37:32-- http://www.easylinux.de/pix/clear.gif Wiederverwendung der bestehenden Verbindung zu www.easylinux.de:80. HTTP-Anforderung gesendet, warte auf Antwort... 200 OK Länge: 43 [image/gif]Datei auf dem Server nicht neuer als die lokale Datei »»www.easylinux.de/pix/clear.gif«« -- kein Download.
In diesem Beispiel ist schön zu sehen: Die Größe der Datei index.html hat sich seit dem letzten Download geändert; wget spiegelt die Datei daher noch einmal. Für die Datei clear.gif wird hingegen erkannt, dass die Datei auf dem Server nicht neuer ist, und der erneute Download wird ausgesetzt – das spart Zeit und Transfervolumen.
Etwas genauer, bitte!
Für den Fall, dass Sie nur Bilddateien von einem Server herunterladen möchten, bringt wget eine besondere Option mit: Ein Aufruf der Art wget -r -l1 *.jpg www.easylinux.de führt leider ins Aus – das Programm meldet:
--2016-10-04 10:40:43-- http://*.jpg/ Auflösen des Hostnamen »*.jpg (*.jpg)«... fehlgeschlagen: Der Name oder der Dienst ist nicht bekannt. wget: kann die Host-Adresse »*.jpg« nicht auflösen
Abhilfe schafft der Parameter -A liste (--accept liste). In der liste müssen nun die Dateitypen definiert werden. Dazu geben Sie einfach die entsprechenden Endungen an:
huhn@susevm:~> wget -r -l1 -A jpg,gif,png www.easylinux.de [...] Entferne »www.easylinux.de/2016/03/index.html«, da dies zurückgewiesen werden soll.
Im Hintergrund lädt wget zwar auch andere Dateien mit herunter, entfernt diese aber wieder vom eigenen Rechner, wie die Ausgabe zeigt.
Genau entgegengesetzt arbeitet -R liste (--reject liste) und erlaubt die Definition einer Liste von Dateitypen, die keinesfalls auf der eigenen Platte landen sollen. Der Aufruf wget -r -l1 -R avi,mpg,mp3 www.easylinux.de würde den Download dieser Dateitypen verhindern, wenn es solche Dateien auf dem EasyLinux-Server gäbe.
Im Hintergrund
Einer der großen Vorteile von wget gegenüber grafischen Programmen ist, dass Downloads im Hintergrund laufen können – selbst nachdem Sie sich vom System abgemeldet haben. Mit dem Parameter -b (--background) schicken Sie wget direkt in den Hintergrund. Standardmäßig leitet das Programm die übliche Ausgabe in die Datei wget-log im gleichen Verzeichnis um (Abbildung 2).

Abbildung 2: Starten Sie einen “wget”-Download mit der Option “-b” im Hintergrund, können Sie in der Protokolldatei “wget-log” seine Aktivität beobachten.
Auf Wunsch schreibt wget den Output auch woanders hin. Geben Sie einfach mit dem Parameter -o logfile (--output-file=logfile) einen selbst gewählten Dateinamen an. Sollen die wget-Meldungen nicht in ein neues Logfile gelegt, sondern an ein bereits vorhandenes angehängt werden, können Sie das mit -a logfile (--append-output=logfile) erreichen.
Reparaturmodus
wget kann abgebrochene Downloads wieder aufnehmen – dabei spielt es keine Rolle, ob die halbfertigen Dateien von einem vorherigen wget-Aufruf oder von einem Download mit einem anderen Programm stammen. Hängen Sie an wget den Parameter -c (--continue) an, meldet das Programm, an welcher Stelle es den Download wieder aufnimmt (Listing 3).
Listing 3
Einen abgebrochenen Download fortsetzen
huhn@susevm:~> wget -c http://server.de/dokument.pdf --2016-10-04 11:00:06-- http://server.de/dokument.pdf [...] HTTP-Anforderung gesendet, warte auf Antwort... 206 Partial Content Länge: 11009209 (10M), 4699673 (4,5M) sind noch übrig [application/pdf] In »»dokument.pdf«« speichern. 88% [+++++++++++++=======> ] 9.752.167 2,72MB/s ^C
Vergessen Sie die Option einmal, ist dies jedoch kein Grund zur Panik – wget überschreibt nicht einfach wahllos Dateien, sondern legt zur Sicherheit durchnummerierte Backups (datei.png.1, datei.png.2 usw.) an. Vorsicht ist dennoch geboten: Ist die Datei auf dem Server größer als eine eventuell schon vollständige Datei auf dem eigenen Rechner, wird die Situation als “abgebrochener Download” identifiziert, und wget überschreibt die eigene Datei einfach. Daher gilt (gerade in Zusammenhang mit der -r-Option): Lieber ein regelmäßiges Backup der Daten erstellen als unangenehme Überraschungen erleben!
Gut in Form
Auf vielen Web-Servern werden Inhalte dynamisch generiert. Das bedeutet fürs Spiegeln mit wget u. a., dass anschließend keine Dateien mit der Endung .html auf der eigenen Platte liegen. Der Parameter -E (--html-extension) hilft dabei, die Dateien mit einer korrekten Endung zu versehen. So führt z. B. das Kommando
wget -E http://<server>/news/story?storyid=11629
dazu, dass anschließend eine Datei story?storyid=11629.html (also mit der zusätzlichen Endung .html) auf dem eigenen Rechner liegt.
Weil HTML-Dateien meist ziemlich leer aussehen, wenn die zugehörigen Bilder nicht übertragen wurden, müssen Sie nicht gleich mit Kanonen auf Spatzen schießen und das rekursive Spiegeln (-r) veranlassen. Mit dem Parameter -p (--page-requisites) laden Sie zusätzlich zur HTML-Datei auch die von ihr benutzten Bilder, Klänge usw. herunter.
FTP
wget spiegelt auf Wunsch auch Daten von FTP-Servern. Dabei sorgt das Programm auch für die korrekte Anmeldung am Server, im folgenden Beispiel geschieht das als anonymous (Listing 4; siehe auch NcFTP-Artikel [2]).
Listing 4
Zugriff auf FTP-Server
huhn@susevm:~> wget ftp://ftp4.gwdg.de/pub/opensuse/distribution/leap/42.1/iso/openSUSE-Leap-42.1-DVD-x86_64.iso
--2016-10-04 11:48:21-- ftp://ftp4.gwdg.de/pub/opensuse/distribution/leap/42.1/iso/openSUSE-Leap-42.1-DVD-x86_64.iso
=> »openSUSE-Leap-42.1-DVD-x86_64.iso«
Auflösen des Hostnamen »ftp4.gwdg.de (ftp4.gwdg.de)«... 134.76.12.4
Verbindungsaufbau zu ftp4.gwdg.de (ftp4.gwdg.de)|134.76.12.4|:21... verbunden.Anmelden als anonymous ... Angemeldet!
==> SYST ... fertig. ==> PWD ... fertig.
==> TYPE I ... fertig. ==> CWD (1) /pub/opensuse/distribution/leap/42.1/iso ... fertig.
==> SIZE openSUSE-Leap-42.1-DVD-x86_64.iso ... 4648337408
==> PASV ... fertig. ==> RETR openSUSE-Leap-42.1-DVD-x86_64.iso ... fertig.
Länge: 4648337408 (4,3G) (unmaßgeblich)
0% [ ] 5.715.416 2,22MB/s@KE:
Praktischerweise funktioniert bei FTP-Servern, was für Web-Server mit --accept list erst eingeschaltet werden muss: Wildcards, wie z. B. * oder ?, dürfen eingesetzt werden. Diese Jokerzeichen lassen Teile von Zeichenketten unbestimmt. Ein Fragezeichen ? in einer Zeichenkette lässt nur denjenigen Buchstaben dieser Zeichenkette unbestimmt (z. B. h?llo => hallo, hGllo, h7llo,…), an dem sich das Fragezeichen befindet, während ein Stern * für beliebig viele verschiedene Zeichen steht (z. B. G*ss => Guss, Genuss). Für den wget-Aufruf aus Listing 4 gilt, dass die Variante
wget ftp://ftp4.gwdg.de/pub/opensuse/distribution/leap/42.1/iso/*.iso
alle beiden dort liegenden ISO-Dateien auf die eigene Platte bringt.
HTTPS
Das HTTPS-Protokoll ermöglicht eine sichere und verschlüsselte Datenübertragung zwischen Browser und Server. Dazu benutzt es SSL (Secure Socket Layer), einen Standard zur Verschlüsselung von Kommunikation. Neben der Sicherstellung, dass es sich um den richtigen Server handelt, wird geprüft, ob die Daten vollständig und unverändert den Empfänger erreichen. Die Authentifizierung läuft mittels so genannter Zertifikate, die von anerkannten Stellen in der Regel kostenpflichtig ausgestellt werden. Viele Anbieter (z. B. Banken oder Online-Kaufhäuser) im WWW verwenden diese Technik, um ihren Kunden maximale Sicherheit zu garantieren.
wget kann, wenn Sie einen gültigen Benutzernamen und das passende Passwort haben, auch solche Seiten spiegeln. Im Kommandozeilenaufruf leiten Sie die sichere Übertragung mit den beiden Optionen --http-user=benutzername und --http-passwd=passwort ein:
wget --http-user=benutzername --http-passwd=passwort https://www.sicherserver.de/
Beim Gebrauch dieser Option ist allerdings Vorsicht geboten: Hat jemand anders einen Account auf dem Rechner, von dem aus Sie diesen Aufruf starten, kann er mit einem kleinen Befehl “lauschen” und so Ihre geheimen Zugangsdaten erfahren:
$ ps auxwww | grep wget huhn 4928 0.4 0.3 3496 1916 pts/4 S 20:04 0:00 wget --http-user=benutzername --http-passwd=passwort https://www.sicherserver.de/
Daher tragen Sie diese vertraulichen Informationen besser in eine Konfigurationsdatei in Ihrem Home-Verzeichnis ein. Diese Datei heißt .wgetrc – der vorangestellte Punkt sorgt dafür, dass sie versteckt ist. Die Zugangsdaten ergänzen Sie in dieser Datei durch zwei Zeilen der Form
http_user = bla http_passwd = blubb
Damit kein anderer Benutzer diese Datei lesen kann, machen Sie sie nur für sich selbst les- und schreibbar, am einfachsten mit dem Befehl:
chmod 600 ~/.wgetrc
Anschließend benutzen Sie wget wie gewohnt – aber ohne die Optionen --http-user=benutzername und --http-passwd=passwort.
Infos
[1] KGet-Artikel: Kristian Kißling, “Volle Saugkraft voraus”, EasyLinux 02/2012, S. 58 ff., http://linux-community.de/25207
[2] NcFTP-Artikel: Heike Jurzik, “Transferleistung”, EasyLinux 03/2004, S. 74 ff., http://www.easylinux.de/2004/03/074-ncftp/

