claim.gif
Linux Magazin Linux User Easy Linux Ubuntu User International Linux Community
Erschienen in EasyLinux 04/2004   »   Ausgabe bestellen

wget

Spieglein, Spieglein, an der Wand...

von Heike Jurzik


wget spiegelt Inhalte von Web- und FTP-Servern, versteht HTTPS, nimmt abgebrochene Downloads wieder auf und besitzt eine praktische Update-Funktion, mit der Sie immer auf dem neuesten Stand bleiben.

Grafische Download-Manager wie Gwget oder KWebGet 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
suse9@transpluto:~/wgettest> wget www.easylinux.de
--11:48:54--  http://www.easylinux.de/
           => `index.html'
Auflösen des Hostnamen »www.easylinux.de«.... fertig.
Verbindungsaufbau zu www.easylinux.de[62.245.157.216]:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 20,115 [text/html]

100%[====================================>] 20,115      8.77K/s  ETA 00:00

11:49:01 (8.77 KB/s) - »index.html« gespeichert [20115/20115]

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 gespiegelt (Abbildung 1).

Abb. 1: Ein Blick in die Datei zeigt, dass der Download mit wget funktioniert.

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 (Listing 2).

Listing 2: Wget rekursiv
suse9@transpluto:~/wgettest> wget -r www.easylinux.de
--11:49:38--  http://www.easylinux.de/
           => `www.easylinux.de/index.html'
Auflösen des Hostnamen »www.easylinux.de«.... fertig.
[...]
--11:49:47--  http://www.easylinux.de/style.css
           => `www.easylinux.de/style.css'
Verbindungsaufbau zu www.easylinux.de[62.245.157.216]:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 1,580 [text/css]

100%[====================================>] 1,580       40.60K/s  ETA 00:00

11:49:48 (40.60 KB/s) - »www.easylinux.de/style.css« gespeichert [1580/1580]
[...]

In Ihrem Testverzeichnis liegt nun ein Unterverzeichnis www.easylinux.de, in das rekursiv die Struktur des EasyLinux-Web-Servers übertragen wurde. (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.

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 3).

Listing 3: Nur aktualisierte Dateien ziehen
suse9@transpluto:~/wgettest> wget -r -l1 -N www.easylinux.de
[...]
HTTP Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 3,664 [text/html]
Größen stimmen nicht überein (lokal 20115) -- erneuter Download.
--12:13:54--  http://www.easylinux.de/
           => `www.easylinux.de/index.html'
[...]
--12:13:59--  http://www.easylinux.de/pix/clear.gif
           => `www.easylinux.de/pix/clear.gif'
Weiterverwendung der 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:

Warnung: Joker-Zeichen werden bei HTTP nicht unterstützt.
--12:20:52--  http://*.jpg/
           => `*.jpg/index.html'

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:

suse9@transpluto:~/wgettest> wget -r -l1 -A jpg,gif,png www.easylinux.de
[...]
Entferne »www.easylinux.de/Artikel/ausgabe/2004/02/003-edi/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.

Abb. 2: Bitte nur Bilder vom Server laden.

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.

Langsame Internet-Verbindung?

Viele Anwender müssen sich noch mit einer langsamen Verbindung zum Internet quälen -- wget bietet einige Optionen, mit denen sich die Bandbreite für den Download reduzieren lässt, so dass noch freie Kapazität für andere Internet-Aktivitäten bleibt. Um die Bandbreite entsprechend einzuschränken, verwenden Sie die Option --limit-rate=wert. Dabei muss als wert eine Angabe folgen, wieviele Bytes pro Sekunde für wget zur Verfügung stehen. Lautet der Aufruf beispielsweise wget --limit-rate=20k, nimmt sich das Programm 20 KByte/s der gesamten Bandbreite. Benutzer mit schnellerer Leitung können alternativ das Suffix m für Megabyte wählen; das Kommando heißt dann entsprechend wget --limit-rate=10m für 10 MByte/s.

