Tag-Archiv für » Shell «

Montag, 19. April 2010

Ich hatte mir mal einen Link gesichert den ich mir ansehen wollte sobald ich wieder auf die Idee käme, mit Daten rechnen zu wollen. Wenn man sich da ansieht was man alles bedenken muss verwirft man schnell alle Ideen die in die Richtung gehen. Das sollen besser andere machen… :-)

Heute war es wieder so weit. OK, kein kompletter Kalender. Aber ich war einsam und alleine in einer Korn-Shell auf Solaris unterwegs und wollte wissen welches Datum wir Gestern hatten. Heute ist einfach, aber Gestern? Mit GNU date sagt man einfach was man will:

date --date yesterday

Unter Solaris ist man von den GNU-Segnungen verschont, da erfordert das einen kleinen Kunstgriff (den ich dann auch im Netz finden konnte):

TZ=GMT+24 date

Man verstellt also einfach (nur für das eine Kommando, nicht für das ganze System!) die Zeitzone um 24 Stunden und fragt dann nach dem Datum. Das funktioniert auch mit mehr als 24 Stunden, und mit negativen Werten für Daten in der Zukunft. Gut zu wissen.

In dem Zusammenhang zitiere ich dann auch nochmal einen Absatz den ich mir vor knapp vier Jahren von blog.detux.de kopiert hatte, es geht um die Unixzeit (auch Unix-Epoche genannt). Den Blog dazu gibt es leider nicht mehr, die Notiz hat sich aber schon mehrfach bewährt:

BASH: Unix-Timestamp in Datum konvertieren
Gerade 10 Minuten nach gesucht, deshalb hier nochmal schnell als Merkzettel:
TIMESTAMP=`date +%s` DATE=`date --date="1970-01-01 $TIMESTAMP sec GMT"` echo $DATE
Kann man immer mal wieder gebrauchen…

Etwas konkreter sähe das dann so aus (das Datum ist übrigens der 13. Februar 2009, 23:31:30):

date --date="1970-01-01 1234567890 sec GMT"

Man nutzt hier also den Umstand aus dass Unix die Sekunden seit dem 01.01.1970 zählt und fragt nach wie spät es soundsoviel Sekunden nach eben diesem Datum ist. Logisch. Nicht allzu naheliegend, aber wenn man es weiss: logisch. :-)

Kategorie: IT, Software  | Tags: , , ,  | Ein Kommentar
Dienstag, 24. November 2009

Dass man Passworte und ähnlich vertrauliche Sachen nicht in Kommandozeilen verwenden sollte ist mir klar. Jeder der auf dem gleichen System angemeldet ist kann sich mittels ‘ps auxwww’ den vollständigen Aufruf anzeigen lassen, einschließlich womöglich benutzter Passworte.

Bisher hätte ich in meinem jugendlichen Leichtsinn aber keine Bedenken gehabt, solche Daten in Umgebungsvariablen zu hinterlegen. Klar, irgendwo unter /proc findet man die soweit ich weiß auch wieder. Aber nur wenn man root ist, oder wenn man Spaß daran hat, seine eigenen Prozesse zu bespitzeln. Fremde Prozesse kann man so nicht einsehen.

Es geht aber auch anders: mit ‘ps auxwwwe’ — das ‘e’ steht offenbar für ‘Environment’ — stehen auch Umgebungsvariablen in der Prozessliste. Für alle Benutzer auf dem gleichen System einsehbar, ohne dass die über besondere Rechte verfügen müssen.

