#!/bin/sh ############################################################################# ## $HOME/kurs/shdemo ##--------------------------------------------------------------------------- ## @(#) shell 1.0.0 OgsUTIL/11.08.2001 schorsch ## @(#) demo fuer shellscripts ##--------------------------------------------------------------------------- ## Zweck: das programm enthaelt die wesentlichen aufrufe zur analyse eines ## unix systems ##--------------------------------------------------------------------------- ## History: ## 1.0.0/11.08.2000 schorsch ##--------------------------------------------------------------------------- ## (c) Copyright by pikk oehler, courlevon ############################################################################# trap "echo Programmabbruch ; sleep 2 ; ende 1" 3 15 trap "echo benutze 99 oder exit ; sleep 1 ; continue" 2 ECHO=${ECHO:-"echo -e"} UNAME=`uname -n` DATUM=`date '+%d.%B.%Y der %j jahrestag'` LOGNAME=`logname` PAGER=${PAGER:-"less"} TMPFILE=/tmp/shdemo$$ #---------------------------------------------------------------------------- #- usage() #---------------------------------------------------------------------------- function usage () { echo " Verwendung : $0 das programm fuerht als demo durch die weiten eines unix-systems " } #---------------------------------------------------------------------------- #- ende() #---------------------------------------------------------------------------- function ende () { rm -f $TMPFILE if [ "$1" ] ; then if [ $1 -ne 0 ] ; then echo "program fehlerhaft mit err:$1 beendet" exit $1 fi fi exit 0 } #---------------------------------------------------------------------------- #- systeminfo() #---------------------------------------------------------------------------- #- betreibt ein menubildschirm bis ende gewuenscht ist #---------------------------------------------------------------------------- function systeminfo () { while [ 1 ] do tput clear TIME=`date '+%r'` $ECHO " system informationen -------------------- 1 runlevel 2 wie lange laeuft $UNAME 3 systemauslastung 4 netzservices 5 verfuegbare funktionen 6 netzstatistik 7 bootmeldungen 8 systemvorfaelle 9 systemmeldungen 98 zuerueck 99 ende Auswahl : \c" ; read x case "$x" in 1) $ECHO " das system laeuft im runlevel <`runlevel`> (RETURN) \c" ; read x ;; 2) $ECHO " das system laeuft im seit `uptime` (RETURN) \c" ; read x ;; 3) DATE=`date` $ECHO " systemauslastung von $UNAME per $DATE _______________________________________________________________________________" vmstat 3 5 $ECHO " RETURN \c"; read x ;; 4) DATE=`date` $ECHO " aktive services auf $UNAME per $DATE _______________________________________________________________________________ " >$TMPFILE netstat -a | grep LISTEN >>$TMPFILE $PAGER $TMPFILE ;; 5) $ECHO " verfuegbare funktionen auf $UNAME `rpcinfo -p` (RETURN) \c" ; read x ;; 6) DATE=`date` $ECHO " netzstatistik von $UNAME per $DATE _______________________________________________________________________________ " >$TMPFILE netstat -s >>$TMPFILE $PAGER $TMPFILE ;; 7) $PAGER /var/log/boot.msg ;; 8) dmesg $ECHO " (RETURN) \c" ; read x ;; 9) $PAGER /var/log/messages ;; 98 | b | B | z | Z ) break ;; 99 | e | E | q | Q ) ende ;; *) $ECHO " ups - da haben wir uns vertan, uebung macht den meister (RETURN) \c" read x esac done return } #---------------------------------------------------------------------------- #- prozessinfo() #---------------------------------------------------------------------------- #- betreibt ein menubildschirm bis ende gewuenscht ist #---------------------------------------------------------------------------- function prozessinfo () { while [ 1 ] do tput clear TIME=`date '+%r'` $ECHO " prozess informationen --------------------- 1 wer braucht ? 2 wer ist .. ? 3 was macht er ? 4 wieviele prozesse laufen ? 5 prozesse nach systemzeit ? 6 prozesse nach speicherbedarf ? 98 zuerueck 99 ende Auswahl : \c" ; read x case "$x" in 1) $ECHO " das system $UNAME arbeitet fuer `who -uH` (RETURN) \c" ; read x ;; 2) $ECHO " wer ? \c" ; read x if [ "$x" ] ; then finger $x $ECHO " RETURN \c" read x fi ;; 3) $ECHO " wer ? \c" ; read x if [ "$x" ] ; then ps -u $x 2> $TMPFILE if [ $? -ne 0 ] ; then $ECHO "benutzer $x ist nicht am system, sorry" fi $ECHO " RETURN \c" read x fi ;; 4) x=`ps -e | wc -l` if [ $? -ne 0 ] ; then $ECHO "fehlfunktion in " fi $ECHO " zur zeit laufen $x prozesse" $ECHO " RETURN \c" ; read x ;; 5) DATE=`date` $ECHO " CPUfresser auf $UNAME per $DATE _______________________________________________________________________________ " >$TMPFILE ps -eo "%U %P %C %z %a" --sort=-stime >>$TMPFILE $PAGER $TMPFILE ;; 6) DATE=`date` $ECHO " Speicherfresser auf $UNAME per $DATE _______________________________________________________________________________ " >$TMPFILE ps -eo "%U %P %C %z %a" --sort=-vsize >>$TMPFILE $PAGER $TMPFILE ;; 98 | b | B | z | Z ) break ;; 99 | e | E | q | Q ) ende ;; *) $ECHO " so nicht mein sohn, probiers nochmal (RETURN) \c" read x esac done return } #---------------------------------------------------------------------------- #- diskinfo() #---------------------------------------------------------------------------- #- betreibt ein menubildschirm bis ende gewuenscht ist #---------------------------------------------------------------------------- function diskinfo () { while [ 1 ] do tput clear TIME=`date '+%r'` $ECHO " disk informationen ------------------ 1 aktive filesysteme 2 zustand der filesysteme 3 welche prozesse arbeiten mit fs? 4 platzverbrauch fuer 5 iostatistiken 98 zuerueck 99 ende Auswahl : \c" ; read x case "$x" in 1) $ECHO " folgende fs sind aktiv --------------------------- `mount` (RETURN) \c" ; read x ;; 2) $ECHO " linux laeuft nicht standardmaessig, sorry, korrekt waere `mount | awk '{ if ($5 == "ext2") { print "fsck -m " $1 }}'` (RETURN) \c" ; read x ;; 3) $ECHO " welches fs ? \c" ; read x if [ "$x" ] ; then $ECHO " folgende prozesse arbeiten mit $x ------------------------------------------------------------------------------- `fuser -v $x` (RETURN) \c" ; read x fi ;; 4) $ECHO " welches verzeichnis ? \c" ; read x if [ "$x" ] ; then $ECHO " also ... eben ... wird dauern ... warte...... \c" $ECHO " platz bedarf der verzeichnisse in $x _______________________________________________________________________________ " >$TMPFILE du -s $x/* >>$TMPFILE $ECHO " done" ; sleep 1 $PAGER $TMPFILE fi ;; 5) type iostat 1>/dev/null 2>&1 if [ $? -ne 0 ] ; then $ECHO " iostat ist nicht installiert." else iostat xe 5 fi $ECHO "RETURN \c" ; read x ;; 98 | b | B | z | Z ) break ;; 99 | e | E | q | Q ) ende ;; *) $ECHO " ups - da haben wir uns vertan, uebung macht den meister (RETURN) \c" read x esac done return } #---------------------------------------------------------------------------- #- dateiinfo() #---------------------------------------------------------------------------- #- betreibt ein menubildschirm bis ende gewuenscht ist #---------------------------------------------------------------------------- function dateiinfo () { while [ 1 ] do tput clear TIME=`date '+%r'` $ECHO " datei informationen ------------------- 1 welche dateien im verzeichnis 2 dateiinhalt 3 trojaner 4 dateien groesser 1mb 5 dateien neuer als 90 tage 98 zuerueck 99 ende Auswahl : \c" ; read x case "$x" in 1) $ECHO " welches verzeichnis ? \c" ; read x if [ "$x" ] ; then ls -l $x fi $ECHO "(RETURN) \c" ; read x ;; 2) $ECHO " welches verzeichnis ? \c" ; read x if [ "$x" ] ; then file $x/* fi $ECHO "(RETURN) \c" ; read x ;; 3) $ECHO " welches verzeichnis ? \c" ; read x if [ "$x" ] ; then $ECHO " folgende dateien sind potentiell gefaehrlich (trojaner) ------------------------------------------------------------------------------- `find $x -perm +06000 -ls` (RETURN) \c" ; read x fi ;; 4) $ECHO " welches verzeichnis ? \c" ; read x if [ "$x" ] ; then if [ ! -d "$x" ] ; then $ECHO "verzeichnis $d gibts nicht, nicht lesbar.. RETURN \c" else $ECHO "bin am werken, lass mir zeit... \c" $ECHO " dateien mit einer groesse ueber 1mb - wow _______________________________________________________________________________ " >$TMPFILE find $x -size +1024k -ls >>$TMPFILE $ECHO " done" ; sleep 1 $PAGER $TMPFILE fi fi ;; 5) $ECHO " welches verzeichnis ? \c" ; read x if [ "$x" ] ; then $ECHO " das koennte dauern ... kaffee ist nich schaedlich \c" $ECHO " dateien die juenger 90 tage sind _______________________________________________________________________________ " >$TMPFILE find $x -mtime -90 -ls >>$TMPFILE $ECHO " done" ; sleep 1 $PAGER $TMPFILE fi ;; 98 | b | B | z | Z ) break ;; 99 | e | E | q | Q ) ende ;; *) $ECHO " ups - da haben wir uns vertan, uebung macht den meister (RETURN) \c" read x esac done return } #---------------------------------------------------------------------------- #- hauptprogramm #---------------------------------------------------------------------------- a=`id -u` if [ $a -ne 0 ] ; then $ECHO "script muss unter root gestartet werden" exit 1 fi if [ "$SHTRACE" ] ; then set -x ; fi if [ $# -ne 0 -o "$1" = "-?" -o "$1" = "-h" ] ; then usage exit 1 fi type runlevel 1>/dev/null 2>&1 if [ $? -ne 0 ] ; then $ECHO "es sollte der echte root sein... nicht mogeln bitte" ende 1 fi while [ 1 ] do tput clear TIME=`date '+%r'` $ECHO " Demo Programm fuer Shellscript ------------------------------ computer $UNAME am $DATUM um $TIME 1 systeminfo 2 prozessinfo 3 diskinfo 4 dateiinfo 99 ende Auswahl : \c" ; read x case "$x" in 1) systeminfo ;; 2) prozessinfo ;; 3) diskinfo ;; 4) dateiinfo ;; 99 | e | E | q | Q ) ende ;; *) $ECHO " unguelige auswahl, probiers nochmal (RETURN) \c" read x ;; esac done trap 2 3 15 ende 0