Tote Links in Web-Seiten werfen ein schlechtes Licht auf die Betreiber eines Internet-Auftritts. Doch wer macht sich gern die Arbeit, die internen und externen Links händisch zu überprüfen? Sie nicht? Dann sollten Sie sich linklint ansehen.
out of the box
Es gibt tausende Tools und Utilities für Linux. “out of the box” pickt sich die Rosinen raus und stellt pro Monat ein Progrämmchen vor, das wir für schlichtweg unentbehrlich oder aber zu Unrecht wenig beachtet halten.
Wer einen ganzen Zoo von Links in die HTML-Seitenstruktur seiner Web-Präsenz einbaut, kämpft gegen die Flüchtigkeit des Mediums: So mancher Link auf externe Seiten ist schon veraltet, kaum dass er eingebaut wurde. Da bleibt nichts anderes, als die Verweise regelmäßig zu prüfen.
Viele HTML-Editoren enthalten aus diesem Grund Linkchecker, doch die Seiten dort hineinzuladen, obwohl man eigentlich gar nichts ändern will, ist mühsam. Weitaus weniger Arbeit macht es, ein Progrämmchen, das der Unix-Philosophie “ein Tool – eine Aufgabe” folgt, mit der Überprüfung zu beauftragen. Zum Beispiel linklint von James B. Bowlin, ein eigenständiges Programm, das sich gut aus Shell-Skripten aufrufen lässt und seine Aufgabe sehr umfassend erledigen kann.
Installation ohne Hürden
Praktischerweise müssen Sie zur Installation von linklint nichts kompilieren: Das gesamte Programm wurde als Perl-Skript realisiert. Lediglich perl muss installiert sein – dies ist aber bei allen gängigen Linux-Distributionen der Fall.
Unter http://www.linklint.org/ oder auf der Heft-CD finden Sie das Archiv linklint-2.3.5.tar.gz. Die Installation besteht darin, das Archiv zu entpacken und das Skript unter dem Namen linklint in ein Verzeichnis im Suchpfad zu kopieren:
tar xzf linklint-2.3.5.tar.gz cd linklint-2.3.5 su (root-Passwort eingeben) cp linklint-2.3.5 /usr/local/bin/linklint exit
Als Installationsziel eignet sich /usr/local/bin im /usr/local-Zweig des Dateisystems, weil dieser nicht unter der Kontrolle des distributionseigenen Paketmanagers steht. Die darin befindlichen Verzeichnisse sind explizit für das händische Einspielen von zusätzlichen Programmen, die nicht im Paketformat der jeweiligen Distribution vorliegen, vorgesehen.
Lokalvorstellung
Als erstes Anwendungsbeispiel testen wir eine lokal vorhandene Seitenstruktur. Der Einfachheit halber verwenden wir die Dokumentation zu linklint, die selbst im HTML-Format vorliegt. Vorher sorgen wir allerdings dafür, dass eine Seite fehlt:
cd linklint-2.3.5 mv doc/bugs.html doc/bugz.html
Jetzt lassen wir linklint seines Amtes walten:
linklint -doc report /doc/@
Der Parameter -doc report weist linklint an, ausführliche Logdateien im Verzeichnis report zu erzeugen. Durch /doc/@ teilen wir dem Programm mit, dass es ausgehend vom Verzeichnis doc alle von dort verlinkten Dateien überprüfen soll. Diese Angabe eines so genannten Linksets werden wir noch ausführlich besprechen.
Dass ein Schrägstrich die Verzeichnisangabe einleitet, obwohl sich doc im aktuellen Verzeichnis (und nicht unterhalb des Wurzelverzeichnisses des Dateisystems) befindet, hängt damit zusammen, dass linklint seine Prüflinge von der sogenannten Document Root des Web-Servers ausgehend sucht. Da wir im Beispiel keinen Web-Server verwenden, definiert das Programm das aktuelle Verzeichnis als Wurzel der Web-Präsenz.
Vom Ergebnis des Checks greifen wir uns exemplarisch die Datei errorF.txt heraus (Listing 1). Sie listet alle Dateien auf, die nicht funktionierende Links (“broken links”) enthalten. Wie erwartet erkennt linklint, dass bugs.html nicht mehr existiert und zeigt alle Dateien an, die die verschwundene Datei referenzieren.
Listing 1
errorF.txt
file: errorF.txt date: Thu, 12 Sep 2002 16:32:17 (local) Linklint version: 2.3.5 #———————————————————— # ERROR 7 files had broken links #———————————————————— /doc/ [file: /doc/index.html] had 1 broken link /doc/bugs.html /doc/doc_index.html had 1 broken link /doc/bugs.html /doc/hints.html had 1 broken link /doc/bugs.html /doc/howitworks.html had 1 broken link /doc/bugs.html /doc/index.html had 1 broken link /doc/bugs.html /doc/inputs.html had 1 broken link /doc/bugs.html /doc/outputs.html had 1 broken link /doc/bugs.html
Die gleiche Information schreibt linklint auch in eine HTML-Datei gleichen Basisnamens, aus der die jeweils aufgeführten Dateinamen per Link erreichbar sind. Abbildung 1 zeigt das Ergebnis, dargestellt mit dem Netscape Navigator. Wahlweise lässt sich die linklint-Ausgabe mit den Optionen -textonly oder -htmlonly auf Text- oder HTML-Format beschränken.
Mit einer anderen interessanten Datei haben wir es bei remote.html zu tun. Sie führt alle Links auf, die die lokale Seitenstruktur verlassen und auf externe Web-Server verweisen. In der linklint-Dokumentation sind dies die in Abbildung 2 gelisteten Links.
Links im Set
Mit den bereits erwähnten Linksets teilen Sie linklint mit, welche Dateien oder Verzeichnisse es im lokalen Dateisystem oder auf einem Web-Server durchforsten soll. Ein Linkset ist eine Datei- oder Verzeichnisangabe, in der bestimmte Zeichen eine besondere Bedeutung als Jokerzeichen haben.
Enthält es eine einzige Dateiangabe, wird nur genau diese Datei geprüft. Handelt es sich dagegen um eine Verzeichnisangabe, darf diese auf drei verschiedene Zeichen enden: Besteht die Endung nur aus einem einfachen Schrägstrich /, kümmert sich linklint um die Seite, die ein User zu sehen bekommt, wenn er das angegebene Verzeichnis auf dem Web-Server anfordert: Das Programm prüft dann die darin stehende Datei index.html und nichts weiter.
Hängt man an den Schrägstrich noch ein Hash-Zeichen # an, nimmt linklint alle HTML-Dateien unter die Lupe, die es in diesem Verzeichnis findet, jedoch keine Unterverzeichnisse. Endet die Verzeichnisangabe mit dem “at”-Symbol @, prüft es alle verlinkten Dateien und Unterverzeichnisse. Nur vor Verweisen, die den ursprünglichen Server verlassen, macht linklint in dem Fall noch halt.
An diese kommt man nur über das HTTP-Protokoll heran, weshalb der Programmaufruf um die Option -http erweitert wird. In der Praxis sieht das am Beispiel der privaten Homepage des Autors unter der URLhttp://www.itm.tu-clausthal.de/~perle/ so aus:
linklint -http -host www.itm.tu-clausthal.de /~perle/
Dieser Befehl prüft die Startseite der Web-Präsenz des Users perle auf dem Host www.itm.tu-clausthal.de. Sollen zusätzlich alle weiteren Dateien der gleichen Verzeichnisebene gecheckt werden, lautet der Aufruf
linklint -http -host www.itm.tu-clausthal.de /~perle/#
Wollen Sie alle per Link erreichbaren Unterverzeichnisse dieser Site einer Prüfung unterziehen, so rufen Sie
linklint -http -host www.itm.tu-clausthal.de /~perle/@
auf. Der jeweils letzte Aufrufparameter in allen drei Beispielen gibt das Linkset an. linklint verträgt übrigens mehr als eines davon auf der Kommandozeile. Bei größeren Aktionen empfiehlt es sich zudem, mit der Option -doc Verzeichnis ausführliche Logdateien erzeugen zu lassen.
Auswärtsspiel
Als letztes Beispiel erlauben wir linklint das Verlassen des ursprünglichen Servers. Diese Funktion ist sehr praktisch, wenn Sie eine Linkfarm (etwa Ihre Netscape-Bookmarks) testen und aktuell halten wollen:
linklint -net -http -host www.itm.tu-clausthal.de /~perle/Links.html
Hier unterzieht linklint nur die Datei Links.html einer Prüfung. Die Option -net sorgt allerdings dafür, dass Links auch eine Ebene tief zu externen Zielen führen dürfen. In alphabetisch sortierter Reihenfolge enthält das Ergebnis die URLs der Links mitsamt Status. Die abschließende Zusammenfassung in Listing 2 zeigt, dass der Autor seine Linkfarm mal wieder aufräumen sollte.
Listing 2
Zusammenfassung
found 104 urls: ok
—– 8 urls: moved permanently (301)
—– 11 urls: moved temporarily (302)
ERROR 2 urls: could not find ip address
ERROR 7 urls: not found (404)
ERROR 1 url: timed out connecting to host
ERROR 1 url: timed out getting host ip address
Linklint checked 115 urls:
104 were ok, 11 failed. 19 urls moved.
4 hosts failed: 4 urls could be retried.
Falls Sie sehr große Websites mit linklint überprüfen, kann es vorkommen, dass das programminterne Limit von 500 Dateien überschritten wird. Mit der Option -limit X erhöhen Sie dieses auf X Dateien. Es ist auch möglich, einen ganzen Satz von Optionen in eine Textdatei zu schreiben und diese mit @optionendatei einzulesen. Für weitere interessante Funktionen des Programms sei die Lektüre der umfangreichen HTML-Dokumentation empfohlen.
Glossar
-
HTML
-
“Hypertext Markup Language”, die ursprünglich am CERN entwickelte Auszeichnungssprache für Seiten des World Wide Web. Sie definiert sogenannte Tags, die bestimmte Textteile als Überschriften, Listen, Tabellen und ähnliches auszeichnen.
-
Shell-Skripten
-
Eine Textdatei mit Shell-Kommandos, die automatisch nacheinander abgearbeitet werden. Auch einfache Kontrollstrukturen wie Schleifen und Bedingungen sind möglich.
-
kompilieren
-
Ein Programm ist in Quelltextform einer höheren Programmiersprache noch nicht vom Betriebssystem ausführbar. Erst durch das Kompilieren (“Übersetzen”) mit einem Compiler wird daraus eine durch den jeweiligen Prozessor ausführbare Darstellung.
-
Perl
-
Die “Practical extraction and report language” ist eine sehr mächtige Skript-Sprache, die nicht nur unter Linux zuhause ist.
-
URL
-
“Uniform Resource Locator”, die eindeutige Adresse einer Ressource im Netz. Sie enthält außer Rechnernamen und Pfadangabe auch das Übertragungsprotokoll: So greift man auf http://www.knopper.net/knoppix/ per HTTP, auf ftp://ftp.gwdg.de/linux/mirrors/ hingegen per FTP zu.
-
HTTP
-
Das “Hypertext Transfer Protocol” ist das Übertragungsprotokoll des World Wide Web.