Man lernt nie aus… Und nachdem ich das jetzt weiß werde ich erstmal gründlich in mich gehen um rauszufinden wo ich eventuell solche Leichen im Keller habe… :-(

Samstag, 10. Januar 2009

In den letzten Tagen habe ich nach längerer Pause mal wieder ausgiebig mit Nagios gespielt. Bei einer ausgiebigen Umstellung meines Netzes habe ich vor einer Weile den alten Nagios nach /dev/null verschoben, seitdem gab es Blindflug.

Soweit alles prima, allerdings bin ich an einer Stelle hängen geblieben: dem Drucker. Klar kann man einen Laserjet mit Netzwerkkarte problemlos überwachen, problematisch ist nur dass mein Drucker nur alle paar Wochen mal benutzt wird. Dazwischen ist der natürlich ausgeschaltet.

Das Problem: Wenn ich den Drucker ausschalte werden weiter alle Parameter (Tonerstand, Papiervorrat, Nachrichten…) geprüft, was natürlich nur zu Fehlern oder Nonsens führt. Besser fände ich wenn die Parameter den alten Zustand beibehalten würden, und lediglich das Gerät als ausgeschaltet gemeldet wird. Offenbar kann man das so aber nicht konfigurieren. Zumindest habe ich das nicht gefunden, für sachdienliche Hinweise wäre ich dankbar.

Ich habe vorhin mal ein wenig gescriptet, mit diesem Stück Shell geht es dann doch:

#!/bin/sh
host=$1
shift
command=$@
CACHEFILE=/tmp/check_cached.dat
if ping -c 1 $host > /dev/null; then
  # $host is online, fetch fresh data
  output=$(eval $command)
  returncode=$?
  # escape command and remove old entry from cache file
  ecommand=$(echo $command | sed -e "s_/_\/_g")
  sed -i "/^$ecommand;/d" $CACHEFILE
  # append command with fresh values to cache file
  echo "$command;$returncode;$output" >> $CACHEFILE
else
  # $host is offline, fetch data from cache file
  output="cached: $(sed -ne "s#^$command;[0-9];(.*)$#1#p” $CACHEFILE)”
  returncode=$(sed -ne “s#^$command;([0-9]).*$#1#p” $CACHEFILE)
fi
echo “$output”
exit $returncode

Ich habe das unter dem Namen check_cached.sh gespeichert. Jetzt musste ich nur noch das Kommando ändern mit dem der Drucker kontrolliert wird:

define command{
  command_name check_snmp_printer
  command_line /usr/local/nagios/plugins/check_snmp_printer '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$'
}

Daraus mache ich folgendes:

define command{
  command_name check_snmp_printer
  command_line /usr/local/nagios/plugins/check_cached.sh '$HOSTADDRESS$' "/usr/local/nagios/plugins/check_snmp_printer '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$'"
}

Alle Services die check_snmp_printer benutzen sind ab sofort gecached. Rein theoretisch sollte das auch mit allen anderen Checks funktionieren, ich habe das aber selbst mit diesem bis jetzt nur oberflächlich getestet, ich übernehme (natürlich) keine Verantwortung für alles was mit dem Skript oder wegen des Skriptes passiert. :-)

Fragen und Vorschläge fühlen sich hier in den Kommentaren wohl. :-)

Oh, und eine Frage kann ich im Voraus beantworten: Nein, eigentlich brauche ich kein so dickes Netzwerkmanagement in meinem Heim-Netz. Grund für die Bastelei ist Spaß an der Sache, und nachdem ich in letzter Zeit mit einem teuren kommerziellen System arbeiten muss will ich mir zu Hause einfach nochmal klar machen dass man mit der freien Lösung auch das meiste — wenn nicht alles — hinkriegt. :-D

Nachtrag: Momentan stört mich das nicht, aber wer das im großen Stil einsetzen will sollte vielleicht noch was einbauen das dafür sorgt dass auch etwas sinnvolles passiert wenn der Host offline ist, aber noch keine Daten dafür im Cache liegen…

Kategorie: IT, Software  | Tags: , ,  | Sag was dazu
Mittwoch, 07. Januar 2009

Auf dieser Seite kann man sich eine Menge nützliche Shell-Tools runterladen. Schade dass die nicht im Lieferumfang der Unices sind, sonst würde ich die glatt in meine Shell-Doku einarbeiten, so nützlich wie die sind… :-)

Kategorie: Geek, Internet, Links  | Tags: ,  | Ein Kommentar
Sonntag, 04. Januar 2009

Vorbereitung: apt-get install filters

Dann für einen Überblick:

for i in b1ff chef cockney eleet fudd kenny kraut pirate spammer upside-down; do echo $i; echo "Far out in the uncharted backwaters of the unfashionable end of the western spiral arm of the Galaxy lies a small unregarded yellow sun." | $i; echo; done

b1ff
FAR OUT 1N THE UNCHARTED BACKW8RZ UV THE UNFASHIONABLE END UV THE WESTURN SP1RAL ARM UV THE GALAXY LEIZ A SMAL UNREGARDED YELOW SUN.

chef
Fer oooot in zee uncherted beckveters ooff zee unffesheeuneble-a ind ooff zee vestern speerel erm ooff zee Gelexy leees a smell unregerded yelloo soon.
Bork Bork Bork!

cockney
Far out in the bloody uncharted backwaters of the unfashionable end of the flinkin’ western spiral arm of the Galaxy lies a small unregarded yellow sun.

eleet
f4r 0ut 1n th3 unch4rt3d b4ckw4t3r5 0f th3 unf45h10n4bl3 3nd 0f th3 w35t3rn 5p1r4l 4rm 0f th3 g4l4xy l135 4 5m4ll unr3g4rd3d y3ll0w 5un.

fudd
Faw out in de unchawted backwatews of de unfashionabwe end of de westewn spiwaw awm of de Gawaxy wies a smaww unwegawded yewwow sun, uh-hah-hah-hah.

