War mir nicht bekannt, aber man kann sudo so einstellen dass es einen nach Eingabe eines falschen Passwortes… originell abweist. :-)

Wer nur die Antworten sehen möchte kann das — zumindest auf Ubuntu — so machen:

Vor gut zehn Jahren hatte ich schon mal einen ähnlichen Tipp im Blog, damit bietet dann praktisch jedes Tool in der Shell diesen… Service. :-D

image

Rechnung vom 09.09.1994

Noch ein Fundstück vom Aufräumen: eine Rechnung von 1994. Zwischen Abi und Studium habe ich gearbeitet, und so konnte ich mir zu Beginn des Studiums einen neuen Computer leisten. Ein AMD DX2-80 (praktisch ein 486er) mit 4MB RAM, 420MB Platte und VGA-Grafik. Den passenden Bildschirm hatte ich noch von dem 486SX-20 den ich vorher hatte (welcher seinerseits einen XT abgelöst hatte).

Der Bolide konnte nicht nur die allgegenwärtige Kombination aus DOS und Windows 3.11 ausführen, neben einigen muss-ich-nicht-haben-Programmen gehörte auch Corel Draw 4 zum Paket. Damals habe ich da auch echt viel mit gespielt, das war auch ernsthaft kaufentscheidend.

So ausgestattet ist der Kasten dann 1995 mit mir nach Dortmund gezogen, ins Studentenwohnheim.

An der Uni wurde damals objektorientierte Programmierung in der Sprache Beta unterrichtet. Die Übungsaufgaben konnten dann im sogenannten ‚Pizza-Pool‘ erledigt werden, einem Raum voller Sun SPARCstations mit Namen wie Salami, Diavolo oder Speciale. Ging auch nur da, den Beta-Compiler gab es nämlich nur für Solaris und Linux.

Linux?

Kannte ich bis dahin noch nicht. Unix fand ich aufregend (‚gut‘ kann ich nicht behaupten, weil ich die ganze Tragweite da noch nicht überblicken konnte). Und sowas kann ich auch zu Hause benutzen?

Naja, so einfach war es nicht. Ich habe im Allkauf (Real gab es noch nicht), eine Zeitschrift gefunden (würde mich nicht wundern wenn die mir nächste Tage noch in die Hände fällt), darin waren zwei CDs: Slackware. Die Installation war damals noch ein echtes Abenteuer. Ohne eigens compilierten Kernel ging da nicht viel mehr als eine Shell. Ich habe zwei Wochen und viel Hilfe von einem SunOS-erfahrenen Kommilitonen gebraucht um X11 zu starten (die grafische Oberfläche, damals noch mit dem Window-Manager TWM).

Handbuch von SuSE 6.0

Damals war das hilfreich

So habe ich Linux damals schon faszinierend gefunden, und ich hatte auch immer eine Partition auf der Platte. Trotzdem habe ich nicht wirklich ernsthaft was damit gemacht. So richtig ging es dann erst Ende 1998 wieder los, mit einer SuSE-Distribution, 5.2 oder 5.3 müsste das gewesen sein. Da hat es dann auch nicht mehr lange gedauert bis das mit wechselnden Distributionen mein Haupt-Betriebssystem wurde, ich glaube 2000 oder 2001 habe ich mein letztes privates Windows-System ausgeschaltet. Seitdem habe ich an meine Rechner nur noch Linux und — in Spezialfällen — BSD gelassen.

image

Neues aus dem Internet

Die habe ich beim Aufräumen gefunden. Vor 17 Jahren konnte man ‚Internetausdrucken‘ noch als Journalismus verkaufen… :-D

(Nicht falsch verstehen: nichts gegen das Linux Magazin, das lese ich immer noch gerne.)

In Ermangelung (naja, nicht wirklich ;-) ) eines Windows-Systems kann ich das nicht ausprobieren, aber für mich klingt das absolut plausibel: es gibt einen Patch für den Linux-Kernel. In der Funktion ändert der nichts, es wird lediglich eine Datei umbenannt. Weil man die offenbar sonst auf Windows-Systemen nicht einsehen kann… 8-O

Nein, es geht nicht um irgendwelche Sonderzeichen oder Backslashes. Nicht mal um die 8.3-Konvention. Es geht schlicht und ergreifend darum dass MS-DOS (!) bestimmte Dateinamen reserviert hatte, um damit Geräte ansprechen zu können. Ich erinnere mich noch dunkel daran dass man mit copy con: datei.txt sowas ähnliches machen konnte wie mit cat > datei.txt. Dass aber dadurch auch diese Dateinamen verbrennen wenn sie von einer Extension gefolgt werden war mir neu…

