home *** CD-ROM | disk | FTP | other *** search
- #!/bin/bash
- arg1=$1 #general
- arg2=$2 #partitions
- arg3=$3 #TOD
- arg4=$4 #users
- arg5=$5 #groups
- arg6=$6 #logged users
- arg7=$7 #network
- arg8=$8 #USB
- arg9=$9 #processes
- shift 1
- arg10=$9 #services
-
- renice -15 $$ 2>&1 1>/dev/null
-
- echo "TRUE:"
-
- #linux detect
- if [ -e /etc/SuSE-release ]; then
- DISTRIBUTION=`cat /etc/SuSE-release | awk '{
- if (NR==1)
- print $0
- }'`
- fi
-
- if [ -e /etc/redhat-release ]; then
- DISTRIBUTION=`cat /etc/redhat-release | awk '{
- if (NR==1)
- print $0
- }'`
- fi
-
- if [ -e /etc/debian_version ]; then
- DISTRIBUTION=`cat /etc/debian_version | awk '{
- if (NR==1)
- print $0
- }'`
- fi
-
-
- if [ -z "$DISTRIBUTION" ]; then
-
- LINUXDATA=`uname -o`
-
- DISTRIBUTION=`awk 'BEGIN{
- if (index("'"$LINUXDATA"'","FreeBSD")>0) {
- print "FreeBSD"
- }
- }'`
-
- fi
-
- if [ -z "$DISTRIBUTION" ]; then
- DISTRIBUTION=`uname -o`
- fi
-
-
- KERNEL=`uname -r`
- HOST=`uname -n`
-
- if [ $arg1 -eq 1 ]; then
- echo "<general>"
- echo "<os>"$DISTRIBUTION"</os>"
- echo "<kernel>"$KERNEL"</kernel>"
- echo "<host>"$HOST"</host>"
- echo "</general>"
-
- echo "%&%&"
-
- if [ -r /proc/cpuinfo ] ;then
- #read data about CPU
- a=`cat /proc/cpuinfo | grep processor | wc -l`
- echo "<processors count=\""$a"\">"
- i=1
- while [ $i -le $a ] ; do
- #for each processor, get vendor, model, speed and flags
- echo "<processor>"
- x=`cat /proc/cpuinfo | grep -m $i "processor" | tail -n 1`
- cat /proc/cpuinfo | grep -A18 "$x" | while read a b c d; do
- if [ "$a" = "vendor_id" ] ; then
- echo "<vendor_id>"$c"</vendor_id>"
- elif ( [ "$a" = "model" ] && [ "$b" = "name" ] ) ; then
- echo "<model_name>"$d"</model_name>"
- elif ( [ "$a" = "cpu" ] && [ "$b" = "MHz" ] ) ; then
- echo "<cpu_speed>"$d"</cpu_speed>"
- elif [ "$a" = "flags" ] ; then
- prima=0
- #print cpu flags separated by commas
- echo "<cpu_flags>" `for z in $c $d ; do
- if [ $prima -eq 0 ] ; then
- prima=1
- echo $z
- else
- echo ", "$z
- fi
- done` "</cpu_flags>"
- fi
- done
- echo "</processor>"
- i=$[i+1];
- done
-
- echo "</processors>"
- echo "%&%&"
- fi
- fi
-
- if [ $arg2 -eq 1 ]; then
- #get info about MOUNTED partitions; it will not print partitions that are not mounted, or remote disks
- echo "<partitions>"
- #check if we can execute df, fdisk and mount
- if ( [ -x /sbin/fdisk ] && [ -x /bin/df ] && [ -x /bin/mount ]) ; then
- if /sbin/fdisk -l 2>&1 | grep "Cannot" >/dev/null ; then
- #this means that we can't run df; sorry
- echo "<partition>"
- echo "</partition>"
- else
- fdisk -l | grep ^/dev | while read a b; do
- if [ `mount | grep $a | cut -d\ -f1` ]; then
- echo "<partition>"
- mount | grep $a | ( read a b c d e f ; if [ $a ]; then echo "<fs_type>"$e"</fs_type>" "<mount_point>"$c"</mount_point>"; fi )
- df $a | tail -n1 | ( read a b c d e f ; echo "<size>"`expr $b \* 1024`"</size>" "<used_space>"`expr \( $b \- $c \) \* 1024`"</used_space>" )
- echo "</partition>"
- fi
- done
- #the code below checks partition mounted in redhat's LVM
- if [ "`lvdisplay 2>/dev/null | grep /dev`" ] ; then
- echo "<partition>"
- mount | grep /dev/mapper | while read a b c d e f ; do
- echo "<fs_type>"$e"</fs_type>" "<mount_point>"$c"</mount_point>"
- df $a | tail -n1 | ( read a b c ; echo "<size>"`expr $a \* 1024`"</size>" "<used_space>"`expr \( $a \- $b \) \* 1024`"</used_space>" )
- done
- echo "</partition>"
- fi
- fi
- fi
- echo "</partitions>"
- echo "%&%&"
- fi
-
- #time of day
- if [ $arg3 -eq 1 ]; then
-
- # UPTIME=`uptime | awk '{
- # split($0,el,",")
- # upt=substr(el[1],index(el[1],"up")+2)
- # print upt
- # }'`
-
- UPTIME=`cat /proc/uptime | awk '{
- split($1,el,".")
- print el[1]
- }'`
-
-
- DATE=`date`
-
-
- echo "<timeofday>"
- echo "<ct>"$DATE"</ct>"
- echo "<uptime>"$UPTIME"</uptime>"
- echo "</timeofday>"
- echo "%&%&"
- fi
-
-
- #userlist
- if [ $arg4 -eq 1 ]; then
- if ( [ -r '/etc/passwd' ] && [ -r '/etc/shadow' ] ) ; then
- #we need read access to both passwd and shadow to read all info
- echo "<users>"
- #to optimize, we put both files in variables
- declare -a paswd=( `cat /etc/passwd | ( while read a; do echo \"$a\"; done; )` )
- declare -a shadw=( `cat /etc/shadow | ( while read a; do echo \"$a\"; done; )` )
-
- nusers=`cat /etc/passwd | wc -l`
- i=0
- while [ $i -lt $nusers ] ; do
- pline=${paswd[$i]}
- sline=${shadw[$i]}
- echo "<user>"
- echo $pline\:$sline | cut -d: -f 1,6,7,9,10 --output-delimiter=" " | ( read n b c d e ;
- echo "<name>`echo $pline | cut -d: -f 5`</name>"
- echo "<homedir>$b</homedir>"
- echo "<login>$c</login>"
- echo "<username>$n</username>"
- echo "<pass_age>$e</pass_age>"
-
- if [ -z "$d" ] ; then
- echo "<account_stats>2</account_stats>"
- elif [ "$d" = '*' ] || [ "$d" = '!' ] || [ "$d" = '!!' ] || [ "$c" = "/sbin/nologin" ]; then
- echo "<account_stats>1</account_stats>"
- else
- echo "<account_stats>0</account_stats>"
- fi
- ll=`lastlog -u $n 2>/dev/null | tail -c 31`
- echo "<lastlogon>$ll</lastlogon>"
- if [ $n ] && [ -z "`echo $ll | grep -i never`" ] ; then
- num_logins=`last $n | wc -l`
- num_logins=`expr $num_logins \- 2`
- if [ $num_logins -lt 0 ] ; then
- num_logins=0
- fi
- else
- num_logins=0
- fi
- echo "<num_logins>"$num_logins"</num_logins>"
- )
-
- echo "</user>"
- i=`expr $i \+ 1`
- done
-
- echo "</users>"
-
- else
- echo "<users></users>"
- fi
-
- echo "%&%&"
-
-
- fi
-
-
-
- #grouplist
- if [ $arg5 -eq 1 ]; then
- if ([ -r '/etc/group' ]) ; then
- # echo "TRUE:"
-
- awk ' BEGIN {
- FS=":"
- substfile = "/etc/group"
- i=0
- while ( getline < substfile ) {
- grpid[i] = $3
- var1[i] = $1
- grpusr[$3] = $4
- i=i+1
- }
- close (substfile)
- nrrows=i
-
- substfile = "/etc/passwd"
- i=0
- while ( getline < substfile ) {
- split(grpusr[$4],U,",")
- found=0
- for (j in U)
- if (U[j]==$1)
- found=1
- if (found==0)
- if (length(grpusr[$4])==0)
- grpusr[$4] = $1
- else
- grpusr[$4] = grpusr[$4] "," $1
-
- }
- close (substfile)
-
-
- print "<groups>"
- for (i=0;i<nrrows;i++) {
- print "<group name=\"" var1[i] "\">"
- # print var1[i]
- split(grpusr[grpid[i]],U,",");
- for (j in U)
- print "<member>" U[j] "</member>"
- print "</group>"
- }
- print "</groups>"
- }'
- else
- # echo "FALSE:"
- echo "<groups></groups>"
- fi
- echo "%&%&"
- fi
-
- #logged users
- if [ $arg6 -eq 1 ]; then
-
- if ([ -r /etc/HOSTNAME ]) ; then
- HOST=`cat /etc/HOSTNAME`
- else
- HOST=`hostname`
- fi
-
-
- if ([ -r '/usr/bin/w' ]) ; then
-
- #check if FROM column is enabled by default
- enabled=`w | awk ' NR==2 {
- if (index($0, "FROM") > 0) {
- print 1
- }
- else {
- print 0
- }
- }'`
-
- if [ $enabled == "0" ] ; then
- OUTPUT="w -f"
- else
- OUTPUT="w"
- fi
- # echo "TRUE:"
- echo "<logged_users>"
- exec $OUTPUT | awk -v hname=$HOST '{
- if (NR > 2) {
- print "<loggeduser>"
-
- remote="true"
- if ( hname == "$3" ) {
- remote="false"
- }
- if (index($3,":") == 1) {
- remote="false"
- }
- if (index($3,"-") == 1) {
- remote="false"
- }
- if (remote == "true") {
- print "<name>"$3"\\"$1"</name>"
- print "<remote>1</remote>"
- }
- else {
- print "<name>"$1"</name>"
- }
-
- print "<tty>"$2"</tty>"
- # print "<from>"$3"</from>"
- print "<login>"$4"</login>"
- cm=""
- for (i=8; i<=NF; i++) {
- cm=cm $i
- }
- print "<app>"cm"</app>"
- print "</loggeduser>"
- }
- }'
- echo "</logged_users>"
-
- else
- # echo "FALSE:"
- echo "<logged_users></logged_users>"
- fi
- echo "%&%&"
- fi
-
-
-
-
- #netcard
-
- if [ $arg7 -eq 1 ]; then
- echo "<interfaces>"
- for iffile in "/proc/net/dev" "/proc/net/wireless"; do
- nrif=`cat $iffile | wc -l`
- nrif=`expr $nrif - 2`
-
- if [ $iffile = "/proc/net/dev" ] ; then
- ifcfg="ifconfig"
- else
- ifcfg="iwconfig"
- fi
- cat $iffile | tail -n$nrif | cut -d: -f1 | while read ifn ; do
- baddr=`$ifcfg $ifn | grep "Base address" | cut -dx -f2 | head -c4`
- ip=`$ifcfg $ifn | grep "inet" | cut -d: -f2 | cut -d\ -f1`
- if [ $ip ] && [ $ifn != "lo" ] ; then
- echo "<interface>"
- echo "<ip>"$ip"</ip>"
- echo "<name>"$ifn"</name>"
- if [ $iffile = "/proc/net/dev" ]; then
- echo "<type>"wired"</type>"
- else
- echo "<type>"wireless"</type>"
- fi
- if [ $baddr ] ; then
- hwaddr=`lspci -v | grep $baddr -B4 | grep "controller" | cut -d\ -f1 | tail -c8`
- echo "<vendor>"`lspci -vm | grep -A6 $hwaddr | grep "^Vendor" | cut -d: -f2`"</vendor>"
- echo "<product>"`lspci -vm | grep -A6 $hwaddr | grep "^Device" | cut -d: -f2`"</product>"
- echo "<hwaddr>"`$ifcfg $ifn | grep "HWaddr" | tail -c20`"</hwaddr>"
- echo "<bcast>"`$ifcfg $ifn | grep "Bcast" | cut -d: -f3 | cut -d\ -f1`"</bcast>"
- ip6=`$ifcfg $ifn | grep "inet6" | cut -d/ -f 1 | tail -c25`
- if [ $ip6 ] ; then
- echo "<ip6>" $ip6 "</ip6>"
- fi
- echo "<nmask>"`$ifcfg $ifn | grep "Mask" | cut -d: -f4 | cut -d\ -f1`"</nmask>"
- fi
- echo "</interface>"
- fi
- done
- done
- echo "</interfaces>"
- echo "%&%&"
- fi
-
-
-
-
-
- #usb devices
-
- #check if usb.ids is present
- if [ $arg8 -eq 1 ]; then
-
- if [ -r '/proc/bus/usb/devices' ] ; then
- devf='/proc/bus/usb/devices'
-
- if [ -r '/usr/share/hwdata/usb.ids' ] ; then
- idsfile='/usr/share/hwdata/usb.ids'
- elif [ -r '/usr/share/usb.ids' ] ; then
- idsfile='/usr/share/usb.ids'
- fi
-
- idstring='*'
- i=1
-
- maxdevcount=`cat $devf | grep "^T:" | wc -l`
-
- echo "<usb>"
- while [ $i -le $maxdevcount ] ; do
- idstring=`cat $devf | grep "Vendor" -A2 -m$i | tail -n3`
- i=`expr $i + 1`
- vndid=`echo $idstring | cut -d= -f2 | cut -d\ -f1`
- if [ "$vndid" = "0000" ] ; then
- vendor='Generic USB Device Vendor'
- else
- vendor=`cat $idsfile | grep $vndid | ( read a b ; echo $b )`
- fi
- devid=`echo $idstring | cut -d= -f3 | cut -d\ -f1`
- if [ "$devid" = "0000" ] ; then
- product='Generic USB Device'
- else
- product=`cat $idsfile | grep $vndid -m1 -A100 | grep $devid -m1 | ( read a b ; echo $b )`
- if [ -z "$product" ] ; then
- product='Unknown Product'
- fi
- fi
-
- if [ "`echo $idstring | grep -i product`" ] ; then
- manufacturer=`echo $idstring | cut -d= -f5 | cut -d: -f1 | sed "s/\(.*\)S/\1/"`
- description=`echo $idstring | cut -d= -f6`
- else
- manufacturer="Generic Manufacturer"
- description="Generic Device"
- fi
-
- if [ -z "`echo $description | grep -i controller`" ] ; then
- echo "<device>"
- echo "<product>$product</product>"
- echo "<vendor>$vendor</vendor>"
- echo "<manufacturer>$manufacturer</manufacturer>"
- echo "<description>$description</description>"
- echo "</device>"
- fi
- done
- echo "</usb>"
-
- echo "%&%&"
-
- fi
- fi
-
-
- #process list
- if [ $arg9 -eq 1 ]; then
-
- #displays the list of all running proceeses
- #the current process and all processes that derive from this one
- #will be avoided
- CPID=$$
-
- #echo $CPID
-
- #echo "TRUE:"
- echo "<processes>"
- FIRSTLINE=0
- ps ax -o "fname pid euser ppid priority args" | grep -v ps | grep -v $$ | while read a b c d e f; do
- if [ $FIRSTLINE -eq 0 ] ;then
- FIRSTLINE=1
- else
- if [ -e /etc/xinetd.d/$a ] ; then
- x=1
- else
- x=0
- fi
- echo "<proc x=\""$x"\">"
- echo "<name><![CDATA["$a"]]></name>"
- echo "<pid>"$b"</pid>"
- echo "<user>"$c"</user>"
- echo "<ppid>"$d"</ppid>"
- echo "<priority>"$e"</priority>"
- echo "<cmd_line>"$f"</cmd_line>"
- echo "<home_dir>"`ls -lA /proc/$b 2>/dev/null| grep cwd | cut -d ">" -f 2`"</home_dir>"
- x=`ls -lA /proc/$b/task 2>/dev/null | wc -l`
- x=$[x-1]
- echo "<thread_count>"$x"</thread_count>"
- echo "</proc>"
- echo
- fi
- done
- echo "</processes>"
-
- #echo $$
-
- #echo "!!SCRIPT_FINISHED!!"
-
- echo "%&%&"
-
- fi
-
-
- #services
- if [ $arg10 -eq 1 ]; then
-
- #check if we have enough rights to determine the startup settings
- if ( [ -x '/sbin/runlevel' ] && [ -x '/sbin/chkconfig' ] ) ; then
-
- #check which services are enabled
- CRUNLEVEL=`runlevel | (read a a ;echo $a)`
-
- NRUNLEVEL=`cat /etc/inittab | grep ":initdefault:" | cut -d ":" -f 2`
-
-
-
- if [ -e "/etc/init.d" ]
- then
- DAEMONDIR="/etc/init.d/"
- else
- if [ -e "/etc/rc.d/init.d" ]
- then
- DAEMONDIR="/etc/rc.d/init.d/"
- else
- DAEMONDIR="/etc/rc.d/"
- fi
- fi
-
-
-
-
- echo "<services runlevel=\"$CRUNLEVEL\" nextrunlevel=\"$NRUNLEVEL\">"
-
-
- chkconfig --list | grep ":on" | while read a b c d e f g h ; do
- echo "<service>"
- echo "<name><![CDATA["$a"]]></name>"
- echo "<description><![CDATA["`cat $DAEMONDIR$a | grep -m1 -i "description" | (read a b c; echo $c)`"]]></description>"
- if [ $a = network ] ;then
- echo "<status>4</status>"
- else
- stats=`$DAEMONDIR$a status 2>&1 | tail -n 1 | awk '{print $NF}'`
- if [ `echo $stats | grep -i "stopped"` ] || [ `echo $stats | grep -i "unused"` ]; then
- echo "<status>1</status>"
- elif [ `echo $stats | grep -i "running"` ] || [ `echo $stats | grep -i "started"` ] ; then
- echo "<status>4</status>"
- else
- echo "<status></status>"
- fi
- fi
- zz=''
- for x in "$b" "$c" "$d" "$e" "$f" "$g" "$h" ; do
- if [ `echo $x | grep 'on'` ] ; then
- if [ "$zz" ] ; then
- zz=$zz\,\ `echo $x | cut -d: -f1`
- else
- zz=`echo $x | cut -d: -f1`
- fi
- fi
- done
- echo "<runlevels>$zz</runlevels>"
- echo "</service>"
- done
-
-
- echo "</services>"
-
- else
- echo "<services></services>"
- fi
- echo "%&%&"
- fi
-
- if [ `ls -lA | wc -l` -eq 1 ] ; then
- rm -rf ~/.gfi-temp
- else
- rm -f $0 2>&1 1>/dev/null
- fi
-
- echo "!!SCRIPT_FINISHED!!"