Seite wählen

NETWAYS Blog

Kommentar in der Bash History

Heute stelle ich euch einen der „billigsten“ Tricks der Linux CLI vor, den erstaunlicherweise fast keiner kennt.

Kennt ihr es nicht auch? Ihr benutzt ein Kommando in der bash und könnt euch das Kommando einfach nicht merken. Das gemeine daran: Wenn ihr euch das Kommando nicht merken könnt, könnt ihr es auch mit Hilfe von Ctrl+r nicht suchen. Also bleibt nur „googeln“ oder mit den Pfeiltasten mühsam nach dem richtigen Kommando suchen.

Eine super Ergänzung dazu ist das Kommentieren von Kommandos.

Ein simples Beispiel:
~$ find . -mtime +30 -print # find files older than 30 days
./.bash_logout
./.bashrc
./.gnupg
./.profile
./.ssh
./.ssh/authorized_keys

Nun kann das Kommando in der Suche der Bash History (Ctrl+r) mit Hilfe des Kommentars gefunden werden:
(reverse-i-search)`older': find . -mtime +30 -print # find files older than 30 days

Zugegeben, das war jetzt sehr billig. Man kann dieses Vorgehen aber noch weiter „aufbohren“ in dem man Platzhalter einfügt. Als etwas komplexeres Beispiel dient hier ein zfs send der einen Snapshot auf einen Backup-Server archiviert und (für bessere Transferraten) mbuffer nutzt.
~$ zfs send -I <last-incremental-snapshot> data/test@<current-incremental-snapshot> | mbuffer -O <backup-server>:<port>   # transfer zfs snapshots to backup server
-bash: syntax error near unexpected token `|'