Mit AUX wurden vor dreißig Jahren offenbar serielle Geräte angesprochen (mir war nur COM bekannt). Und deshalb kann Windows auch im Jahr 2014 keine Datei mit dem Namen aux.c öffnen… :-D

Vor einer Weile habe ich auf Twitter einen netten Alias für die Shell gesehen:

alias doch='sudo $(history -p !-1)'

Das Ding geht nicht in der zsh, da das history-Kommando — anders als in der bash — hier kein p-Flag hat. Ist aber auch zweitrangig. Wenn man sein letztes Kommando doch mal mit Nachdruck (und root-Rechten) ausführen möchte geht auch ein beherztes:

sudo !!

An dieser Stelle nochmal ein Zitat zum Thema:

‚Multiple exclamation marks,‘ he went on, shaking his head, ‚are a sure sign of a diseased mind.‘
(Terry Pratchett in „Eric“)

Ich glaube auch Herr Pratchett würde die Anwendung mit sudo als Ausnahme durchgehen lassen, oder? :-)

Ich habe dem Blog eine neue Kategorie verpasst: unter Tool-Time möchte ich in Zukunft Teile meines Werkzeugkastens vorstellen. Damit meine ich nicht unbedingt physisches Werkzeug — Hammer, Schraubenschlüssel & Co. — sondern insbesondere Software.

Vor einiger Zeit habe ich den Arbeitgeber gewechselt. Auf meinem letzten Arbeitsplatzrechner hatte ich — genau wie zu Hause — Arch Linux. Leider konnte ich den aber bei meinem letzten Kunden nicht benutzen, da ich da mit dem Kundenrechner arbeiten musste. Den Kunden bin ich jetzt genau wie den Arbeitgeber los, auch das alte Notebook habe ich nicht mehr.

Von Arch bin ich zwar immer noch sehr angetan, um bei meinem neuen Arbeitgeber aber schnell ‚an die Schüppe‘ zu kommen habe ich das von Dell vorinstallierte Ubuntu auf dem Notebook gelassen.

Da bin ich dann erstmal mit den Standardwerkzeugen gefahren. Klar habe ich ein paar (für mich) unverzichtbare Werkzeuge installiert, aber ich habe weder meine Konfiguration von zu Hause mitgebracht, noch ähnlich viel Sorgfalt auf die Feineinstellung aufgewandt. Vor ein paar Wochen hat es mich dann aber doch gepackt, und seitdem konvergieren die beiden Welten. Ich habe eine Menge Konfiguration von zu Hause übernommen, aber auch einige völlig neue Tools für mich entdeckt. Irgendwie bin ich dann angefangen fast meinen kompletten Werkzeugkasten in Frage zu stellen, und ich muss sagen: das Ergebnis gefällt mir. :-)

Nachdem auf dem Computer die meisten Werkzeuge optimiert waren fiel dann mein Blick auf mein altgedientes HTC Desire… und auch das kommt Heute mit einer komplett anderen Ausstattung daher als noch vor vier Wochen. An der Stelle gebe ich zu dass ich immer noch auf ein Nexus 4 schiele, aber mit der neuen Software gefällt mir eigentlich auch der alte Fernsprecher noch ganz gut…

Langer Rede kurzer Sinn: hier ist die neue Kategorie, und hier gilt noch mehr als in den anderen Kategorien: ich freue mich über jede Rückmeldung! Nichts Fast nichts ist so gut dass man es nicht noch verbessern könnte… ;-)

Interessant: vor einiger Zeit habe ich mit einem damaligen Kollegen darüber gesprochen dass ich es unzumutbar kompliziert finde, ein Windows-System aktuell zu halten. Dabei bedeutet ‚aktuell‘ nicht nur dass man die neuesten Features nutzen kann, sondern insbesondere auch dass Sicherheitslöcher — die es heutzutage sogar in MP3-Abspielern und PDF-Betrachtern geben kann — gestopft werden.