kenny
Mpfmmmpff ppffmffmp mffppp fmpmfpmpp fmfpppmmfmfpmmmpfffmpmppmpm mmpmmmmmfpmpfppmmmfmpmpppfffmm ppfmpf fmpmfpmpp fmfpppmpfmmmfmmmfpmffppfpppmmmmmppmfmpp mpppppmpm ppfmpf fmpmfpmpp fppmppfmmfmpmpppffppp fmmpfmmffpffmmmpmf mmmpffppm ppfmpf fmpmfpmpp Mfmmmmpmfmmmfpfffm pmfmffmppfmm mmm fmmppmmmmpmfpmf fmfppppffmppmfmmmmpffmpmmppmpm ffmmpppmfpmfppffpp fmmfmfppp.

kraut
Far out in ze uncharted backwaters uff de unfaschionable end uff de vestern spiral arm uff de Galaxy lies a small unregarded yellow sun.

pirate
Far out in th’ uncharted backwaters o’ th’ unfashionable end o’ th’ western spiral arm o’ th’ Galaxy lies a small unregarded yellow sun, by Blackbeard’s sword.

spammer
Dear Friend, Far
out in the uncharted backwaters of the unfashionable end of the western spiral arm of the Galaxy lies a small unregarded
yellow sun.

This is a one time e-mail!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To be removed from this mailing list send an email and put in the subject the word “remove”.
8D4A20728CC8670635C16C332F1AC2F2A6BF10F91546EECE6641A5F2EAD63C76003F62F2B
6074CB9FC2FDC32EEC1B603FE5BFF77248701E2BE4AB7DA342C4AF5E1E929FB8D08915635103D

upside-down
‘uns mo77ah papje6ajun 77ews e sa!7 hxe7e6 ayf jo wje 7ej!ds ujafsam ayf jo pua a7qeuo!ysejun ayf jo sjafem>|)eq pafjey)un ayf u! fno jej

Den letzten finde ich besonders witzig, auch wenn man da im Vorteil ist wenn man keinen Röhrenmonitor mehr hat: das liest man kopfüber… :-)

Kategorie: Geek, Software, Spaß  | Tags: , ,  | Sag was dazu
Freitag, 25. April 2008

Argh. Neun Jahre zu spät, aber ich hab’s gerade erst gelesen. In der Man-Page zur Perl-Shell, auf die ich über einen Blog-Eintrag geraten bin.

Da findet sich folgendes Beispiel, samt Kommentar:

ls | s/y/k/ # Substitution. Example is a Y2K fix.

Die Shell ist eine Kuriosität am Rande, ich werde wohl bei meiner zsh bleiben. Aber der Kommentar ist nicht schlecht. :-)

Kategorie: Geek, Internet, Spaß  | Tags: , , , ,  | Sag was dazu
Dienstag, 19. Februar 2008

buntes remindIch weiß auch nicht was mich da überkommen hat, aber so steht es am Ende meiner .zshrc:

ESC=$(echo -e \e)
remind ~/.reminders | sed -e "s/^/| /;s/| (Reminders for.*):/,---- [ ${ESC}[37;1m1${ESC}[0m ]/;s/Sunrise in.*/${ESC}[0;37m$(ddate | sed -e :a -e "/$/N; s/n/ - ${ESC}[31;1m/; ta")${ESC}[0mn| ${ESC}[0;37m&${ESC}[0m/;s/(today|tomorrow)(| at ..:..)$/${ESC}[31;1m&${ESC}[0m/;s/on [A-Z][a-z]*(| at ..:..)$/${ESC}[0;31m&${ESC}[0m/;$s/.*/&n`----/g"

Wenn jemand eine noch elegantere Lösung hat: immer her damit. :-)

Insbesondere gefällt mir das mit der Variable $ESC nicht, aber ich wollte nicht so viele echos in die Zeile einbauen, und sed scheint auf e, 33 und Konsorten nicht anzusprechen. Das Ergebnis von [Strg-V-Esc] wäre gegangen (also das Zeichen das im Editor aussieht wie “^[”), aber das hätte zur Folge dass das Skript nicht mehr vernünftig druckbar wäre. Und dass bei Ausgabe mit cat bunte Stellen auf dem Bildschirm erscheinen.

Ach ja, die Ausgabe der Zeile sieht übrigens so aus wie in dem Screenshot. Die bunte Einfärbung der einzelnen Termine kommt schon aus der .reminders (kann ich bei Gelegenheit auch nochmal zeigen). Die Zeile hier sorgt für den Rahmen, das diskordische Datum und alle anderen Farben.

Kategorie: Geek, Software, Spaß  | Tags: , , , ,  | 3 Kommentare