TerminalScripts

From Amahi Wiki
Jump to: navigation, search

Use of script files provides many useful results. Below is a small collection that should enhance your command line experience.

Disk Space

#!/bin/bash

Black='\e[0;30m'
Blue='\e[0;34m'
Green='\e[0;32m'
Cyan='\e[0;36m'
Red='\e[0;31m'
Purple='\e[0;35m'
Brown='\e[0;33m'
Light_Gray='\e[0;37m'
Dark_Gray='\e[1;30m'
Light_Blue='\e[1;34m'
Light_Green='\e[1;32m'
Light_Cyan='\e[1;36m'
Light_Red='\e[1;31m'
Light_Purple='\e[1;35m'
Yellow='\e[1;33m'
White='\e[1;37m'

Blink='\033[5m'
Bold='\033[1m'
Underline='\033[4m'

No_Color='\033[0m'

TermSize=`tput cols`

if [ $TermSize -gt "81" ]; then
	TermSize=81
fi

function Print {
	
	# Disk I don't care about.
	if [ $DISK = "none" ] || [ $DISK = "/dev/sda3" ] || [ $DISK = "/dev/pts" ] || [ $DISK = "/dev/shm" ] || [[ $DISK =~ /dev/sr.* ]]; then
		continue
	fi

	read SIZE USED FREE PERCENT <<< $(df -hP 2> /dev/null|grep $DISK|awk '{print $2" "$3" "$4" "$5}')
	
	PERCENT=$(echo $PERCENT|sed s/%//)
	
	BarSize=$(echo "($PERCENT*($TermSize-3))/100"|bc)


	if [ "$PERCENT" -gt "90" ]; then
		Color=$Light_Red
	elif [ "$PERCENT" -gt "70" ]; then
		Color=$Yellow
	else
		Color=$Light_Green
	fi

	
	echo "Partition: $DISK"
	#echo
	echo -ne "Total size: $SIZE | "
	echo -ne "Used space: $USED | "
	echo -ne "Free space: ${Color}$FREE${No_Color} | "
	echo -ne "Used space percent: $PERCENT%"
	echo
	

	echo -ne "["
	
	for i in `seq 1 $BarSize`; do
		echo -ne "${Color}#"
		echo -ne "${No_Color}"
	done

	for i in `seq 1 $(echo "$TermSize-$BarSize-3"|bc)`; do
		echo -ne "="
	done

	echo "]"

	echo -ne "${No_Color}"
	echo
}

echo

if [ "$1" != "" ]; then
	DISK=$1
	Print
else
	for DISK in $(mount 2> /dev/null | grep "^/dev/" | awk '{print $1}'); do
		Print
	done
fi

System Info

#!/bin/sh
# Variables (server default)
TEMP="0"  # 0 for Farenheit, 1 for Celcius
LOCCOD="95110"
# Find your own LOCCOD (location code) at the end of
# the url here: http://www.accuweather.com/rss-center.asp
# If code has a space; replace with %20
#
# Variables
HOSTNAME=`hostname -f`
IP_ADDRS=`ifconfig | grep 'inet addr' | grep -v '255.0.0.0' | cut -f2 -d':' | awk '{print $1}'`
IP_ADDRS=`echo $IP_ADDRS | sed 's/\n//g'`
CPUS=`cat /proc/cpuinfo | grep processor | wc -l | awk '{print $1}'`
CPU_MHZ=`cat /proc/cpuinfo | grep MHz | tail -n1 | awk '{print $4}'`
CPU_TYPE=`cat /proc/cpuinfo | grep vendor_id | tail -n 1 | awk '{print $3}'`
CPU_TYPE2=`uname -m`
OS_NAME=`uname -s`
OS_KERNEL=`uname -r`
BOOT=`procinfo | grep Bootup | sed 's/Bootup: //g' | cut -f1-6 -d' '`
UPTIME=`uptime |cut -d , -f 1 | cut -c 2-`
PCIINFO=`lspci | cut -f3 -d':'`
# Read and process .motd.conf file and set variables
if [ -s "$HOME/.motd.conf" ] ; then
  file=`cat "$HOME/.motd.conf" | grep -Ev '^#' | grep -Ev '^$'`
  motd=`echo "$file" | grep -Ei '^motd=.+' | sed -e 's/motd=//i' -re 's/.*(0).*/\1/'`
  if [ "$motd" == "0" ] ; then
  process="0"
  usage="0"
  weather="0"
  else
  process=`echo "$file" | grep -Ei '^process=.+'    | sed -e 's/process=//i' -re 's/.*(0).*/\1/'`
  usage=  `echo "$file" | grep -Ei '^disk usage=.+' | sed -e 's/disk usage=//i' -re 's/.*(0).*/\1/'`
  weather=`echo "$file" | grep -Ei '^weather=.+'    | sed -e 's/weather=//i' -re 's/.*(0).*/\1/'`
  TEMPu=`  echo "$file" | grep -Ei '^TEMP=.+'       | sed -e 's/TEMP=//i' -re 's/.*([01]).*/\1/'`
  LOCCODu=`echo "$file" | grep -Ei '^LOCCOD=.+'     | sed -e 's/LOCCOD=//i' -re 's/["?](.+)["?]/\1/'`
  if [ $TEMPu != "" ] ; then
    TEMP="$TEMPu"
  fi
  if [ $LOCCODu != "" ] ; then
    LOCCOD="$LOCCODu"
  fi
  fi
fi
#print it out
echo
echo "\033[0;36mHostname         : \033[0;37m$HOSTNAME"
echo "\033[0;36mHost Address(es) : \033[0;37m$IP_ADDRS"
echo "\033[0;36mOS Name          : \033[0;37m$OS_NAME"
echo "\033[0;36mKernel Version   : \033[0;37m$OS_KERNEL"
echo "\033[0;36mCPU Type         : \033[0;37m$CPU_TYPE $CPU_TYPE2 $CPU_MHZ MHz"
echo "\033[0;36mNumber of CPUs   : \033[0;37m$CPUS"
# Display Memory Stats
if [ "$memory" != "0" ] ; then
  memory=`free -m`
  echo "\033[0;36mMemory MB........: \033[0;37m`echo "$memory" | grep 'Mem: ' \
  | awk '{print "Ram used: "$3" free: "$4}'`   `echo "$memory" | grep 'Swap: ' \
  | awk '{print "Swap used: "$3" free: "$4}'`"
fi
# Display Usage of Home Directory
if [ "$usage" != "0" ] ; then
  du -sh $HOME | awk '{print "\033[0;36mDisk Usage.......: \033[0;37mYou\47re using "$1"B in "$2}'
fi
# Display Processes
if [ "$process" != "0" ] ; then
  # (The 2 at end of the next two lines can be used to subtract out any 'offset')
  psa=$((`ps -A h | wc -l`-2))
  psu=$((`ps U $USER h | wc -l`-2))
  verb="are"
  if [ "$psu" -lt "2" ] ; then
    if [ "$psu" -eq "0" ] ; then
    psu=None
    else
    verb="is"
    fi
  fi
  echo "\033[0;36mProcesses........: \033[0;37m$psu of the $psa running $verb yours."
  echo
fi
# Display SSH Logins; System Uptime; System Load
if [ "$LogLoad" != "0" ] ; then
  LogLoad=`uptime`
  echo "\033[0;36mBootup           : \033[0;37m$BOOT"
  # Display System Uptime
  echo $LogLoad | grep -Eo 'up .+ user' \
  | sed -e 's/:/ hours /' -e 's/ min//' -re 's/^up\s+/\x1b[0;36mUptime...........:\x1b[0;37m /' \
  | sed -re 's/,\s+[0-9]+ user$/ minutes/' -e 's/,//g' -e 's/00 minutes//' \
  | sed -re 's/0([1-9] minutes)/\1/' -e 's/(1 hour)s/\1/' -e 's/(1 minute)s/\1/'
  # Display System Load
  echo $LogLoad | grep -Eo 'average: .+' \
  | sed -e 's/average:/\x1b[0;36mLoad.............:\x1b[0;37m/' -e 's/,//g' \
  | awk '{print $1, $2" (1 minute) "$3" (5 minutes) "$4" (15 minutes)"}'
  # Display SSH Logins
  echo $LogLoad | grep -Eo '[0-9]+ users?' \
  | awk '{print "\033[0;36mSSH Logins.......: \033[0;37m"$1, $2" currently logged in."}'
fi
# last login
lastlog -u $USER | tail -1 | awk '{print "\033[0;36mLast Login.......: \033[0;37m"$4, $5, $6, $7" from "$3}'
# Display Weather
if [ "$weather" != "0" ] ; then
  weather=`curl -s http://rss.accuweather.com/rss/liveweather_rss.asp\?TEMP\=${TEMP}\&locCode\=$LOCCOD \
  | grep -E '<description>(Currently|High)' \
  | sed -e 's/.*<description>\(.*\)/\1/' -e 's/\(.*\) &lt.*/\1/' -e 's/\(°\)//'`
  if [ "`echo "$weather" | wc -l`" -eq "3" ] ; then
    echo
    echo "\033[0;35mWeather..........: \033[0;37m`echo "$weather" | head -1`"
    echo "\033[0;35mToday............: \033[0;37m`echo "$weather" | head -2 | tail -1`"
    echo "\033[0;35mTomorrow.........: \033[0;37m`echo "$weather" | tail -1`"
  fi
fi
echo

Weather

#!/bin/sh

METRIC=0  # 0 for F, 1 for C
# Find your own code at the end of the url here http://www.accuweather.com/rss-center.asp
# If code has a space; replace with %20 
LOCCOD="95113"  #Example: ASI|RU|RS055|NIZHNY%20NOVGOROD

if [ -z $1 ] && [ -x $LOCCOD ] ; then
        echo
        echo "USAGE: $0 [locationcode]"
        echo
        exit 0;
elif [ ! -z $1 ] ; then
        LOCCOD=$1
fi

curl -s http://rss.accuweather.com/rss/liveweather_rss.asp\?metric\=${METRIC}\&locCode\=$LOCCOD \
| sed -n '/Currently:/ s/.*: \(.*\): \([0-9]*\)\([CF]\).*/\2°\3, \1/p'

A Log Checking Utility

Here is a simple script that displays all of the file updates and additions made to your hda and the date they happened. It simply reads the hda-updates.log file and parses out only the relevant changes.

I use this script periodically so I can see what might have changed recently.

Installation

Log into your hda and create a bin directory under your home directory (if you don't already have one). The reason for this is that ~/bin is already in your $PATH when you log in, so it will automatically find any scripts you put there:

   cd /usr/bin

Open up your favorite editor (I suggest gedit for this) and copy the code that follows into the editor. Save the file as hda-updates (or whatever you want to name it) and exit the editor.

Code:

#!/usr/bin/python
#
# Dump update information from /var/log/hda-updates.log
#!/usr/bin/python
#
# Display the date and files that were modified/installed.
#
# Reads the hda-updates log file and parses out just the file updates/additions.
# It helps to see what has been modified and when.
#
# radioz
# 11/8/2010
#

log = '/var/log/hda-updates.log'

f = open(log, 'r')
lines = f.readlines()
f.close()

gotUpdates = False
firstUpdate = False
dateInfo = ''
for ll in lines :
	l = ll.strip()
	# Ignore dependency heading
	if l == 'Installing for dependencies:' :
		continue
	if l == '' :
		# A blank line terminates the updates for a particular date
		if gotUpdates :
			# Display a blank line between dates
			print
			gotUpdates = False
		continue
	if gotUpdates :
		if firstUpdate :
			# Display the date above the first update
			print '%s:' % dateInfo
			firstUpdate = False
		# Reformat the file info slightly
		updateInfo = l.split()
		print '    %-16s %-6s %-20s %-16s %-5s %s' % (tuple(updateInfo))
	if 'hda update attempt' in l :
		# This header appears once per hour in the log. Very few represent real updates.
		# Save the date information in case this is a real update.
		dateInfo = ' '.join(l.split()[5:])
	if 'Updating:' in l :
		# This is a real update, set up the flags
		gotUpdates = True
		firstUpdate = True

Make the file executable:

   chmod +x hda-updates

Now you can run it.

Example

   hda-updates

Here is a snippet of its output on my system:

Sat Sep 4 15:02:32 PDT 2010:
   hdactl           i386   3.5.1-1              amahi            218   k
Sat Oct 30 22:02:14 PDT 2010:
   hda-greyhole     i386   0.6.28-1             amahi            47    k
   hda-platform     noarch 5.6-1                amahi            1.0   M
   hdactl           i386   3.6-1                amahi            218   k
Sun Nov 7 20:01:29 PST 2010:
   hda-platform     noarch 5.6-8                amahi            1.0   M