Leider erwähnt es der Artikel nicht den Heise Gestern zu dem Thema veröffentlicht hat, daher schreibe ich es nochmal (falls der ehemalige Kollege oder sonstwer aus der Zielgruppe mitliest): Wo Windows-Anwender im Schnitt an 25 Stellen (die Zahl nennt der Artikel, die stammt offenbar von Secunia) nach Updates suchen müssen greifen Linux-Benutzer üblicherweise nur auf einem einzigen Weg auf ihre Software-Repositories zu. Debian-Benutzer geben beispielsweise nur apt-get update && apt-get upgrade ein und können sich sicher sein die letzten Pakete installiert zu haben die ihre Distribution ihnen bietet. Fertig. Grafische Benutzeroberflächen, insbesondere auf Mainstream-Systemen wie Ubuntu, bringen die Funktionalität grafisch. Da muss man weder selbst an den Check denken, noch das Kommando für das Update auswendig gelernt haben.

Insbesondere bei Sicherheitsrelevanten Updates sind eigentlich alle gängigen Linuxe ziemlich schnell. Ich persönlich habe ein gutes Gefühl bei der Sache.

Zwei Einwände hatte der Kollege seinerzeit noch:

  • Was ist mit Programmen die nicht von der Distribution gestellt werden? — Brot- und Butterprogramme wie Webbrowser, Office-Pakete oder Java-Laufzeitumgebungen bieten alle Distributionen. Braucht man eine spezielle Software findet man mit etwas Glück ein spezialisiertes Repository das man einfach einbinden kann. Gibt es auch das nicht bleibt einem wirklich nur die manuelle Installation. In dem Fall muss man aber nur ein einzelnes Programm manuell aktuell halten. Nicht alle (OK, fast alle). Wenn man mehrere Rechner versorgen will, beispielsweise in Unternehmen, spricht aber auch nichts dagegen sich ein eigenes Repo anzulegen. Schwer ist das nicht.
  • Datenschutz? Ist Dir egal dass $DISTRIBUTOR weiß was Du alles installiert hast? — Ja. Weil ich dem Hersteller meines Betriebssystems traue, sonst würde ich es nicht nutzen. Aber selbst wenn man das anders sieht: so ein Repository kann man auch komplett oder teilweise spiegeln, insbesondere in Unternehmen kann das schon allein deshalb sinnvoll sein damit nicht alle Pakete n mal übertragen werden müssen. Dementsprechend hat man in der Regel auch die Auswahl zwischen mehreren Repositories im Netz. Da kann man sich dann überlegen wem man das Vertrauen schenken möchte.

Alles in allem bleibe ich bei dem was ich damals schon gesagt habe: ständig auf der Jagd nach Updates zu sein wäre mir zu stressig. Und das würde ich insbesondere nicht-computeraffinen Benutzern nicht zumuten wollen. Denkt daran wenn Eure Eltern von Euch einen Computer eingerichtet haben wollen! ;-)

Schön finde ich übrigens, dass Heise in dem Artikel auf XKCD linkt. :-D

Gruselige Benutzeroberfläche

Gruselige Benutzeroberfläche

Vor einigen Jahren habe ich mal nach einer Möglichkeit gesucht, einen USB-Stick zu bauen mit dem man mehrere Boot-Images starten kann. Leider ohne Erfolg.

Ideal fände ich eine Lösung bei der ich nur noch ISO-Files auf den Stick legen muss, meinetwegen noch mit einem Skript das die ISOs dann beim Bootloader anmeldet. So etwas scheint es aber nicht zu geben, und das scheint mit den gängigen Bootloadern auch nicht ohne weiteres möglich zu sein.

Jetzt habe ich mir aber ein Programm angesehen das der Lösung zumindest nahe kommt: mit Multisystem kann man sich einen Stick erstellen von dem mehrere Systeme gebooted werden können.

Größter Haken beim Bau des individuellen Sticks ist dabei die Benutzeroberfläche. Von weitem sieht die zwar nett aus, damit zu arbeiten ist aber wirklich eine Herausforderung. Und damit meine ich nicht dass es eine steile Lernkurve gibt weil das Programm komplex ist, sondern schlicht weil die Oberfläche nichts taugt. Dass man die Größe der meisten Fenster nicht verändern kann ist dabei das kleinste Übel…

Das Ergebnis zählt

Das Ergebnis zählt

