Thursday, March 16, 2006

disk full?

Hi falls ihr einen Server zu überwachen habt und nicht ständig nachschauen wollt, ob noch genügen Speicherplatz frei ist, könnte dieses Script für euch nützlich sein. Es prüft nach ob auf den Devices noch genügen Platz in MB vorhanden ist:


---snip---
#!/bin/sh

if [ "x$2" == "x" ] ; then
echo "usage: $0 "
echo "example: $0 \"^/dev/sda\" 50"
exit 1
fi

OLD_IFS=$IFS
IFS=$'\n'
for i in $(df -h|grep "$1"|grep -v boot|sed -e "s/ */ /g"|cut -d ' ' -f 1,4,6)
do
DEVICE=$(echo $i|cut -d ' ' -f 1)
SPACE=$(echo $i|cut -d ' ' -f 2)
MOUNTPOINT=$(echo $i|cut -d ' ' -f 3)

if [ "G" == ${SPACE:$(expr ${#SPACE} - 1):$( expr ${#SPACE} - 1)} ] ; then
#there are gigabytes free...
continue
fi

j=${SPACE:0:$(expr ${#SPACE} - 1)} #2>/dev/null
if [ $? != 0 ] ; then
echo "usage: $0 "
echo "example: $0 "^/dev/sda" 50"
exit 1
fi

if [ $2 -ge $j ] ; then
echo "WARNING: disk full on $HOST! just $j MB left on device $DEVICE mounted to $MOUNTPOINT!"
fi
done

IFS=$OLD_IFS
---snap---


Example:
bash~> diskfull.sh "^/dev/hda" 100

Monday, February 06, 2006

Bashing Teil 2 - Dateien zeilenweise einlesen

Viele stoßen schnell darauf über mehrere Segmente iterieren zu wollen z.B.:


for i in `ls -1 --color="none"`
do
echo -n $i
test -d "$i" && echo -n " ist ein verzeichnis..."
echo
done


Das funktioniert auch soweit kein Leerzeichen oder ein anderes Whitespace in dem Dateinamen der
Ausgabe von "ls" vorhanden ist (Die Ausgabe von ls, ist wie eine Datei - es könnte hier auch z.B.
"ls -1 --color="none>/tmp/ls_ausgabe.txt;cat /tmp/ls_ausgabe.txt" stehen.

#wenn man es also "sicherer" haben will, sollte man den IFS zuvor richtig setzen:

IFS_SIK=$IFS #originalen IFS sichern
IFS=$'\n'


#folgender Befehl zeigt den Inhalt von IFS an:

set|grep IFS


#Danach sollte/muss man den alten IFS wieder setzen, damit nachfolgende Anweisungen korrekt #funktionieren:

IFS=$OLD_IFS

Thursday, February 02, 2006

wol + wlan = wow oder wowl?

Hallo,

lieber Reisender :). Manch einer hat vielleicht schonmal was von wol (wake on lan) gehört. Schöner ist es es aber, wenn man einen Rechner, z.B. seinen Server per Funk (WLAN) aufwecken könnte. Gesagt und getan, hier die Info, wie WOW mit der SUSE Linux 10.0 funktioniert.


  • wol rpm-paket installieren
  • damit auch das etherpaket seinen weg findet muss man die Routen ins eigentliche Netz setzen:
    linux:~ # route add -net 10.2.0.0 netmask 255.255.255.255 dev wlan0
    linux:~ # route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.2.0.0 dev wlan0
  • danach kann man mit:
    linux:~ # wol 00:30:05:3B:AC:8F
    den entfernten Rechner aufwecken.


Have a lot of fun!

Thursday, January 26, 2006

Bashing Teil 1 - Parameter auswerten

Hi,

hier mal ein nettes script, wie mann argumenteparsen kann - wenn man die
Übergabeparameter eines scriptes bearbeiten will, dann muss man einfach $*
anstatt $# nehmen und die "local" anweisung wegnehmen.


---snip---
function test {
local VER=""
local HELP=""
local USAGE=""

local IFS_OLD=$IFS



#parse all args
while [ $# != 0 ]
do
case "x$1" in

"x--version")
VER="v";shift;;
"x--help")
HELP="h";shift;;
"x--usage")
USAGE="u";shift;;
"x--")
ENDARGS="--"
shift
break # end reading args - now are files
;;
x--*)
echo "$1: undefined option!" >&2
rm_end 1; return $?
;;

x-*)

local OPTIONS=""

for (( i=0 ; $i < ${#1} ; i=$i+1 ))
do
OPTIONS=$OPTIONS$' '${1:$i:1}
done

IFS=$' '
for i in `echo $OPTIONS`
do

case "x$i" in

"xv")
RM_VER="v";continue;;
"xh")
RM_HELP="h";continue;;
"xu")
RM_USAGE="u";continue;;

"xf")
RM_FORCE="f";continue;;
"x-")
continue;; #overread this
"xr")
RM_RECURSIVE="r";continue;;
"xR")
RM_RECURSIVE="r";continue;;
"xd")
RM_DIRECTORY="d";continue;;

x*)
#don't handle options
echo "-$i; undefined option" >&2;
rm_end 1; return $?;;
esac
done
shift;;

x*)
break
;;

esac
done

IFS=$IFS_OLD

#handle version
if [ "x$VER" == "xv" ] ; then
echo "rm function 0.1"
rm_end 0; return $?
fi
---snap---