Samstag, 31. Januar 2009
SNMP hrSystemDate.0 Datumsformat anpassen
Mit snmpget kann mit "HOST-RESOURCES-MIB::hrSystemDate.0" die Systemzeit eines Hosts abgefragt werden.
Das Problem ist das Ausgabeformat, mit dem kein anderes Programm etwas anfangen kann.
Ein Beispiel: 2009-1-31,12:1:3.0,+1:0
Für Menschen ist es lesbar, aber an date und co. kann man das so nicht übergeben, deshalb...
Zum Einsatz kommt (mal wieder) printf, das die einstelligen Monat, Tag, usw. -Ausgaben vorne mit "0" auffüllt.
Das Problem ist das Ausgabeformat, mit dem kein anderes Programm etwas anfangen kann.
Ein Beispiel: 2009-1-31,12:1:3.0,+1:0
Für Menschen ist es lesbar, aber an date und co. kann man das so nicht übergeben, deshalb...
#!/bin/bash
# snmp Datumstring Format anpassen
remote_ip="127.0.0.1"
commun="public"
# das Datum ueber snmp holen
rdatestring=$( snmpget -v1 -c $commun $remote_ip HOST-RESOURCES-MIB::hrSystemDate.0 | gawk '{print $NF}' )
# den String aufteilen in Datum und Zeit
rdate=$( echo $rdatestring | gawk -F',' '{print $1}' )
rtime=$( echo $rdatestring | gawk -F',' '{print $2}' | gawk -F'.' '{print $1}' )
# das Format korrigieren (Monat, Tag, Stunde,... zweistellig)
cldate=$( echo $rdate | gawk -F'-' '{printf("%4i",$1)}; {printf("%02i",$2)}; {printf("%02i",$3)};' )
cltime=$( echo $rtime | gawk -F':' '{printf("%02i",$1)}; {printf("%02i",$2)}; {printf(" %02i",$3)};' )
# Timestamp mit date
rdate_s=$( date -d "$cldate $cltime sec" +%s )
echo $rdate_s
$rdate_s ist ein Unix Timestamp, mit dem dann z.B. gerechnet oder etwas verglichen werden kann.# snmp Datumstring Format anpassen
remote_ip="127.0.0.1"
commun="public"
# das Datum ueber snmp holen
rdatestring=$( snmpget -v1 -c $commun $remote_ip HOST-RESOURCES-MIB::hrSystemDate.0 | gawk '{print $NF}' )
# den String aufteilen in Datum und Zeit
rdate=$( echo $rdatestring | gawk -F',' '{print $1}' )
rtime=$( echo $rdatestring | gawk -F',' '{print $2}' | gawk -F'.' '{print $1}' )
# das Format korrigieren (Monat, Tag, Stunde,... zweistellig)
cldate=$( echo $rdate | gawk -F'-' '{printf("%4i",$1)}; {printf("%02i",$2)}; {printf("%02i",$3)};' )
cltime=$( echo $rtime | gawk -F':' '{printf("%02i",$1)}; {printf("%02i",$2)}; {printf(" %02i",$3)};' )
# Timestamp mit date
rdate_s=$( date -d "$cldate $cltime sec" +%s )
echo $rdate_s
Zum Einsatz kommt (mal wieder) printf, das die einstelligen Monat, Tag, usw. -Ausgaben vorne mit "0" auffüllt.
Freitag, 30. Januar 2009
MySQL - Die Größe aller Datenbanken auflisten
Datenbanken rechnen gerne und sind dabei effizient, MySQL ist da keine Ausnahme.
Wäre es nicht interessant, in der Bash auf die Schnelle eine Liste aller (lokalen) Datenbanken incl. ihrer Größe zu bekommen, in MB, ordentlich gerundet und zwar ohne die interaktive MySQL Shell zu öffnen?
Na klar!
Damit ließe sich z.B. die Größe einer Datenbank automatisiert überwachen.
Wäre es nicht interessant, in der Bash auf die Schnelle eine Liste aller (lokalen) Datenbanken incl. ihrer Größe zu bekommen, in MB, ordentlich gerundet und zwar ohne die interaktive MySQL Shell zu öffnen?
Na klar!
mysql -u root -pPasswort -e 'select table_schema,round(sum(data_length+index_length)/1024/1024,4) from information_schema.tables group by table_schema;'
Etwas sprechendere Tabellenheader wären auch nicht schlecht:mysql -u root -pPasswort -e 'select table_schema "Database",round(sum(data_length+index_length)/1024/1024,4) "Size (MB)" from information_schema.tables group by table_schema;'
Das Ergebnis schaut dann ungefähr so aus:+--------------------+-----------+ | Database | Size (MB) | +--------------------+-----------+ | copper | 0.0491 | | gallery2 | 0.1633 | | information_schema | 0.0039 | | joomla | 0.6255 | | mysql | 0.2599 | | redaxo | 0.0715 | | wiki | 2.5833 | | wordpress | 0.3367 | | xoops | 0.3042 | +--------------------+-----------+Oder die Größe einer bestimmten Datenbank (hier "wiki"), diesmal ohne Tabellenheader:
mysql -u root -pPasswort -N -e 'select round(sum(data_length+index_length)/1024/1024,4) from information_schema.tables where table_schema="wiki";'
Ergebnis:+--------+ | 2.5833 | +--------+Voraussetzung: mindestens MySQL 5.0.irgendwas (2?).
Damit ließe sich z.B. die Größe einer Datenbank automatisiert überwachen.
Mittwoch, 28. Januar 2009
Zahlenkolonnen formatieren mit (g)awk
(G)awk kann Zahlenkolonnen schick formatieren, sodass z.B. die Kommastellen sauber untereinander platziert werden. Die Ausgangsdatei, datei.txt, hat folgenden Inhalt:
13.5 556.987 14.56 13.1 15.356 345.2 416.106 2.7 17.1 3.99 18.41 4.342 139.14 345.2 20.21 20.1 621.18 4.5 22.01 77.2 23.1 94.627Das sieht nicht so toll aus... Mit Müh und Not kann man zwei Spalten mit Fließkommazahlen erkennen, jeweils durch ein Leerzeichen getrennt. Gawk wirds richten:
"Zahlenkolonnen formatieren mit (g)awk" vollständig lesen
Samstag, 17. Januar 2009
Tipps und Beispiele für "find"
Find ist ein Wunderwuzi unter den Shellprogrammen. Der Name ist Programm, mit find wird gefunden, nicht einfach nur gesucht.
Ein einfaches Beispiel:
Wo in meinem Homeordner liegt die Datei "test.pdf"?
Irgendwo in eurem Homeordner, irgendein Name, vor ein paar Minuten...
~ -- rekursiv in meinem Homeordner
-type f -- eine Datei (kein Ordner...)
! -path '*/.*' -- ohne Dateien oder Ordner, die mit Punkt beginnen.
-mmin -10 -- nicht älter als 10 Minuten
-ls -- lange Anzeige (wie ls -l)
Das war noch lange nicht alles...
Ein einfaches Beispiel:
Wo in meinem Homeordner liegt die Datei "test.pdf"?
find ~ -name test.pdf
Ihr habt vor ein paar Minuten eilig etwas gespeichert, habt aber den Namen der Datei und den Pfad sofort vergessen.Irgendwo in eurem Homeordner, irgendein Name, vor ein paar Minuten...
find ~ -type f ! -path '*/.*' -mmin -10 -ls
Die Optionen im Einzelnen:~ -- rekursiv in meinem Homeordner
-type f -- eine Datei (kein Ordner...)
! -path '*/.*' -- ohne Dateien oder Ordner, die mit Punkt beginnen.
-mmin -10 -- nicht älter als 10 Minuten
-ls -- lange Anzeige (wie ls -l)
Das war noch lange nicht alles...
"Tipps und Beispiele für "find"" vollständig lesen
Dienstag, 6. Januar 2009
URL decode und encode in der Bash
Die Bash hat selbst kein urldecode oder urlencode. Das kann aber recht einfach nachgebaut werden. Ist php installiert, hilft der Umweg über den Aufruf der PHP-Funktionen mit "php -r" (=direktes Ausführen von PHPcode in der Shell ohne Apache o.ä.).
Beispiel zum Encodieren:
Beispiel zum Decodieren:
Das funktioniert, ist aber nicht besonders komfortabel. Wir wissen uns aber zu helfen:
Beispiel zum Encodieren:
echo $( php -r "echo urlencode('Start: #1, Zeichen {13/24} Ende();');"; )
Ergebnis: Start%3A+%231%2C+Zeichen+%7B13%2F24%7D+Ende%28%29%3BBeispiel zum Decodieren:
echo $( php -r "echo urldecode('Start%3A+%231%2C+Zeichen+%7B13%2F24%7D+Ende%28%29%3B');"; )
Ergebnis: Start: #1, Zeichen {13/24} Ende();Das funktioniert, ist aber nicht besonders komfortabel. Wir wissen uns aber zu helfen:
"URL decode und encode in der Bash" vollständig lesen
Montag, 5. Januar 2009
Softwaretipp: SynfigStudio
Synfig ist ein vektorbasiertes 2D-Animationsprogramm für Linux, Windows und Mac (GPL). Trotz der noch recht niedrigen Versionsnummer (aktuell 0.61.09) und den kleinen Kinderkrankheiten gibt es schon längst eine eingeschworene Nutzergemeinde. Mit Recht, wie ich finde.
Zu Hause ist das Projekt auf www.synfig.org/Main_Page.
Was mir an Synfig so gefällt:
Wenn ich z.B. möchte, dass sich ein Objekt von links nach rechts bewegt und sich dabei dreht, muss ich nur den Anfangs- und Endzustand festlegen. Die Übergänge dazwischen werden automatisch berechnet und zwar fließender, als ich das mit händischem Pixelschubsen jemals erreichen könnte.
Zu Hause ist das Projekt auf www.synfig.org/Main_Page.
Was mir an Synfig so gefällt:
- Der Einstieg ist nicht schwer. Hat man sich erst an das Konzept mit Layers, Timeline und Keyframes gewöhnt, gibt es schnell Erfolgserlebnisse. Trotz dieser Userfreundlichkeit ist der Funktionsumfang des Programmes beachtlich.
- Das Programm ist gut dokumentiert, es gibt Tutorials aller Art.
- Animationen brauchen deutlich weniger Arbeitsschritte, als z.B. mit Gimp. Wo mit anderen Programmen dutzende Bilder nötig sind, erledigt Synfig den Job mit einem Layer.
- Alles funktioniert mit einem Tool. Bilderimport, Animation, Export als Film (z.B. avi) oder Bilderserie. Nur vertonen muss man noch extern, offensichtlich ist da aber etwas geplant, den Menüpunkt gibt es schon.
- Obwohl ein Animationsprogramm, ist Synfig relativ ressourcenschonend. Auf meinem schwachen Rechnerlein ist das ein nicht unwichtiger Punkt.
- Synfig ist vielseitig. Eine Foto Slideshow als Film mit Zwischentexten und Überblendungen? Kein Problem (nur so als Beispiel).
Wenn ich z.B. möchte, dass sich ein Objekt von links nach rechts bewegt und sich dabei dreht, muss ich nur den Anfangs- und Endzustand festlegen. Die Übergänge dazwischen werden automatisch berechnet und zwar fließender, als ich das mit händischem Pixelschubsen jemals erreichen könnte.
(Seite 1 von 1, insgesamt 6 Einträge)