Bash-Kommandohistorie: Doppelte Einträge verhindern

Eine sehr nützliche Funktion der Bash ist es, Kommandos in einer Historie zu speichern, um sie wiederholt ausführen zu können. So z.B. können die zuletzt ausgeführte Kommando durch Drücken der Cursor-Hoch-Taste wieder in die Eingebezeile geholt, evtl. editiert und erneut ausgeführt werden.

Wenn nun durch wiederholtes Ausführen immer des gleichen Kommandos ausgeführt wird, z.B. um sich ändernden Plattenplatz bei einer Sicherung zu beobachten oder den Verzeichnisinhalt zu überwachen, der durch ein laufendes Programm geändert wird, schreibt die Bash auch immer wieder das gleiche Kommando in die Historie. Das ist sehr unpraktisch, wenn man evtl. ein weiter zurückliegendes Kommando wieder aus der Historie hervorholen will.

[Mehr]
bash  Linux  OSS 

Syslog-Meldungen mit Bash verschicken

Kürzlich ergab sich das Problem, Syslog-Nachrichten an einen Remote-Host verschicken zu müssen, der sonst dazu verwendete Befehl logger auf dem System aber noch kein Verschicken an Remote-Systeme unterstützte. Leider gab es für das betreffende Gerät auch keine neuere Software, es handelte sich um eine externe Netzwerk-Festplatte von WD, ein My Book Live.

Wenn sonst keine entsprechenden Werkzeuge zur Verfügung stehen, ist es oft ein unterschätztes Feature, dass bash direkt an Netzwerkadressen senden oder von diesen empfangen kann. Glücklicherweise unterstützt die auf den Geräten installierte bash-Version das Lesen und Schreiben an Netzwerkadressen per TCP oder UDP. Das ursprüngliche Syslog-Nachrichtenformat, beschrieben in RFC3164, ist reiner Text. Gesagt getan, ein Skript muss her:

[Mehr]

Bash-Scripte gegen gleichzeitiges Ausführen absichern

Oft darf von einem Bash Script nur eine Instanz laufen. Beispiele sind ein Backup oder ein Datei-Transfers, welche bei gleichzeitigem Lauf der selben Scripte evtl. nicht korrekt durchgeführt würden. Mit einfachen bash-Mitteln lässt sich dies jedoch verhindern.

Ganz einfach könnte man auf das Vorhandensein einer Datei testen und sie anlegen, falls sie nicht existiert. Allerdings hätte man sich damit auch eine sogenannte RaceCondition geschaffen, der Vorgang zwischen Test und Anlegen ist nicht atomar. Ein nicht funktionierendes Beispiel:

[Mehr]
bash  Linux  OSS 

Let’s Encrypt: Erinnerung vor Zertifikatablauf

Die von Let’s Encrypt kostenlos erhältlichen Zertifikate sind aktuell 90 Tage gültig. Bei vielen Zertifikaten, so z.B. bei vielen Subdomains mit eigenen Zertifikaten, fällt der Überblick schwer, wann welches Zertifikat in Kürze abläuft und erneuert werden muss. Eine automatische Erinnerung muss her.

Eine Methode, um automatisiert alle Zertifikate auf ihren bevorstehenden Ablauf zu testen, kann mit dem folgenden Bash-Script realisiert werden.

[Mehr]

Terminal-Caption durch Bash aktualisieren

In einem Xterm oder Gnome-Terminal ist es nützlich, dass der aktuelle Host oder das Verzeichnis in der Caption des Teminalfensters angezeigt wird. Die Caption wird evtl. auch in der Taskleiste des jeweiligen Displaymanagers angezeigt, so dass man schnell weiß, welches Terminalfenster wo steht. Allerdings gibt es einige Programme, z.B. den Midnight-Commander, welche die Caption umstellen und beim Verlassen des Programms nicht wieder zurückstellen. In der Shell kann man mitlerweile ganz woanders sein, doch das Terminalfenster zeigt immer noch eine veraltetete Caption an.

[Mehr]

Webserver in 100 Zeilen Bash

In Piotr Gabryjeluks Blog habe ich ein interessantes Skript gefunden, welches einen Webserver in 100 Zeilen Bash enthält. Als Parameter erwartet das Skript eine Portnummer, auf die es lauschen soll.

Für Ubuntu muss dieses Skript angepasst werden, da das dort installierte netcat andere Optionen versteht. Das Original kann von obiger Webseite heruntergeladen werden, das für Ubuntu angepasste folgt hier und kann auch als Datei heruntergeladen werden:

[Mehr]
bash  httpd  Linux  OSS  Ubuntu