Auch die Gesamtgröße des Downloads lässt sich einschränken: Die Option -Q datenmenge (--quota=datenmenge) möchte wissen, welche datenmenge Sie insgesamt spiegeln wollen. Standardmäßig erfolgt die Angabe in Byte; Sie können aber auch Begrenzungen in KByte oder MByte definieren. Wie beim Parameter --limit-rate=wert tun Sie dies mit den Buchstaben k oder m. So sorgt der Befehl wget -r -l1 -Q5m dafür, dass der Download auf 5 MByte beschränkt wird.

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 3).

Abb. 3: Was geschah im Hintergrund?

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 4).

Listing 4: Einen abgebrochenen Download fortsetzen
suse9@transpluto:~/wgettest> wget -c www.server.de/bilder/datei.png
--17:10:11--  http://www.server.de/bilder/datei.png
           => `datei.png'
Auflösen des Hostnamen »www.server.de«.... fertig.
Verbindungsaufbau zu www.server.de[111.110.20.39]:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 206 Partial Content
Länge: 399,638 (noch 374,324) [image/png]

 9% [==>                                  ] 36,495       4.79K/s  ETA 01:14

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 das Kommando wget -E http://www.linux-community.de/Neues/story?storyid=11629 dazu, dass anschließend eine Datei story?storyid=11629.html auf dem eigenen Rechner liegt.

Weil solche 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. Abbildung 4 zeigt das Ergebnis von wget -E -p http://www.linux-community.de/Neues/story?storyid=11629 im Konqueror.

Abb. 4: Sauber sortiert und mit den richtigen Endungen.

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 5; siehe auch NcFTP-Artikel [1]).

Listing 5: Zugriff auf FTP-Server
suse9@transpluto:~/wgettest> wget ftp://ftp.kde.org/pub/suse/ftp.suse.com/suse/i386/9.0/INDEX.gz
--19:12:51-- ftp://ftp.kde.org/pub/suse/ftp.suse.com/suse/i386/9.0/INDEX.gz
           => `INDEX.gz'
Auflösen des Hostnamen »ftp.kde.org«.... fertig.
Verbindungsaufbau zu ftp.kde.org[131.220.60.97]:21... verbunden.
Anmelden als anonymous ... Angemeldet!
==> SYST ... fertig.    ==> PWD ... fertig.
==> TYPE I ... fertig.  ==> CWD /pub/suse/ftp.suse.com/suse/i386/9.0 ... fertig.
==> EPSV ... failed.  ==> PASV ... fertig.    ==> RETR INDEX.gz ... fertig.
Länge: 57,215 (unmaßgeblich)

100%[====================================>] 57,215       3.58K/s  ETA 00:00

19:13:09 (3.58 KB/s) - »INDEX.gz« gespeichert [57215]

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 gilt, dass wget ftp://ftp.kde.org/pub/suse/ftp.suse.com/suse/i386/9.0/README* alle drei dort liegenden Dateien -- README, README.DOS und README.FTP -- 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
suse9  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. 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. Listing 1 zeigt beispielhaft, was Sie in der Datei .wgetrc alles konfigurieren können. (hge)

Listing 6: So könnte Ihre Datei ~/.wgetrc aussehen
# Eine Download-Beschränkung, setzt die Quota auf 5 MB:
quota = 5M

# Setzt die Anzahl der Download-Versuche von 20 (default) hoch auf
# 40:
tries = 40

# Timestamps werden immer beachtet: 
timestamping = on

# wget folgt FTP-Links von HTML-Seiten aus:
follow_ftp = on

# setzt den Benutzernamen für HTTPS-Zugänge auf "bla":
http_user = bla

# setzt das Passwort für HTTPS-Zugänge auf "blubb":
http_passwd = blubb

Infos
[1] NcFTP, EasyLinux 03/2004, http://www.easylinux.de/Artikel/ausgabe/2004/03/074-ncftp/

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.

Druckerfreundliche Version | Feedback zu dieser Seite | Datenschutz | © 2014 COMPUTEC MEDIA GmbH | Last modified: 2007-01-25 17:11

[Linux-Magazin] [LinuxUser] [Linux-Community] [Admin-Magazin] [Ubuntu User] [Smart Developer] [Linux Events] [Linux Magazine] [Ubuntu User] [Admin Magazine] [Smart Developer] [Linux Magazine Poland] [Linux Community Poland] [Linux Magazine Brasil] [Linux Magazine Spain] [Linux Technical Review]