#!/bin/sh # sysi - display system information such as cpu, memory, ip... # BETA # (c) 2003-11-14 Tero.Karvinen iki.fi # GNU General Public License # http://iki.fi/karvinen # requires: sh, grep, uname, tr # todo: require only programs from /bin/. Test in Debian, BSD, MacOsX function usage { echo echo "sysi - display system information such as cpu, memory, ip..." echo -e "Information about localhost: \t\t\tsysi" echo -e "Information on a remote host trough ssh: \tsysi loginname@example.com" echo "(c) 2003-11-14 Tero Karvinen http://iki.fi/karvinen" echo } function iface # Interface configuration info on single <79 char line { IFCONFIG=`which ifconfig 2>/dev/null||echo /sbin/ifconfig` ROUTE=`which route 2>/dev/null||echo /sbin/route` IPADDR=`$IFCONFIG $1|gawk '/inet addr/{print $2}'|gawk -F: '{print $2}'` IPMASK=`$IFCONFIG $1|gawk '/inet addr/{print $4}'|gawk -F: '{print $2}'` IPROUTE="`$ROUTE -n|grep $1|gawk '/^0\.0\.0\.0/{print $2}'`" test -z "$IPROUTE" && IPROUTE="undefined" IPDNS=`gawk '/nameserver/{print $2}' /etc/resolv.conf|tr -d ' '|tr '\n' ' '` IPDHCP=`grep -q "generated by /sbin/dhclient-script" /etc/resolv.conf && echo "dhcp"` # bubble IPCONFIG="$1 $IPADDR/$IPMASK gw:$IPROUTE dns:$IPDNS $IPDHCP" echo -e $IPCONFIG } function interfaces # Interface configuration for all ifaces but loopback { IFCONFIG=`which ifconfig 2>/dev/null||echo /sbin/ifconfig` IFACES=`$IFCONFIG |gawk -- '/^\w/{ print $1}'|grep -v lo|tr '\n' ' '` for TMP in $IFACES do iface $TMP done } function systeminfo # Print system information. This is the meat of sysi. { #echo "12345678 *10 5678 *20 45678 *30 45678 *40 45678 *50 45678 * 60 5678 *70 456 80*" #CPUMHZ=`cat /proc/cpuinfo|grep -e '^cpu MHz'|gawk -F : -- '{ print int($2) " MHz"; }'|tr '\n' ' '` CPUMHZ=`cat /proc/cpuinfo|gawk -F: -- '/^cpu MHz/{ print int($2) " MHz"; }'|uniq -c|gawk '{ print $1 " * " $2 " MHz"}'|tr '\n' ' '` if [ "`grep 'cpu MHz' /proc/cpuinfo|wc -l`" -gt 1 ]; then CPUMHZ=`cat /proc/cpuinfo|gawk -F: -- '/^cpu MHz/{ print int($2) " MHz"; }'|uniq -c|gawk '{ print $1 " * " $2 " MHz"}'|tr '\n' ' '` else CPUMHZ=`cat /proc/cpuinfo|gawk -F: -- '/^cpu MHz/{ print int($2) " MHz"; }'` fi CPUBOGOMIPS="`cat /proc/cpuinfo|gawk -F : -- '/bogomips/{ print int($2) }'` bogomips" CPUNAME=`cat /proc/cpuinfo|grep -e '^model name'|gawk -F : -- '{ print $2; }'` CPUTYPE=`uname -pm|tr ' ' '\n'|uniq|grep -v unknown|tr '\n' ' '` MEMPHYS=`gawk -F: -- '/^MemTotal/{ print int(int($2)/1000) " MB"; }' /proc/meminfo` DISKTOTAL=`df --local|grep -v 'Filesystem.*1K' |gawk '{total += $2; usage+=$3}; END { print int(usage/1024/1024) " GB (" int(usage/total*100) "%) used / " int(total/1024/1024) " GB total"}'` DISKTOTAL=`df --local|grep -v 'Filesystem.*1K' |gawk '{total+=$2}; END { print int(total/1024/1024) " GB"}'` DISKUSE=`df --local|grep -v 'Filesystem.*1K' |gawk '{usage+=$3}; END { print int(usage/1024/1024) " GB"}'` DISKPERCENT=`df --local|grep -v 'Filesystem.*1K' |gawk '{total += $2; usage+=$3}; END { print int(usage/total*100) "%"}'` USERSLOGGED="`w -hs |gawk -- '{ print $1 }'|uniq|wc -l|gawk -- '{ print int($1) }'`" USERSHOMES="`ls /home/|wc -l|gawk -- '{print int($1) }'`" USERCOUNT="`grep "^\w*\:\w*\:[0123456789][0123456789][0123456789]\+:" /etc/passwd|wc -l|tr -d ' '`" # Usercount includes disabled users, because normal user cannot read /etc/shadow echo -e "$CPUTYPE$CPUMHZ, ram $MEMPHYS. Disks $DISKTOTAL total, $DISKUSE ($DISKPERCENT) used." echo -e "Users $USERSLOGGED logged in / $USERCOUNT total. " interfaces } # Main if [ "--help" = "$1" -o "-h" = "$1" ]; then usage elif [ -n "$1" ]; then # -n lenght of str not zero cat $0|ssh $1 sh else systeminfo fi # (c) Tero Karvinen # email: tero.karvinen iki.fi # http://iki.fi/karvinen