
Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.
Für die neuen Datenbankserver kam er ganz ohne weitere Softwarelizenzen aus. Die Lizenzen für das DBMS konnte er vom Altsystem übernehmen. Den Abteilungsleiter überzeugte er davon, dass die Einrichtung eines Clusters nicht erforderlich ist. Und die Hochverfügbarkeit der Festplatten realisierte er mit der in Solaris enthaltenen Software "DiskSuite".
Innerhalb weniger Tage war die Einrichtung ausgeführt - Dank docs.sun.com und mit Hilfe von dict.leo.org (für die Übersetzung): Die Datenplatten sind nun gestriped und gespiegelt, die Systemplatten sind durch einen Spiegel ausfallsicher. Und das war gut so.
Nach wenigen Wochen zeigte sich, dass die erste Root-Platte tatsächlich ausgefallen war. Der Betrieb konnte aber trotzdem störungsfrei fortgesetzt werden :-)).
Nun ist es Freitag, 22:00 Uhr. Bis Montag um 6:00 Uhr hat Larry Zeit, die defekte Platte auszutauschen. Frohen Mutes hat er das Betriebssystem heruntergefahren, die defekte Platte ausgetauscht.
Der Boot-Prozess wird abgebrochen – so ein Mist! Dabei ist das System doch die ganze Zeit mit dem zweiten Teilspiegel gelaufen! Sollte die Platte nun auch defekt sein?
Larry überprüft mit Hilfe der Installations-CD die zweite Root-Platte. Sie ist in Ordnung. Nun ist Larry ratlos. Wie bringt er das System dazu, von dieser Platte zu booten? Was hatte er nur beim Root-Spiegel falsch gemacht?
Senden Sie Ihren Lösungsvorschlag bis zum 20.07.2004 an kniffel@ordix.de. Larry wird sich wie immer mit einer kleinen Aufmerksamkeit bei seinen Helfern bedanken und einige der eingesendeten Lösungen veröffentlichen.
|
Folgendes Kommando hätte Larry die Blamage vor seinem Chef in letzter Sekunde erspart: Was passiert hier?Der Stern (*) am Ende des Kommandos sorgt dafür, dass unser Programm eine Liste der Dateien im aktuellen Verzeichnis als Parameter übergeben bekommt. Die Option "-p" wiederum besagt, dass jeder dieser Parameter eine Datei darstellt und erzeugt implizit eine Schleife der folgenden Art um das komplette Programm: foreach $ARGV (@ARGV) {
open(FILEHANDLE,$ARGV);
while(<FILEHANDLE>) {
# Programmcode
print;
}
close(FILEHANDLE);
}
Die Option "-i" sorgt nun dafür, dass der Inhalt der Dateien nicht an die Standardausgabe übergeben wird, sondern die gerade bearbeitete Datei "on-the-fly" editiert wird. Der eigentliche Programmcode folgt nach dem Schalter "-e" und besteht aus zwei Anweisungen: 1. Alle HTML-Links werden mit dem Substitute-Kommando in Kleinschreibung umgewandelt: s!(]*>)!lc($1)!gsie; Die vier Schalter (gsie) bewirken folgendes: g: *Alle* Vorkommnisse des Suchmusters werden ersetzt 2. Der Dateiname wird ebenfalls in Kleinschreibung gesetzt: rename $ARGV, lc($ARGV); Zu guter Letzt bewirkt der Schalter "-00", dass Dateien nicht zeilenweise eingelesen werden, sondern "in einem Rutsch". Das ist notwendig, falls sich die Links über mehrere Zeilen erstrecken. Lösungen der Leser:1. Albrecht Bischoff: perl -pi -e ‘s!\w+.html?!lc($&)!gie;rename $ARGV, lc($ARGV)’ *.[Hh][Tt][Mm][Ll] *.[Hh][Tt][Mm] 2. Andreas Mayer: a=‘ls|egrep -i "*.html"’;for i in $a; do perl -pi -e ‘s/’$i’/’$i’/gi’ $a; done Lediglich der reguläre Ausdruck ist nicht ganz korrekt, sondern sollte lauten: "\.html?$". Andernfalls würden auch Dateien wie "meinhtmlbild.jpg" bearbeitet. Unter der Voraussetzung, dass sich in dem Verzeichnis ausschließlich HTML Seiten befinden, lässt sich diese Lösung sogar auf 50 Zeichen reduzieren: for i in ‘ls’; do perl -pi -e s/$i/$i/i ‘ls’; done Allerdings ist zu beachten, dass bei dieser Variante sehr häufig Dateien geöffnet und geschlossen werden (n² Zugriffe) und auch der Perl-Interpreter bei jedem Schleifendurchlauf neu gestartet werden muss. Bei 100 zu bearbeitenden HTML Seiten ist die zuerst genannte Lösung bereits mehr als 100 mal so schnell ... und die Geschwindigkeit war es ja, die zählt! ;-) |