<> == randomfile.sh == {{{ #!/bin/sh # waehlt aus einem Verzeichnis eine Datei durch Zufall aus # und kopiert diese Datei in ein anderes Verzeichnis # 060421 Kurt Gramlich GPL Software Schnipsel # DIR="/home/kurt/skole/images/automat" DEST_DIR="/home/kurt/skole/images/titelfoto" NR_FILES=$(ls $DIR | wc -l) RANGE=$NR_FILES SEED=$(head -1 /dev/urandom | od -N 1 | awk '{ print $2 }') number=$SEED let "number %= $RANGE" echo "Random is $number" let "number = $number +1" echo "Number of files is $NR_FILES" echo "Random is $number" RND_FILE=$(echo $(ls $DIR) | awk -v RANDOM=$number '{print $RANDOM }') echo "Random file is $RND_FILE" # Vorschlag: Bildnamen im Bild anzeigen, um Nachfragen zu erleichern: convert $DIR/$RND_FILE -gravity "South" -draw "text 0,3 $RND_FILE" $DEST_DIR/titel.jpg # cp $DIR/$RND_FILE $DEST_DIR/titel.jpg exit 0 }}} == crontab == {{{ # stuendlicher Wechsel des Titelfotos 23 * * * * /home/kurt/bin/random_file.sh }}} == bodymassindex.sh == {{{ #!/bin/sh # 060912 Kurt Gramlich GPL Software Schnipsel # rechnet den BodyMassIndex aus # if [ $# -ne 2 ]; then echo "use: `basename $0` Koerpergroesse in cm und Gewicht in kg eingeben"; exit 1; fi #set -x #bmi=$(echo "scale=10; ( $2 / ( ( $1 / 100 ) * ( $1 / 100 ) ) )" | bc); bmi=$(echo "scale=3; ( $2 / ( ( $1 / 100 ) * ( $1 / 100 ) ) )" | bc); echo echo " BMI von 18.500 bis 25.000 gelten als normal" echo " Der Body Mass Index ist $bmi " echo " bei einer Koerpergroesse von $1 cm " echo " und einem Gewicht von $2 kg" echo }}} == Einschaltzeiten von Rechnern in einem Netzwerk == Mit arpwatch sammeln wir die IP Adressen. Mit crontab und nmap scannen wir die gesammelten IPs. Mit gnuplot erzeugen wir eine Grafik. Jetzt die einzelnen Bausteine: === arpwatch === Arpwatch erzeugt hier z.B. die Datei /var/lib/arpwatch/eth1.dat {{{ 0:16:17:98:91:2f 192.168.0.31 1175534112 ltsp031 0:16:17:98:91:8b 192.168.0.33 1175236347 ltsp033 0:2:b3:4c:b7:71 192.168.0.111 1175236296 ltsp111 0:4:75:bf:65:c2 192.168.0.80 1174743656 ltsp080 0:c0:4f:1f:8d:85 192.168.0.112 1175236338 ltsp112 0:b0:d0:66:4:a7 192.168.0.113 1175236418 ltsp113 }}} Mit dem folgenden Kommando erzeugen wir daraus eine Liste der IPs: {{{ cat eth1.dat | grep 192 | awk '{print $2}' > 070406_rechner_ip_aus_eth1.dat }}} 070406_rechner_ip_aus_eth1.dat sieht dann so aus: {{{ 192.168.0.31 192.168.0.33 192.168.0.111 192.168.0.80 192.168.0.112 192.168.0.113 }}} === nmap === Wir sagen jetzt nmap, dass es diese Datei lesen soll und uns angeben, welcher Rechner eingeschaltet ist. Die Optionen sind mit man nmap nachzulesen, hier nur kurz erklärt: * -sP nur pingen * -oX XML File ausgeben * - aus stout ausgeben * -e eth1 nur das Netzwerk hinter eth1 scannen * -iL den Inputfile verwenden Dann holen wir uns aus dem Ergebnis nur eine Zeile, löschen mit sed die überflüssigen Angaben. {{{ #!/bin/sh # einschalt_statistik4gnuplot.sh # erstellt eine log Datei für gnuplot # 070406 Kurt Gramlich GPL Software Schnipsel nmap -sP -oX - -e eth1 -iL 070406_rechner_ip_aus_eth1.dat | grep finished | tr -d [:alpha:] | sed -e 's/##g' >> /var/log/einschalt_daten.log }}} Diese Datei sieht dann so aus, wenn sie mit crontab alle fünf Minuten erzeugt wird: {{{ 1175890174 5 37 42 1175890502 2 40 42 1175890802 2 40 42 1175891102 0 42 42 1175891402 2 40 42 1175891702 2 40 42 1175892003 10 32 42 1175892303 2 40 42 1175892603 2 40 42 1175892903 2 40 42 1175893203 9 33 42 1175893502 2 40 42 1175893802 7 35 42 1175894102 2 40 42 1175894402 1 41 42 1175894702 2 40 42 1175895002 4 38 42 1175895302 2 40 42 1175895602 2 40 42 1175895903 8 34 42 1175896203 2 40 42 1175896503 0 42 42 1175896803 34 8 42 1175897103 2 40 42 1175897335 2 40 42 }}} === crontab === Der Eintrag in der crontab sieht dazu so aus: {{{ 0-59/5 * * * * /usr/local/sbin/einschalt_statistik4gnuplot.sh }}} === gnuplot === {{{ #!/bin/bash # uptimes.sh # 070406 Kurt Gramlich GPL Software Schnipsel #set -x #set -e cd /home/kurt/logs gnuplot << Gnuplot-Ende set title "Einschaltzeiten der Rechner im Skolelinux Netzwerk" set terminal png # Ausgabeformat png set xdata time # The x axis data is time set timefmt "%s" # The dates in seconds sins 1970 set format x "%y%m%d" # On the x-axis, we want tics like 10-12 set xlabel "Tag" set ylabel "Eingeschaltete Rechner" set out "/home/kurt/public_html/einschalt.png" plot [][0:*] "einschalt_daten.log" using 1:2 axes x1y1 title "Eingeschaltete Rechner" with linespoints, \ "einschalt_daten.log" using 1:3 axes x1y1 title "Ausgeschaltete Rechner" with linespoints, \ "einschalt_daten.log" using 1:4 axes x1y1 title "Summe der Rechner" with linespoints Gnuplot-Ende }}} Das Ergebnis sieht dann so aus: {{http://www.skolelinux.de/download/einschalt.png}} == Das Script zusammengefasst == {{{ #!/bin/sh # k4x gpl schnipsel # einschaltzeiten.sh # 070407 #set -x #set -e cat /var/lib/arpwatch/eth1.dat | awk '{print $2}' | grep 192 > /tmp/ups nmap -sP -oX - -e eth1 -iL /tmp/ups | grep finished | tr -d [:alpha:] | sed -e 's/##g' -e 's#=##g' \ -e 's#"##g' >> /var/log/einschalt_daten.log rm /tmp/ups }}}