freeX: Tips & Tricks

Die ausschließlichen Vertriebsrechte an diesem Artikel liegen beim Computer- & Literaturverlag (C&L). Der Artikel darf nicht kopiert oder gar erneut in einer Zeitschrift oder einem Buch veröffentlicht werden ohne vorherige Erlaubnis von C&L. Der Verlag gestattet freundlicherweise die Veröffentlichung auf diesen Seiten. Wer öfter auf diesen Hinweis trifft, sollte sich überlegen, die Zeitschrift freeX zu abonnieren.

Mal eben ein Web-Verzeichnis spiegeln

Es ist schon sehr hilfreich, daß viele Informationen, Howtos, Tutorials, FAQs und Artikel im Internet verfügbar sind. Wer sich mit einem Problem auseinandersetzt und sich auch die Zeit nimmt, Dokumentation zu lesen, wird bestimmt irgendwo im Welt-Weiten-Web fündig. Beim Finden helfen verschiedene Suchmaschinen, die Webserver indizieren und zu ein paar Stichwörtern in Windeseile eine Liste von URLs ausspucken.

Manchmal möchte man jedoch nicht nur Informationen zu einem einzigen Satz Stichwörter haben, sondern es ergeben sich Folgefragen. Wer Software entwickelt, findet oftmals z.B. die Beschreibung jeder einzelnen Funktion im Web. Bei der Programmierung müssen die konkreten Argumente und Seiteneffekte der verschiedenen Funktionen kontrolliert werden.

Für jede Funktion kann man natürlich wieder die Suchmaschine seiner Wahl fragen und sich den passenden Link heraussuchen. Praktischer wäre es jedoch in vielen Fällen, wenn die Dateien lokal vorlägen und man nur kurz »grep« aufrufen müßte, um die passende Seite(n) zu finden. Das ist in vielen Fällen erheblich schneller als den Weg über ein Suchmaschine oder die Suchmaschine der jeweiligen Website zu gehen.

Gesucht wird daher ein Programm, mit dem man einen Webserver spiegeln kann. Hilfe leistet dabei »wget«, ein Programm, das Dateien aus dem Web auf den lokalen Rechner lädt. Meistens wird »wget« dazu eingesetzt, einzelne Dateien unter Angabe der korrespondierenden URL herunterzuladen. Dazu werden die URLs der jeweiligen Dateien einfach in der Kommandozeile angegeben:

   wget url1 url2 ...

Es wird neben HTTP sogar auch das Protokoll FTP unterstützt. Selbst diejenigen, die hinter einer restriktiven Firewall arbeiten, können mit »wget« arbeiten, denn mit dem Parameter »--passive-ftp« wird auf passives FTP umgestellt. Damit jedoch nicht genug, denn »wget« kann auch dafür genutzt werden, ein komplettes Verzeichnis von einem Web- oder FTP-Server auf den eigenen Rechner zu kopieren.

Mit dem Parameter »-r« arbeitet »wget« rekursiv die Referenzen in der angegebenen Datei (die sich hinter einer URL verbirgt) ab. Dabei ist jedoch Vorsicht geboten, denn wenn ein Link den ursprünglichen Webserver verläßt, setzt »wget« die Reise auch dorthin fort. Mit einem passenden Startpunkt sollte es möglich sein, das praktisch gesamte Web herunterzuladen, ausreichend Festplattenkapazität und Geduld vorausgesetzt.

Das wird jedoch meistens nicht gewünscht, sondern stattdessen sollen alle Dateien innerhalb eines bestimmten Verzeichnisses heruntergeladen werden. Dazu muß lediglich verhindert werden, daß »wget« die Hierarchieebene in die nächst höhere verläßt. Dieses begrenzt die Einstellung »--no-parent«.

Wer den Befehl nun ausprobiert, wird feststellen, daß alle Dateien in einem Verzeichnis gespeichert werden, das den Namen des Webservers (bzw. FTP-Servers) trägt. »wget« bildet die Struktur des Webs im lokalen Dateisystem ab. Wenn das jedoch nicht gewüscht wird, kann mit der Einstellung »--no-host-directories« die Erzeugung dieses Verzeichnisses verhindert werden.

Allerdings bleiben dann immer noch die Verzeichnisse des Servers übrig, die im ursprünglichen Pfad enthalten sind. Das läßt sich jedoch auch verhindern, denn mit dem Parameter »--cut-dirs=« wird »wget« mitgeteilt, daß beim Speichern auf der Festplatte die ersten »n« Verzeichnisse ignoriert werden sollen.

Als Beispiel soll das Archiv des aktuelle Linux-Kernels 2.5 dienen. Mit dem Befehl

   wget -r --no-parent http://ftp.kernel.org/pub/linux/kernel/v2.5/

wird das Verzeichnis gespiegelt und alle Dateien werden lokal im Verzeichnis »ftp.kernel.org/pub/linux/kernel/v2.5« gespeichert. Mit dem Befehl

   wget -r --no-parent --no-host-directories --cut-dirs=4 http://ftp.kernel.org/pub/linux/kernel/v2.5/

werden die Dateien jedoch vollständig im aktuellen Verzeichnis gespeichert. Zu Schluß sei noch auf den Parameter »--limit-rate=« hingewiesen, mit dem sichergestellt werden kann, daß »wget« nicht die gesamte zur Verfügung stehende Bandbreite verwendet sondern nur einen kleinen Ausschnitt davon. Das kann in Firmenumgebung wichtig sein, um Kunden bei dünneren Leitungen nicht zu sehr zu behindern. Bei der Angabe der Bandbreite werden "k" für Kilobytes und "m" für Megabytes verwendet.

Somit limitiert die Angabe »--limit-rate=10k« die genutzte Bandbreite auf 10kB/s und »--limit-rate=1m« selbige auf 1MB/s. Die verwendete Technik funktioniert allerdings nicht bei kleinen Dateien und Bandbreiten kleiner als 1.5kB/s.

Martin Schulze