Aber mit einem kleinen HowTo — wie es sich zum Beispiel im Ubuntu-Wiki findet — kommt man doch zum Ziel. So habe ich jetzt einen kleinen aber stabilen 8GB-Stick (SanDisk Cruzer Pop) im Portemonnaie von dem ich wahlweise Ubuntu, einen Debian-Installer oder mein bevorzugtes ich-muss-was-machen-ohne-von-CD-zu-booten-System Grml starten kann. Letzteres wird nicht aktiv von Multisystem unterstützt, das hat erst Probleme gemacht: die 96-Bit-Variante (ja, Grml hat sowas! :-D) tut’s nicht, stattdessen habe ich jetzt die 32- und die 64-Bit-Version auf dem Stick. Kommt am Ende auf’s gleiche raus.

Multisystem ‚weiß‘ wie es die einzelnen ISOs behandeln muss um sie mit einem zentralen Bootloader starten zu können. Dazu ist für jedes unterstützte ISO eine Konfiguration hinterlegt, man kann dem Programm also auch nicht beliebige Systeme vor werfen. Die Ubuntu-Images liegen jetzt einfach als ISO auf dem Stick, ich weiss nicht ob ich die einfach austauschen könnte. Grml wird wie ein ‚richtiges‘ Debian behandelt und komplett ausgepackt auf den Stick gelegt. Der Traum vom Stick mit mehreren bootfähigen ISOs ist also immer noch nicht erfüllt.

Alternativ habe ich mir übrigens auch MultiCD angesehen, aber nicht wirklich ausprobiert. Wenn ich das richtig verstehe kann man damit nur CDs oder DVDs bauen, keine Sticks.

Falls doch noch jemand eine Idee hat wie man den Stick so bestücken kann wie ich mir das vorgestellt hatte: immer her damit!

Heute habe ich mich (unter anderem) mit einem Problem beschäftigt das auf den ersten Blick trivial aussieht. Ich zumindest habe bislang keine Lösung gefunden die mir wirklich gefällt. Mal sehen ob was dabei rauskommt wenn ich das hier ‚crowdsource’… :-)

Aufgabenstellung: Zähle, wie viele Prozesse eines bestimmten Programmes schon länger als 30 Minuten laufen.

Klingt einfach, oder?

Die Ausgaben von ps zu parsen erscheint mir dabei aber zu fehleranfällig. Da müsste man zu viel berücksichtigen: Prozesse die vielleicht länger als einen Tag laufen, Prozesse die über Mitternacht gelaufen sind… ich habe nicht getestet wie es aussieht wenn man an der Zeitzone rumspielt… Nein, das kann nicht der richtige Ansatz sein.

Meine erste echte Lösung sieht zwar hässlich originell aus, funktionierte aber im Test (zu Demozwecken suche ich mal nach meinem Firefox):

echo | killall -i --older-than 30m firefox 2> /dev/null | tr -cd '?' | wc -c

Mit -i ist killall ‚interaktiv‘, fragt also zu jedem gefundenen Prozess freundlich nach ob es zuschlagen soll. Mit dem reingepipten echo beantwortet es sich diese Frage immer negativ. Der Rest der Zeile zählt im Prinzip wie oft killall gefragt hat ob es töten soll.

Blöd ist, dass die auf einem etwas älteren RHEL laufen soll. Anders als bei Ubuntu kennt killall da die Option –older-than noch nicht.

Der zweite Lösungsansatz funktioniert leider nur auf den ersten Blick, dafür aber auch auf dem alten Red Hat:

find /proc/[0-9]* -maxdepth 1 -name status -mmin +30 | xargs egrep "^Name:\sfirefox$" | wc -l

Ich suche also alle Prozesse die schon länger als 30 Minuten laufen, und suche in deren status-Datei nach dem Namen meines Prozesses. Die Ergebnisse werden dann wieder gezählt. Alternativ könnte man statt in der status- auch in der cmdline-Datei suchen, in meinem echten Einsatz übersehe ich damit dann auch Zombies (die werden separat betrachtet). Leider funktioniert dieser Ansatz nicht wirklich zuverlässig. Es sieht so aus als ob der Kernel den Dateien im Proc-Verzeichnis bisweilen einen neuen Timestamp gibt — obwohl der Prozess nicht gestartet oder beendet wurde. Ein Schuss in den Ofen, also. :-(

Wie macht man sowas? Ich meine, wenn man eine zuverlässige Lösung mit Bordmitteln haben will? Gibt es da ein passendes Tool das ich noch nicht kenne? Oder hilfreiche Optionen für gängige Tools? Wenn ich die Suchmaschine meiner Wahl frage finde ich eine Menge Lösungen, aber die sind entweder auch wackelig, oder sie bestehen darauf direkt alles zu töten…