Durch die Platzhalter bekommt man beim Ausführen des Kommandos leider eine nicht so schöne Fehlermeldung, aber immerhin ist die „Kommando-Vorlage“ nun in der Bash History verfügbar.
(reverse-i-search)`backup': zfs send -I <last-incremental-snapshot> data/test@<current-incremental-snapshot> | mbuffer -O <backup-server>:<port>   # transfer zfs snapshots to backup server

Um den unschönen Syntax Fehler und damit verbundene, potentielle Fehler zu vermeiden kann das Kommando auch direkt in die Bash History ($HOME/.bash_history) geschrieben werden. Nach einem Logout / Login oder history -a ist das neue Kommando dann verfügbar.

Solltest ihr viele Kommandos hinterlegen wollen, denkt bitte daran eure Bash-History entsprechend groß zu dimensionieren. Nicht das die „Kommando-Vorlagen“ schon nach einem Tag wieder aus der History verschwunden sind.

Falls dieser Tip für euch völlig unverständlich ist kann ich unser Linux Training nur wärmstens empfehlen 😉

Tobias Redel
Tobias Redel
Head of Professional Services

Tobias hat nach seiner Ausbildung als Fachinformatiker bei der Deutschen Telekom bei T-Systems gearbeitet. Seit August 2008 ist er bei NETWAYS, wo er in der Consulting-Truppe unsere Kunden in Sachen Open Source, Monitoring und Systems Management unterstützt. Insgeheim führt er jedoch ein Doppelleben als Travel-Hacker und renoviert, baut und bastelt als Heimwerker an allem was er finden kann.

Der kleine Ping erkundet die Welt

Als der kleine Ping vor bald 34 Jahren geboren wurde, war die Welt noch übersichtlich und in Ordnung. Jeder kannte jeden und man lernte schnell neue Freunde kennen. Diese Freunde bleiben einem dann häufig auch lange treu. Ein offenherziger Kerl wie der kleine Ping lernte damals sehr schnell sehr viele Freunde kennen.
Gut erzogen und treu wie er war, besuchte er die meisten davon immer wieder und wieder. War jemand krank, dann war Ping schon mal länger unterwegs oder kam gar nicht mehr zurück. Aber langsam von vorn.
Seinen Namen bekam der kleine Ping vermutlich, weil sein Vater Mike zu viele Kriegsfilme im Fernsehen schaute. Oder weil seine Arbeit bei der US Army ihn so faszinierte. Ping, so hört sich nämlich der Sonar ein einem U-Boot an. Wie ein Klopfen. Irgendwie fanden seine Eltern das wohl sehr spannend. Also die Tatsache dass da Schallsignale gesendet und wieder zurück reflektiert wurden.
Das wäre doch auch ein schöner Job für unseren Ping, dachten sie. Also wurde der kleine Ping schon sehr früh losgeschickt, um unsere Welt zu erkunden. Da war er noch ganz klein, gerade mal 1000 Zeilen hoch. Dennoch fühlte er sich wie ein ganz Großer. Ständig auf Reisen kannte er sehr bald jede Straße, jede Autobahn und jeden Weg wie seine Westentasche. Das fand er unglaublich spannend.
Sein Vater war aber sehr streng. Jedesmal wenn Ping das Haus verließ notierte er auf die Millisekunde genau, wie spät es war. Und als der Ping dann wieder zurückkam, wurde auch das notiert. Aus Start- und Endzeit errechnete sein Vater dann, wie lange der kleine Ping unterwegs war.
Als der kleine Ping älter wurde, machte er sein Hobby zum Beruf. Wenn jemand wissen wollte, wie lang man auf einer Strecke unterwegs war, dann ging er zum kleinen Ping. Wollte ein LKW-Fahrer wissen, ob sein fetter Brummi unter einer Brücke Platz hätte – unser Ping konnte das klären.
Manchmal war es freilich ein wenig langweilig. Als Berufspendler war er hauptsächlich auf immer denselben Strecken unterwegs. Zu den Stoßzeiten im Stau zu sein war auch kein Vergnügen. Ping nahm sich dann ab und an andere Texte zum Lesen mit, das sorgte für gute Unterhaltung. Sein Vater prüfte übrigens immer, ob er auch wirklich mit denselben Texten wieder nach Hause kam. Fehlten Buchstaben oder waren falsche dabei, dann ließ er ihn unter Umständen gar nicht mehr ins Haus. Ping musste dann auf der Straße übernachten.
Ab und an erlaubte Ping sich einen Spaß. Da packte er ein Vielfaches an Ladung drauf um zu sehen, ob auch wirklich alle Tunnel-Decken und Brücken hoch genug waren. Er war halt so ein richtig nerviger Besserwisser. Und ab und an krachte es dabei natürlich ganz heftig. Ping bekam dann aber nicht etwa Stress. Das lief dann einfach als „Prüfung des Maximalen Tunnel Umfangs“, kurz MTU-Test. Ping hatte seinen Spaß – und die Polizei war froh, dass sie von jemandem auf Verletzungen der Bauvorschriften hingewiesen wurden.
Die richtig wichtigen Jobs bekamen andere. Einige seiner Brüder arbeiteten bei der Polizei, das hätte dem kleinen Ping gefallen. Bei welcher Einheit wäre ihm egal gewesen, zur Not auch bei den lahmen Kerlen von der „Ruhigen Inneren Polizei“, dem RIP. Das sind die Verkehrspolizisten in den kleinen Käffern auf dem Land.
Im Grunde machten die nicht viel mehr als die Leute nach links und rechts zu dirigieren. Aber dennoch. Betrachtete man das Geschehen vom Kirchturm aus, dann sah das schon beeindruckend aus. Alles floss schön links und rechts an den Polizisten vorbei – genau wie die sich das gerade so vorstellten. Ganz großes Kino!
Die richtig coolen Jungs hingegen arbeiteten bei der „Beindruckend Großen Polizei“, dem BGP. Das ist die Autobahnpolizei, irre was bei denen abging. Schon bei der Aufnahmeprüfung musste jeder von denen ein paar hunderttausend Routen im Kopf haben. Das klang irre anspruchsvoll und stressig. So weit wollte der kleine Ping dann doch nicht hinaus. Aber ab und an davon zu träumen, das war schon schön.
Der kleine Ping war zufrieden mit seinem Job. Er war es, der dieses Berufsbild erfunden und geformt hatte. Tausende hatten es ihm im Laufe der Jahre nachgemacht. Und heute ist er nicht zuletzt wichtiger Bestandteil einer jeden Monitoring-Umgebung. Auch wir haben kaum irgendwo eine Icinga-Umgebung am Laufen, in welchem er nicht zuverlässig seinen Dienst verrichten würden. Darum sei ihm an dieser Stelle mal ein Lob ausgesprochen: er macht seinen Job ausgezeichnet, ist zuverlässig und unauffällig.
Weiter so, lieber kleiner Ping!

Thomas Gelf
Thomas Gelf
Principal Consultant

Der gebürtige Südtiroler Tom arbeitet als Principal Consultant für Systems Management bei NETWAYS und ist in der Regel immer auf Achse: Entweder vor Ort bei Kunden, als Trainer in unseren Schulungen oder privat beim Skifahren in seiner Heimatstadt Bozen. Neben Icinga und Nagios beschäftigt sich Tom vor allem mit Puppet.

GIT – aus eins mach viele

Software Projekte starten meist mit einem SCM Repository. Nach einem gewissen historisch bedingten Wachstum hat man dann auf einmal eine Sammlung unabhängiger Komponenten. Diese gehören aber in eigene Repositories. Gerade wenn unterschiedliche Versionen in der Produktion zum Einsatz kommen sollte man tunlichst darauf achten. Sonst wird es schwer unabhängig voneinander zu entwickeln ohne Kompatibilität zu brechen.
Leider hat man es zu spät gemerkt. Was tun um die Historie nicht zu verlieren? In den dunklen Ecken von GIT findet sich git-filter-branch. Ein mächtiges Tool wenn es darum geht am kompletten Baum etwas zu verändern. Aber beginnen wir von vorne:
1. Repository auschecken:

$ git checkout git@git.foo.bar:repository.git && cd repository

2. Entfernen aller anderen Verzeichnisse bis auf das gewollte

$ git filter-branch --prune-empty --subdirectory-filter path/to/component -- --all

Mit dem obigen befehl wird alles entfernt was nicht im Verzeichnis ‚path/to/component‘ vorkommt. Normalerweise werden hierbei leere commits erzeugt welche nichts mit dem Filter zu tun haben. Um dies zu vermeiden gibt es die Option ‚–prune-empty‘.
3. Anlegen eines neuen Repositories und setzen eines neuen Ziels

$ git remote add target git@git.foo.bar:component.git

4. Explizites pushen des master branch in das neue Ziel

$ git push target master

Neues Repository wird mit der gefilterten Historie gefüllt. Allerdings ist der alte Code noch im ehemaligen Repository vorhanden
5. Neu auschecken und redundanten Code entfernen
Lokale Kopie von der Platte entfernen (Schritt 1) und mit folgendem GIT Befehl weiterarbeiten

$ git filter-branch --tree-filter ' rm -rf path/to/component' HEAD

6. Repository pushen und aufräumen
Wir haben die Timeline geändert und unsere Änderungen passen sich nicht mehr in die Historie ein:

$ git push -f

Mit der Option -f wird alles Remote überschrieben, egal ob es passt oder nicht. Man tun gut daran kurz inne zu halten und den Branch zu überprüfen.
Danach können wir die alten Reflogs löschen um Speicherplatz frei zu geben:

$ git reflog expire --expire=now --all && git gc --aggressive --prune=now

Pa-Tsching – fertig!
Natürlich ist das nicht die ganze Wahrheit und passt auf einfach Anwendungsfälle. Mit unterschiedlichen Release Tags und verzweigten Branches wird das extrahieren etwas aufwendiger. Allerdings ist dies dann keine Standardfall mehr und genau auf das Projekt zugeschnitten (Namensschemata usw.).
Detail Informationen finden sich auf der Manpage von GIT.

Marius Hein
Marius Hein
Head of IT Service Management

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert und viele Jahre in der Softwareentwicklung gearbeitet. Mittlerweile ist er Herr über die interne IT und als Leiter von ITSM zuständig für die technische Schnittmenge der Abteilungen der NETWAYS Gruppe. Wenn er nicht gerade IPv6 IPSec Tunnel bohrt, sitzt er daheim am Schlagzeug und treibt seine Nachbarn in den Wahnsinn.

Bash History anpassen

Standardmäßig ist die Ausgabe der zuletzt verwendeten Befehle auf einem Linux-System mit dem history-Befehl nicht besonders aussagekräftig:

997  cat /proc/sys/net/ipv4/ip_forward
998  echo 1 > /proc/sys/net/ipv4/ip_forward

Mit dem folgenden Befehl lässt sich die Ausgabe um die jeweiligen Zeitstempel ergänzen:
echo export HISTTIMEFORMAT=\“%d/%m/%Y %T \“ >> ~/.bashrc
Damit stellt sich die History nach einem Re-Login wie folgt dar:

976  28/06/2013 10:57:37 echo 1 > /proc/sys/net/ipv4/ip_forward
977  28/06/2013 10:57:37 cat /proc/sys/net/ipv4/ip_forward

Ebenso ist es hilfreich die Anzahl der gespeicherten Einträge zu erhöhen. In der Standardeinstellung werden hier 1.000 Einträge angezeigt. Der Befehl für z.B. 10.000 Einträge ist folgender:
echo export HISTSIZE=10000 >> ~/.bashrc
Auch hier ist zu beachten das zur Aktivierung der Änderungen ein Re-Login erforderlich ist!
Weitere Informationen kann man bei Aufruf von „man bash“ oder „man 3 strftime“ finden.

Markus Waldmüller
Markus Waldmüller
Head of Strategic Projects

Markus war bereits mehrere Jahre als Sysadmin in Neumarkt i.d.OPf. und Regensburg tätig. Nach Technikerschule und Selbständigkeit ist er nun Anfang 2013 bei NETWAYS als Senior Manager Services gelandet. Seit September 2023 kümmert er sich bei der NETWAYS Gruppe um strategische Projekte. Wenn er nicht gerade die Welt bereist, ist der sportbegeisterte Neumarkter mit an Sicherheit grenzender Wahrscheinlichkeit auf dem Mountainbike oder am Baggersee zu finden.

Jasper Reporting – Statusanzeige

Jasper-ReportingDa wir uns bisher auf die reine Verarbeitung von Bestandsdaten konzentriert haben, soll dieser Post den Datenumfang etwas erweitern und auch den aktuellen Host-Status der selektierten Objekte ermitteln. Bei Versendung eines solchen mit Hilfe des Schedulers (dazu später mehr) ist darauf zu achten, den versendeten Report auch zu speichern, da eine Reproduktion in der Praxis kaum möglich ist.
Wir beginnen wieder mit der Erweiterung unserer SQL-Abfrage um den aktuellen Hoststatus zu ermitteln.
[code lang=“sql“]
select c.alias,
a.host_object_id,
a.display_name,
a.address,
d.current_state
from nagios_hosts a,
nagios_hostgroup_members b,
nagios_hostgroups c,
nagios_hoststatus d
where a.host_object_id = b.host_object_id
and b.hostgroup_id = c.hostgroup_id
and a.host_object_id = d.host_object_id
and a.instance_id = 1
and b.instance_id = 1
and c.instance_id = 1
and d.instance_id = 1
and display_name like $P{p_hostgroup}
[/code]
post9_screen1Um den Status ähnlich einer Ampel anzuzeigen positionieren wir zwei Rectangle-Objekte aus der Palette in den Detail-Bereich und versehen eines mit roter und das andere mit grüner Vorder- und Hintergrundfarbe.
Zur besseren Bearbeitung empfiehlt es sich, die beiden Objekte erst nebeneinander und erfolgter Parametrisierung hintereinander zu positionieren. Um die Anzeige abhängig vom aktuellen Hoststatus zu machen, setzen wir analog zur farbigen Hinterlegung der Datenzeilen auf die „Print  When  Expression“, welche wie nachfolgend beschrieben für beide Objekte gesetzt werden muss.
Für den Roten:
[code lang=“java“]
new Boolean( $F{current_state}.intValue() == 1 )
[/code]
Für den Grünen:
[code lang=“java“]
new Boolean( $F{current_state}.intValue() == 0 )
[/code]
Somit wird entweder der Rote oder Grüne Rectangle angezeigt.
Hier kann wie immer der entsprechende Report heruntergeladen werden und er steht natürlich auf netways.org und unserem Demo-System zur Verfügung.
Im nächsten Post versehen wir die vorhandenen Diagramme mit Links zum Nagios-System.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startete er früher das wöchentliche Lexware-Backup, welches er nun endlich automatisiert hat. So investiert er seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinen beiden Söhnen und seiner Tochter.