I don't want background process to eat all my CPU. I know how to find out CPU utilization but how do I limit the cpu usage of a process under Linux operating system? How do I force a process to limit itself to 25% only?
You can use cpulimit program that attempts to limit the cpu usage of a process. Limits are expressed in percentage and not in cpu time. cpulimit does not act on the nice value or other scheduling priority stuff, but on the real cpu usage. Also, it is able to adapt itself to the overall system load, dynamically and quickly.
Install cpulimit
Type the following commands to install latest stable release:
# cd /tmp
# wget 'http://downloads.sourceforge.net/cpulimit/cpulimit-1.1.tar.gz'
# tar cpulimit-1.1.tar.gz
# cd cpulimit-1.1
# make
# cp cpulimit /usr/local/sbin/
# rm -rf cpulimit*
A note about Debian / Ubuntu Linux users
Type the following command to install cpulimit:
$ sudo apt-get update
$ sudo apt-get install cpulimit
How do I use cpulimit?
To limit CPU usage of the process called firefox to 30%, enter:
# cpulimit -e firefox -l 30
To limit CPU usage of the process to 30% by using its PID, enter:
# cpulimit -p 1313 -l 30
To find out PID of the process use any of the following:
# ps aux | less
# ps aux | grep firefox
# pgrep -u vivek php-cgi
# pgrep lighttpd
You can also use absolute path name of the executable, enter:
# cpulimit -P /opt/firefox/firebox -l 30
Where,
* -p : Process PID.
* -e : Process name.
* -l : percentage of CPU allowed from 0 to 100.
* -P: absolute path name of the executable program file.
Root vs Normal User Account
From the project webpage:
cpulimit should run at least with the same user running the controlled process. But it is much better if you run cpulimit as root, in order to have a higher priority and a more precise control.
A Note About SMP (Multicore / MultiCpu) Systems
Again quoting from the project webpage:
If your machine has one processor you can limit the percentage from 0% to 100%, which means that if you set for example 50%, your process cannot use more than 500 ms of cpu time for each second. But if your machine has four processors, percentage may vary from 0% to 400%, so setting the limit to 200% means to use no more than half of the available power. In any case, the percentage is the same of what you see when you run top.
Related Throttling Utilities
1. ionice utility - Avoid sudden outburst of backup shell script / program disk I/O.
2. Limit disk I/O for rsync tool.
3. Linux nice command: Run Process With Modified Scheduling Priority ( nicenesses )
4. renice command: Change the Priority of a Already Running Process
Red Hat, Fedora, Gnome, KDE, MySQL, PostgreSQL, PostGIS, Slony, Zarafa, Scalix, SugarCRM, vtiger, CITADEL,OpenOffice, LibreOffice,Wine, Apache, hadoop, Nginx Drupla, Joomla, Jboss, Wordpress, WebGUI, Tomcat, TiKi WiKi, Wikimedia, SpamAssassin, ClamAV, OpenLDAP, OTRS, RT, Samba, Cyrus, Dovecot, Exim, Postfix, sendmail, Amanda, Bacula, DRBD, Heartbeat, Keepalived, Nagios, Zabbix, Zenoss,
Thursday, October 15, 2009
LAMP Server Step by Step
LAMP is short for Linux, Apache, MySQL, PHP. This tutorial shows how you can install an Apache2 webserver on an OpenSUSE 11.1 server with PHP5 support (mod_php) and MySQL support.
I do not issue any guarantee that this will work for you!
1 Preliminary Note
In this tutorial I use the hostname server1.example.com with the IP address 192.168.0.100. These settings might differ for you, so you have to replace them where appropriate.
2 Installing MySQL 5.0
First we install MySQL 5.0 like this:
yast2 -i mysql mysql-client
Then we create the system startup links for MySQL (so that MySQL starts automatically whenever the system boots) and start the MySQL server:
chkconfig --add mysql
/etc/init.d/mysql start
To secure the MySQL installation, run:
mysql_secure_installation
Now you will be asked several questions:
server1:~ # mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): <-- ENTER OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n] <-- Y New password: <-- fill in your desired MySQL root password Re-enter new password: <-- confirm that password Password updated successfully! Reloading privilege tables.. ... Success! By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] <-- Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] <-- Y ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] <-- Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] <-- Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL! server1:~ # Now your MySQL setup should be secured. 3 Installing Apache2 Apache2 is available as an OpenSUSE package, therefore we can install it like this: yast2 -i apache2 Now configure your system to start Apache at boot time... chkconfig --add apache2 ... and start Apache: /etc/init.d/apache2 start http://i33.tinypic.com/2u6ikwo.jpg Now direct your browser to http://192.168.0.100, and you should see the Apache2 placeholder page (don't worry about the 403 error, this happens because there's no index file (e.g. index.html) in the document root directory): Apache's default document root is /srv/www/htdocs/ on OpenSUSE, and the configuration file is /etc/apache2/httpd.conf. Additional configurations are stored in the /etc/apache2/conf.d/ directory. 4 Installing PHP5 We can install PHP5 and the Apache PHP5 module as follows: yast2 -i apache2-mod_php5 We must restart Apache afterwards: /etc/init.d/apache2 restart 5 Testing PHP5 / Getting Details About Your PHP5 Installation The document root of the default web site is /srv/www/htdocs/. We will now create a small PHP file (info.php) in that directory and call it in a browser. The file will display lots of useful details about our PHP installation, such as the installed PHP version. vi /srv/www/htdocs/info.php
Now we call that file in a browser (e.g. http://192.168.0.100/info.php):
http://i34.tinypic.com/p402g.jpg
As you see, PHP5 is working, and it's working through the Apache 2.0 Handler, as shown in the Server API line. If you scroll further down, you will see all modules that are already enabled in PHP5. MySQL is not listed there which means we don't have MySQL support in PHP5 yet.
6 Getting MySQL Support In PHP5
To get MySQL support in PHP, we can install the php5-mysql package. It's a good idea to install some other PHP5 modules as well as you might need them for your applications:
yast2 -i php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dbase php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-ncurses php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm
Now restart Apache2:
/etc/init.d/apache2 restart
Now reload http://192.168.0.100/info.php in your browser and scroll down to the modules section again. You should now find lots of new modules there, including the MySQL module:
http://i37.tinypic.com/np2qg0.jpg
7 phpMyAdmin
phpMyAdmin is a web interface through which you can manage your MySQL databases.
phpMyAdmin can be installed as follows:
cd /srv/www/htdocs
wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.2.2/phpMyAdmin-3.2.2-all-languages.tar.gz?use_mirror=dfn
tar xvfz phpMyAdmin-3.2.2-all-languages.tar.gz
mv phpMyAdmin-3.2.2-all-languages phpmyadmin
Afterwards, you can access phpMyAdmin under http://192.168.0.100/phpmyadmin/:
http://i38.tinypic.com/15hykyc.jpg
8 Links
* Apache: http://httpd.apache.org/
* PHP: http://www.php.net/
* MySQL: http://www.mysql.com/
* OpenSUSE: http://www.opensuse.org/
* phpMyAdmin: http://www.phpmyadmin.net/
I do not issue any guarantee that this will work for you!
1 Preliminary Note
In this tutorial I use the hostname server1.example.com with the IP address 192.168.0.100. These settings might differ for you, so you have to replace them where appropriate.
2 Installing MySQL 5.0
First we install MySQL 5.0 like this:
yast2 -i mysql mysql-client
Then we create the system startup links for MySQL (so that MySQL starts automatically whenever the system boots) and start the MySQL server:
chkconfig --add mysql
/etc/init.d/mysql start
To secure the MySQL installation, run:
mysql_secure_installation
Now you will be asked several questions:
server1:~ # mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): <-- ENTER OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n] <-- Y New password: <-- fill in your desired MySQL root password Re-enter new password: <-- confirm that password Password updated successfully! Reloading privilege tables.. ... Success! By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] <-- Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] <-- Y ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] <-- Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] <-- Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL! server1:~ # Now your MySQL setup should be secured. 3 Installing Apache2 Apache2 is available as an OpenSUSE package, therefore we can install it like this: yast2 -i apache2 Now configure your system to start Apache at boot time... chkconfig --add apache2 ... and start Apache: /etc/init.d/apache2 start http://i33.tinypic.com/2u6ikwo.jpg Now direct your browser to http://192.168.0.100, and you should see the Apache2 placeholder page (don't worry about the 403 error, this happens because there's no index file (e.g. index.html) in the document root directory): Apache's default document root is /srv/www/htdocs/ on OpenSUSE, and the configuration file is /etc/apache2/httpd.conf. Additional configurations are stored in the /etc/apache2/conf.d/ directory. 4 Installing PHP5 We can install PHP5 and the Apache PHP5 module as follows: yast2 -i apache2-mod_php5 We must restart Apache afterwards: /etc/init.d/apache2 restart 5 Testing PHP5 / Getting Details About Your PHP5 Installation The document root of the default web site is /srv/www/htdocs/. We will now create a small PHP file (info.php) in that directory and call it in a browser. The file will display lots of useful details about our PHP installation, such as the installed PHP version. vi /srv/www/htdocs/info.php
Now we call that file in a browser (e.g. http://192.168.0.100/info.php):
http://i34.tinypic.com/p402g.jpg
As you see, PHP5 is working, and it's working through the Apache 2.0 Handler, as shown in the Server API line. If you scroll further down, you will see all modules that are already enabled in PHP5. MySQL is not listed there which means we don't have MySQL support in PHP5 yet.
6 Getting MySQL Support In PHP5
To get MySQL support in PHP, we can install the php5-mysql package. It's a good idea to install some other PHP5 modules as well as you might need them for your applications:
yast2 -i php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dbase php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-ncurses php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm
Now restart Apache2:
/etc/init.d/apache2 restart
Now reload http://192.168.0.100/info.php in your browser and scroll down to the modules section again. You should now find lots of new modules there, including the MySQL module:
http://i37.tinypic.com/np2qg0.jpg
7 phpMyAdmin
phpMyAdmin is a web interface through which you can manage your MySQL databases.
phpMyAdmin can be installed as follows:
cd /srv/www/htdocs
wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.2.2/phpMyAdmin-3.2.2-all-languages.tar.gz?use_mirror=dfn
tar xvfz phpMyAdmin-3.2.2-all-languages.tar.gz
mv phpMyAdmin-3.2.2-all-languages phpmyadmin
Afterwards, you can access phpMyAdmin under http://192.168.0.100/phpmyadmin/:
http://i38.tinypic.com/15hykyc.jpg
8 Links
* Apache: http://httpd.apache.org/
* PHP: http://www.php.net/
* MySQL: http://www.mysql.com/
* OpenSUSE: http://www.opensuse.org/
* phpMyAdmin: http://www.phpmyadmin.net/
Wednesday, October 14, 2009
Linux System Info
#!/bin/sh
# This script was written by Rajat Patel.
# This is the script is the result of joint effort of Rajat Patel
# You can contact the author at
# THIS IS A INTERACTIVE PROGRAM TO DISPLAY YOUR SYSTEM INFORMATION.
# TYPE ./sysinfo --help FOR OPTIONS
# THE WHOLE SCRIPT CAN BE BROADLY DIVIDED INTO 3 MODULES -
###################################################################################################################
# MODULE 1:- #
# THIS IS RESPONSIBLE FOR CLEAN UP JOBS AND ALSO PERFORMS EXCEPTION HANDLING. #
###################################################################################################################
# CLEANUP CLEANS THE TEMPORARY FILE(S) CREATED
cleanup(){
rm -f "$TEMP" 2>> "$TMPLOG"
rm -f "$CHOICE" 2>> "$TMPLOG"
if [ `cat "$TMPLOG" | wc -l` -gt 0 ]
then
printerr 4 1
else
rm -f "$TMPLOG"
fi
if [ -d "$SYSINFODIR" ] && [ `ls -al "$SYSINFODIR" | wc -l` -le 4 ]
then
rm -fr "$SYSINFODIR"
fi
}
# QUIT FUNCTION IS CALLED IF THE SCRIPT IS KILLED PREMATURELY DURING EXECUTION IT SIMPLY PERFORMS CLEANUP
quit(){
cleanup
if [ -z $@ ]
then
clear
fi
exit 2
}
# INIT INITITALIZES THE VARIABLE AND THE ENVIRONMENT
init(){
script_name="$0"
VERSION=2.3
OLD_PATH=`echo $PATH`
PATH=$PATH:/sbin:/usr/sbin
SYSINFODIR="$HOME/S&M-Sysinfo"
TEMP="${SYSINFODIR}/sysinfo.tmp"
ERRLOG="${SYSINFODIR}/sysinfo_err.log"
TMPLOG="${SYSINFODIR}/sysinfo.log"
CHOICE="${SYSINFODIR}/sysinfo_choice.tmp"
DATE=`date '+%Y.%m.%d'`
SAVEINFO="${SYSINFODIR}/sysinfo.out.${DATE}"
ERRORSTRING="NULL"
TRIVIALCODE="1"
TITLE=""
if [ -z "$*" ]
then
if [ -f "$SYSINFODIR" ]
then
cat "$SYSINFODIR" >> "${SYSINFODIR}.old"
rm -f "$SYSINFODIR" 2> /dev/null
fi
if [ -d "$SYSINFODIR" ]
then
echo > /dev/null
else
mkdir "$SYSINFODIR"
echo -e "This folder $SYSINFODIR was created by the program $0\n\n" >> "${SYSINFODIR}/README"
echo -e 'S&M Sysinfo, Sysinfo by Rajat!!' >> "${SYSINFODIR}/README"
echo -e "sysinfo Version $VERSION" >> "${SYSINFODIR}/README"
echo -e "Author -- Rajat Patel, Yeswedeal" >> "${SYSINFODIR}/README"
echo -e "Copyright (C) 2009 Rajat Patel" >> "${SYSINFODIR}/README"
echo -e "This is free software distributed under the terms of GPL\n\n\n\n\n" >> "${SYSINFODIR}/README"
fi
if [ -f "$TMPLOG" ]
then
cat "$TMPLOG" >> "${TMPLOG}.old"
rm -f "$TMPLOG"
fi
if [ -f "$TEMP" ] || [ -f "$CHOICE" ]
then
rm -f "$TEMP"
fi
if [ -f "$CHOICE" ]
then
rm -f "$CHOICE"
fi
echo -e "\nInitializing Graphical Mode... Successful\n\nPress OK to continue.\n(Press 'Esc' and click 'OK' to enter text mode)" > $TEMP
dialog --title "GUI TEST" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72 2> /dev/null
if [ "$?" -eq 0 ]
then
gui_support=y
else
gui_support=n
clear
echo -e "\nInitializing Graphical Mode... Failed!!\nThis can even happen if you press Esc during initialization of graphical mode.\nThe program will run in text mode\n\n"
echo "Press Enter to continue...."
read
fi
fi
}
# PRINTERR IS FOR TAKING THE NECESSARY ACTION IF AN ERROR OCCURS. IT PRINTS AN ERROR MESSAGE DEPENDING ON
# THE FIRST ARGUMENT AND THEN EITHER EXITS AFTER GENERATING A BUG REPORT AFTER GETTING PERMISSION FROM THE
# USER RUNNING THE SCRIPT WITHIN THE USER'S HOME DIRECTORY UNDER THE NAME "bug_report_sysinfo" OR SIMPLY
# RETURNS TO THE POINT WHERE THE EXCEPTION OCCURED DEPENDING UPON THE SECOND ARGUMENT.
printerr(){
case "$1" in
"1")
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\n\Z1Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nIt seems that the proc filesystem is not enabled in the kernel - Run script after enabling it.If it is enabled then it may not be mounted - Run script after mounting it. If it is mounted then you do not have enough permissions to retrieve information from it - Run the script as root." 19 72
else
echo -e "\nSorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nIt seems that the proc filesystem is not enabled in the kernel - Run script after enabling it.If it is enabled then it may not be mounted - Run script after mounting it. If it is mounted then you do not have enough permissions to retrieve information from it - Run the script as root."
echo -e "\nPress Enter to continue..."
read
fi
;;
"2")
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --colors --msgbox "\n\Z1Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nEither your system does not support showing the details you are looking for or you do not have enough permissions to do that. If you are not root try runnig the script with root priviledge." 19 72
else
echo -e "\nSorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nEither your system does not support showing the details you are looking for or you do not have enough permissions to do that. If you are not root try runnig the script with root priviledge."
echo -e "\nPress Enter to continue..."
read
fi
;;
"3")
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --colors --msgbox "\Z1Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nIt seems you do not have enough permissions. Try runnig the script with root priviledge." 19 72
else
echo -e "Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nIt seems you do not have enough permissions. Try runnig the script with root priviledge."
echo -e "\nPress Enter to continue..."
read
fi
;;
"4")
echo -e "\n\n------------------------------------------------------------" >> "$TMPLOG"
echo -e "Above Error Report Genenrated on:- " >> "$TMPLOG"
date >> "$TMPLOG"
echo -e "********************\n\n\n\n" >> "$TMPLOG"
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1ERROR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\Z1A log file -- $TMPLOG was created. This happened because I faced some problem during my execution. If you suspect a bug, report it to the author at sending him the log file alongwith." 19 72
else
echo -e "A log file -- $TMPLOG was created. This happened because I faced some problem during my execution. If you suspect a bug, report it to the author at sending him the log file alongwith."
echo -e "\nPress Enter to continue..."
read
fi
;;
"5")
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --colors --msgbox "\n\Z1Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nYour system does not support showing the details you are looking for." 19 72
else
echo -e "\nSorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nYour system does not support showing the details you are looking for."
echo -e "\nPress Enter to continue..."
read
fi
;;
*)
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1ERROR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\n\n\Z1It seems someone has modified this script. Please do not report bug to author. Instead try and contact the person/media/website/agency from where you got this script." 19 72
else
echo -e "\n\nIt seems someone has modified this script. Please do not report bug to author. Instead try and contact the person/media/website/agency from where you got this script."
echo -e "\nPress Enter to continue..."
read
fi
;;
esac
if [ "$2" = "0" ] && [ "$ERRORSTRING" != "NULL" ]
then
if [ "$gui_support" = "y" ]
then
dialog --colors --title "\Z1BUG REPORT GENERATOR" --backtitle "Author - Rajat Patel, Yeswedeal" --yesno "\Z1If the mentioned steps did not solve your problem then report a bug to the author. Send the bug report that is automatically generated by this script along with your system information. However do not care to report a bug if:- \nyou do not want this script to generate the bug report. Or you are running this script in a non Linux operating system. This script is written for Linux only.\nReport bugs to the author at rajat@Yeswedeal.com\n\nA bug report will be generated -- $ERRLOG. If it already exists, it will won't get overwritten, it will be appended \nMake sure you have write permission in your home directory before pressing yes\nShould this script generate a bug report? " 19 72
if [ "$?" = "0" ]
then
create_bug_report=y
fi
else
echo -e "If the mentioned steps did not solve your problem then report a bug to the author. Send the bug report that is automatically generated by this script along with your system information. However do not care to report a bug if:- \nyou do not want this script to generate the bug report. Or you are running this script in a non Linux operating system. This script is written for Linux only.\nReport bugs to the author at rajat@Yeswedeal.com\n\nA bug report will be generated -- $ERRLOG. If it already exists, it will won't get overwritten, it will be appended \nMake sure you have write permission in your home directory before typing \'y\'\nShould this script generate a bug report? (y/n) ..."
read create_bug_report
fi
if [ "$create_bug_report" = 'y' ]
then
if [ "$gui_support" = "y" ]
then
dialog --colors --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "\Z1Generating Bug Report.\nPlease wait...\n(This may take a long time)" 9 45
else
echo -e "\n\nGenerating Bug Report.(This may take a long time)\nPlease Wait..."
fi
echo -e "\n\n------------------------------------------------------------\n" >> $ERRLOG
echo -ne "\nError Report Generated on:- " >> $ERRLOG
date >> $ERRLOG
echo -e "\n\nScript Output:-\n\n" >> $ERRLOG
$script_name -a >> $ERRLOG 2>> $ERRLOG
echo -e "\n\n------------------------------------------------------------\n\n" >> $ERRLOG
echo "Error_code: $1" >> $ERRLOG
bug_report_gen=$?
if [ "$bug_report_gen" != "0" ] && [ "$gui_support" = "y" ]
then
dialog --title "ERROR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nI faced some problem. Bug report was not generated.\n" 15 65
return
fi
if [ "$bug_report_gen" != "0" ] && [ "$gui_support" = "y" ]
then
echo -e "\nI faced some problem. Bug report was not generated.\n"
echo -e "Press Enter to continue..."
read
return
fi
case "$3" in
"proc")
echo -e "\nRoot Directory:\n " >> $ERRLOG
ls -l / >> $ERRLOG 2>> $ERRLOG
echo -e "\nProc Directory:\n " >> $ERRLOG
ls /proc -lR >> $ERRLOG 2>> $ERRLOG
echo -e "\n" >> $ERRLOG
;;
"passwd")
echo -e "\netc Directory:\n" >> $ERRLOG
ls -lR /etc/ >> $ERRLOG 2>> $ERRLOG
echo -e "\n\npasswd:\n" >> $ERRLOG
cat /etc/passwd >> $ERRLOG 2>> $ERRLOG
echo -e "\n" >> $ERRLOG
;;
"group")
echo -e "\netc Directory:\n" >> $ERRLOG
ls -lR /etc/ >> $ERRLOG 2>> $ERRLOG
echo -e "\n\ngroup:\n" >> $ERRLOG
cat /etc/group >> $ERRLOG 2>> $ERRLOG
echo -e "\n" >> $ERRLOG
;;
*)
echo -e "\n Trying to execute -- $3 \n" >> $ERRLOG
$3 >> $ERRLOG 2>> $ERRLOG
echo -e "\n" >> $ERRLOG
;;
esac
if [ "$bug_report_gen" = "0" ] && [ "$gui_support" = "y" ]
then
dialog --title "BUG REPORT GENERATOR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nBug report generated: $ERRLOG\n" 15 65
return
else
echo -e "\nBug report generated: $ERRLOG\n"
echo -e "\nPress Enter to continue..."
read
fi
return
fi
if [ "$create_bug_report" != "y" ] && [ "$gui_support" = "y" ]
then
dialog --title "BUG REPORT GENERATOR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nBug report was not generated\nAborted by user.\n" 15 65
return
else
echo -e "\nBug report was not generated\nAborted by user.\n"
echo -e "\nPress Enter to continue..."
read
fi
fi
}
#FOR SAVING TO DISK
save(){
echo -e "---------------------------------------------------------------------------" >> "$SAVEINFO"
echo -ne " Following information saved on : " >> "$SAVEINFO"
date >> "$SAVEINFO"
echo -e "---------------------------------------------------------------------------\n" >> "$SAVEINFO"
cat "$TEMP" >> "$SAVEINFO"
echo -e "############################################################################\n\n" >> "$SAVEINFO"
}
#THIS SHOWS THE EXIT MESSAGE.
exit_msg(){
if [ "$gui_support" = 'y' ]
then
dialog --clear --title "THANK YOU FOR USING THIS PROGRAM" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nsysinfo Version $VERSION\nCopyright (C) 2009 Rajat Patel\nThis is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\nAuthors:-\nRajat Patel" 15 62
else
clear
echo -e "\n\n\t\t THANK YOU FOR USING THIS PROGRAM\n\n"
echo -e "\nsysinfo Version $VERSION\nCopyright (C) 2009 Rajat Patel\nThis is free software; see the source for copying conditions.\nThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\n\nAuthors:-\nRajat Patel"
echo -e "\nPress Enter to exit...."
read
fi
}
# END OF MODULE 1
#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
####################################################################################################################
# MODULE 2:- #
#IT IS THIS PART WHICH IS ACTUALLY RESPONSIBLE FOR DISPLAYING ALL THE INFORMATION. #
####################################################################################################################
#***********************************************#
# SUBMODULE A:- #
# THIS SUBMODULE DISPLAYS THE USER INFORMATION. #
#***********************************************#
# THIS IS FOR PRINTING THE LIST OF ALL THE USERS IN THE HOST MACHINE
usertot(){
if [ ! -r /etc/passwd ]
then
echo -e "ERROR : username of all the users is not available"
TITLE='ERROR - USERNAME NOT RETRIEVABLE'
TRIVIALCODE=0
ERRORSTRING="passwd"
return 3
fi
TITLE="USER INFORMATION"
if [ `awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf "%s\n", $1 ; }' /etc/passwd | wc -l` -eq 0 ] then echo -e "\n\nNO ORDINARY USERS FOUND!!" return fi echo " ****************************************" echo -e " ==::List of Users in The Local Host::==" echo " ****************************************" echo -e "*********************************************************************" echo -e "\n Username Full Name Home Login Shell" echo -e "*********************************************************************" awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf " %-10s %-18s %-16s %-9s \n", $1, $5, $6, $7 }' /etc/passwd echo "*********************************************************************" echo -e "\n" return 0 } # THIS PRINTS OUT INFORMATION OF ALL THE USERS LOGGED IN THE HOST MACHINE userlog(){ type who > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : User information is not available.\nSomething is terribly wrong with your system."
TITLE='ERROR - USER INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="who"
return 5
else
who > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : User information is not available.\nSomething is terribly wrong with your system."
TITLE='ERROR - CONFIGURATION INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="who"
return 2
fi
fi
TITLE="USERS LOGGED IN"
echo -e " *****************************************"
echo -e " ==::List of Users Currently Logged in::=="
echo -e " *****************************************"
echo " ***************************************************"
echo ' USERNAME TERMINAL TIME LOGGED IN'
echo " ***************************************************"
who | awk '{ printf " %-18s %-9s %s\n", $1, $2, $5 ; }'
echo -e " ***************************************************\n"
whoami | awk '{ printf " Your Username is : %s\n", $1 ; }'
who am i | awk '{printf " You are Working in Terminal : %s \n\n\n", $2 ; }'
return 0
}
# THIS PRINTS OUT THE DETAIL OF THE USER INTERACTIVELY
userdetail(){
TITLE="DETAIL OF USER $1"
username="$@"
finger -p "$username" > "$TEMP" 2> /dev/null
grep Login "$TEMP" > /dev/null 2>&1
if [ $? -eq 0 ]
then
strln=`echo -e "\nDetails of User $username:-" |wc -m`
echo -e "\nDetails of User $username:-" > "$TEMP"
while [ "$strln" != "2" ]
do
echo -n "*"
strln=`expr $strln - 1`
done >> "$TEMP"
echo -e "\n" >> "$TEMP"
finger -p "$username" >> "$TEMP"
echo >> "$TEMP"
return 0
else
echo -e "\n\n\n\t\tUser $username could not be found!!" >> "$TEMP"
echo -e "\n\n\t\tPlease Enter a valid username." >> "$TEMP"
return 1
fi
return 0
}
groupinfo(){
if [ ! -r /etc/group ]
then
echo -e "ERROR : groupname not available"
TITLE='ERROR - GROUP INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="group"
return 3
fi
TITLE="GROUP INFORMATION"
echo -e " **************************"
echo -e " ==::GROUPS INFORMATION::=="
echo -e " **************************\n"
echo -e " *******************************"
echo -e " GROUPS GROUP ID"
echo -e " *******************************"
cat /etc/group | awk -F: '{ printf " %-15s %7s\n", $1, $3 }'
echo -e " *******************************"
echo -e "\n"
return 0
}
#*************************************************#
# SUBMODULE B:- #
# THIS SUBMODULE DISPLAYS THE SYSTEM INFORMATION. #
#*************************************************#
# THIS FUNCTION DISPLAYS HARDWARE INFORMATION LIKE CPU INFO AND MEMORY INFO.
hwdinfo(){
if [ ! -r /proc/cpuinfo ] && [ ! -r /proc/meminfo ]
then
echo -e "ERROR : Hardware information is not available. Maybe some problem with proc."
TRIVIALCODE=0
ERRORSTRING="proc"
TITLE='ERROR - HARDWARE INFORMATION NOT AVAILABLE'
return 1
fi
TITLE="BASIC HARDWARE INFORMATION"
echo -e "**********************************"
echo -e "==::BASIC HARDWARE INFORMATION::=="
echo -e "**********************************"
echo -e "\nCPU INFORMATION:-"
echo -e "*****************"
cpu_count=`cat /proc/cpuinfo | grep processor | wc -l`
count=1
while [ $count -le $cpu_count ]
do
cat /proc/cpuinfo | sed -n -e '/processor/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/vendor/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/model/p' | head -n $count | tail -n 1
echo -n "cpu MHz :" | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/cpu/p' | sed -n '/Hz/p' | awk -F : '{ printf "%s\n", $2 ; }' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/cpu family/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/cache/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/step/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/flags/p' | head -n $count | tail -n 1
echo -en "cpu architecture: "
uname -m
echo
count=`expr $count + 1`
done
echo -e "MEMORY:-"
echo -e "********"
echo -en "Total System Memory :"
cat /proc/meminfo | sed -n -e '/MemTotal/p' | awk '{ printf "%s %s\n", $2, $3 ; }'
echo -en "Total Swap Memory :"
cat /proc/meminfo | sed -n -e '/SwapTotal/p' | awk '{ printf "%s %s\n", $2, $3 ; }'
if [ "`cat /etc/X11/* 2> /dev/null | grep -A 3 [mM]onitor | wc -l`" != "0" ]
then
echo -e "\nMONITOR INFORMATION:-"
echo -e "*********************"
for fileX11 in /etc/X11/*
do
if [ ! -L $fileX11 ] && [ -f $fileX11 ]
then
cat $fileX11
fi
done 2> /dev/null | grep -A 5 [mM]onitor | sed '/[sS]ection/d' | grep [I]dentif | tail -n 1
for fileX11 in /etc/X11/*
do
if [ ! -L $fileX11 ] && [ -f $fileX11 ]
then
cat $fileX11
fi
done 2> /dev/null | grep -A 5 [mM]onitor | sed '/[sS]ection/d' | grep [mM]odel | tail -n 1
for fileX11 in /etc/X11/*
do
if [ ! -L $fileX11 ] && [ -f $fileX11 ]
then
cat $fileX11
fi
done 2> /dev/null | grep -A 5 [mM]onitor | sed '/[sS]ection/d' | grep [Vv]endor | sed '/Monitor Vendor/d' | tail -n 1
fi
echo -e "\nIDE Drives:-"
echo -e "************"
if [ "`dmesg 2> /dev/null | sed -n -e '/[hs]d[a-z]:/p' | sed -n -e '/drive/p' | sed -e '/[cC]ache/d' -e '/driver/d' -e '/[Ee]rror/d' | wc -l`" != "0" ]
then
dmesg | sed -n -e '/[hs]d[a-z]:/p' | sed -n -e '/drive/p' | sed -e '/[cC]ache/d' -e '/driver/d' -e '/[Ee]rror/d'
else
if [ "`cat /var/log/dmesg 2> /dev/null | sed -n -e '/[hs]d[a-z]:/p' | sed -n -e '/drive/p' | sed -e '/[cC]ache/d' -e '/driver/d' -e '/[Ee]rror/d' -e '/disk/d' | wc -l`" != "0" ]
then
cat /var/log/dmesg | sed -n -e '/[hs]d[a-z]:/p' | sed -n -e '/drive/p' | sed -e '/[cC]ache/d' -e '/driver/d' -e '/[Ee]rror/d' -e '/disk/d'
else
cat /proc/ide/hd[a-z]/model
fi
fi
if [ "`cat /proc/scsi/scsi 2>> /dev/null | grep -A 1 '[vV]endor'| wc -l`" != "0" ]
then
echo -e "\nSCSI Devices:-"
echo -e "**************"
cat /proc/scsi/scsi | grep -A 1 '[vV]endor'
fi
echo -e "\n"
return 0
}
# THIS ONE PRINTS THE BASIC CONFIGURATION INFO. LIKE OS, KERNEL VERSION ETC.
configinfo(){
type uname > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Configuration information is not available."
TITLE='ERROR - CONFIGURATION INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="uname"
return 5
else
uname > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Configuration information is not available."
TITLE='ERROR - CONFIGURATION INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="uname"
return 3
fi
fi
TITLE="CONFIGURATION INFORMATION"
echo -e " ***********************************************"
echo -e " ==::BASIC SYSTEM CONFIGURATION INFORMATION::== "
echo -e " ***********************************************"
echo -en " System OS : "
uname -s
echo -en " Release : "
for i in /etc/*[rv]e[lr][es][ai][so][en]
do
if [ -L "$i" ]
then
echo > /dev/null
else
cat "$i"
fi
done 2> /dev/null | sed '/LSB/d' | head -n 1
echo -en " Kernel Version : "
uname -r
echo -en " Hostname : "
uname -n
grep ':initdefault' /etc/inittab 1> /dev/null
if [ "$?" -eq 0 ]
then
echo -en " Default Runlevel : "
grep ':initdefault' /etc/inittab | sed 's/:/ /g' | awk '{ printf "%s\n", $2 ; }'
fi
runlevel > /dev/null 2>> /dev/null
if [ "$?" -eq 0 ]
then
echo -en " Current Runlevel : "
runlevel | awk '{ printf "%s\n", $2 ; }'
echo -en " Previous Runlevel : "
runlevel | awk '{ printf "%s\n", $1 ; }'
fi
gcc -v 1> /dev/null 2>&1
if [ "$?" = "0" ] && [ `gcc --version | grep 'gcc' | awk '{ printf "%s\n", $3 ; }' | wc -l` -eq 1 ]
then
echo -ne " GCC Version : "
gcc --version | grep 'gcc' | awk '{ printf "%s\n", $3 ; }'
else
echo -e " GCC : Not Installed"
fi
echo -n " Boot Loader(s) Installed : "
if [ -f /boot/grub/menu.lst ] || [ -f /etc/lilo.conf ]
then
if [ -f /boot/grub/menu.lst ]
then
echo -n "GRUB"
fi
if [ -f /boot/grub/menu.lst ] && [ -f /etc/lilo.conf ]
then
echo -n ", "
fi
if [ -f /etc/lilo.conf ]
then
echo -n "LILO"
fi
else
echo -n "Could not determine"
fi
echo -e "\n\n"
return 0
}
# THIS ONE PRINTS THE DISKDRIVE INFORMATION LIKE LISTING OUT PARTITIONS AND FILESYSTEM.
hddinfo(){
if [ ! -r /proc/partitions ]
then
echo -e "ERROR : Disk drive information is not available. Maybe some problem with proc."
TITLE='ERROR - DISK DRIVE INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="proc"
return 1
fi
TITLE="DISK DRIVE INFORMATION"
echo -e "******************************"
echo -e "==::DISK DRIVE INFORMATION::=="
echo -e "******************************"
if [ "`cat /proc/partitions 2> /dev/null | wc -l`" != "0" ]
then
echo -e "\nList of Partitions (includes even unmounted partitions, if any) :-"
echo -e "******************************************************************"
cat /proc/partitions | grep [a-z]d[a-z][1-9][0-9]* | awk '{ printf "%s\n", $4 }'
echo -e "******************************************************************\n"
fi
echo -e "Mounted Filesystems :-"
echo -e "**********************"
mount > /dev/null 2>&1
if [ "$?" != 0 ]
then
echo -e "\nINFORMATION NOT AVAILABLE!!\n"
else
echo -e "********************************************************************************"
printf "%-15s %-20s %-15s %-5s\n" "PARTITION" "MOUNTED ON" "FILESYSTEM" "REMARK"
echo -e "********************************************************************************"
mount | sed -n '/dev/p' | sed -e '/proc/d' -e '/none/d' -e '/shm/d' -e '/pts/d' | awk '{ printf "%-15s %-20s %-15s %-5s\n", $1,$3,$5,$6 ; } '
echo -e "********************************************************************************\n"
fi
echo -e "Disk Drive Usage :-"
echo -e "******************"
df > /dev/null 2>&1
if [ "$?" != 0 ]
then
echo -e "\nINFORMATION NOT AVAILABLE!!\n"
else
echo -e "**********************************************************************"
printf "%-12s %-20s %5s %5s %5s %5s\n" "PARTITION" "MOUNTED ON" "SIZE" "USED" "AVAIL" "%USED"
echo -e "**********************************************************************"
df -h | sed -n '/dev/p' | sed -e '/none/d' -e '/shm/d' -e '/pts/d' | awk '{ printf "%-12s %-20s %5s %5s %5s %5s\n",$1,$6,$2,$3,$4,$5 ; }'
echo -e "**********************************************************************\n\n"
fi
return 0
}
# THIS LISTS OUT THE PCI DEVICES, CONTROLLERS AND BRIDGES ETC.
pciinfo(){
type lspci > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : PCI information is not available."
TITLE='ERROR - PCI INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING='find / | grep lspci'
return 5
else
lspci > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : PCI information is not available."
TITLE='ERROR - PCI INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING='lspci'
return 3
fi
fi
TITLE="PCI INFORMATION"
echo -e "*******************************"
echo -e "==::PCI Buses and Devices ::=="
echo -e "*******************************"
echo -e "\nGraphics Card :-"
echo "****************"
lspci | grep VGA | awk -F: '{ print $3 $4 }'
echo -e "\nSound Card :-"
echo "*************"
lspci | grep '[sS]ound' | awk -F: '{ print $3 $4 }'
lspci | grep '[aA][uU][dD][iI][oO]' | awk -F: '{ print $3 $4 }'
if [ "`lspci | grep 'USB' | awk -F: '{ print $3 $4 }'| wc -l`" != "0" ]
then
echo -e "\nUSB Controller :-"
echo "*****************"
lspci | grep 'USB' | awk -F: '{ print $3 $4 }'
fi
if [ "`lspci | grep 'IDE' | awk -F: '{ print $3 $4 }'| wc -l`" != "0" ]
then
echo -e "\nIDE Controller :-"
echo "*****************"
lspci | grep 'IDE' | awk -F: '{ print $3 $4 }'
fi
if [ "`lspci | grep 'FireWire' | awk -F: '{ print $3 $4 }'| wc -l`" != "0" ]
then
echo -e "\nFireWire Controller :-"
echo "**********************"
lspci | grep 'FireWire' | awk -F: '{ print $3 $4 }'
fi
if [ "`lspci | grep 'I/O' | awk -F: '{ print $3 $4 }'| wc -l`" != "0" ]
then
echo -e "\nI/O Controller :-"
echo "*****************"
lspci | grep 'I/O' | awk -F: '{ print $3 $4 }'
fi
echo -e "\nOther PCI Controller/Bridge/Device :-"
echo "*************************************"
lspci | sed -e '/[sS]ound/d' -e '/I\/O/d' -e '/VGA/d' -e '/[aA][uU][dD][iI][oO]/d' -e '/USB/d' -e '/IDE/d' -e '/FireWire/d' | awk -F: '{ print $3 $4 }'
echo -e "\n"
return 0
}
# AND THIS ONE PRINTS OUT THE MEMORY INFORMATION
meminfo(){
if [ ! -r /proc/meminfo ]
then
echo -e "ERROR : Memory information is not available. Maybe some problem with proc."
TITLE='ERROR - MEMORY INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="proc"
return 1
fi
TITLE="MEMORY INFORMATION"
echo -e " ***************************"
echo -e " ==::System Memory Usage::=="
echo -e " ***************************"
echo -en "\n Total System Memory : "
cat /proc/meminfo | sed -n -e '/MemTotal:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Total Swap Memory : "
cat /proc/meminfo | sed -n -e '/SwapTotal:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Free System Memory : "
cat /proc/meminfo | sed -n -e '/MemFree:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Free Swap Memory : "
cat /proc/meminfo | sed -n -e '/SwapFree:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Cached Memory : "
cat /proc/meminfo | sed -n -e '/Cached:/p' | sed -e '/[sS]wap[cC]ached:/d'| awk '{ printf "%7s %s", $2, $3 }'
echo -en "\n Cached Swap Memory : "
cat /proc/meminfo | sed -n -e '/SwapCached:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Active : "
cat /proc/meminfo | sed -n -e '/Active:/p' | sed -e '/Inactive:/d' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Inactive : "
cat /proc/meminfo | sed -n -e '/Inactive:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n High Total : "
cat /proc/meminfo | sed -n -e '/HighTotal:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n High Free : "
cat /proc/meminfo | sed -n -e '/HighFree:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Low Total : "
cat /proc/meminfo | sed -n -e '/LowTotal:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Low Free : "
cat /proc/meminfo | sed -n -e '/LowFree:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Dirty : "
cat /proc/meminfo | sed -n -e '/Dirty:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Write Back : "
cat /proc/meminfo | sed -n -e '/Writeback:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Mapped : "
cat /proc/meminfo | sed -n -e '/Mapped:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Page Tables : "
cat /proc/meminfo | sed -n -e '/PageTables:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Swap Partition : "
cat /proc/swaps | sed -n -e '/dev/p' | awk '{ printf " %s ", $1 }'
echo -e "\n\n"
return 0
}
# TO VIEW ALL THE RUNNING PROCESSES IN THE HOST MACHINE, THIS FUNCTION IS USED
procinfo(){
type ps > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Processes information is not available."
TITLE='ERROR - PROCESSES INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="ps"
return 5
else
ps > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Processes information is not available."
TITLE='ERROR - PROCESSES INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="ps"
return 3
fi
fi
TITLE="PROCESSES INFORMATION"
echo -e " ***********************************"
echo -e " ==::CURRENTLY RUNNING PROCESSES::=="
echo -e " ***********************************"
ps aux
echo -e "\n"
return 0
}
# TO VIEW MOTHERBOARD INFORMATION. YOU NEED ROOT PRIVILEDG FOR THIS.
mboardinfo(){
type dmidecode > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Advanced hardware information is not available.\nYour System does not support showing this information."
TITLE='ERROR - ADVANCED HARDWARE INFORMATION NOT AVAILABLE'
TRIVIALCODE=1
return 5
else
dmidecode > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Advanced hardware information is not available.\nRun the script with root priviledge."
TITLE='ERROR - ADVANCED HARDWARE INFORMATION NOT AVAILABLE'
TRIVIALCODE=1
return 3
fi
fi
TITLE="ADVANCED HARDWARE INFORMATION"
echo -e "\t ***********************************"
echo -e "\t ==::ADVANCED SYSTEM INFORMATION::=="
echo -e "\t ***********************************\n"
echo -e "\t\tBIOS Information :-"
echo -e "\t\t*******************"
if [ "`dmidecode | grep -A5 -e 'BIOS Information' | sed '/BIOS Information/d' | wc -l`" != "0" ]
then
dmidecode | grep -A5 -e 'BIOS Information' | sed '/BIOS Information/d'
else
echo "Not Available"
fi
echo
echo -e "\n\n\t\tBase Board Information :-"
echo -e "\t\t*************************"
if [ "`dmidecode | grep -A4 -e 'Base Board Information' | sed '/Base Board Information/d' | wc -l`" != "0" ]
then
dmidecode | grep -A4 -e 'Base Board Information' | sed '/Base Board Information/d'
else
echo "Not Available"
fi
echo
if [ "`dmidecode | grep -A6 -e 'Chassis Information' | sed '/Chassis Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tChassis Information :-"
echo -e "\t\t*************************"
dmidecode | grep -A8 -e 'Chassis Information' | sed '/Chassis Information/d'
fi
echo
if [ "`dmidecode | grep -A7 -e 'Memory Controller Information' | sed '/Memory Controller Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tMemory Controller Information :-"
echo -e "\t\t********************************"
dmidecode | grep -A7 -e 'Memory Controller Information' | sed '/Memory Controller Information/d'
fi
echo
if [ "`dmidecode | grep -A7 -e 'Memory Module Information' | sed '/Memory Module Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tMemory Module Information :-"
echo -e "\t\t****************************"
dmidecode | grep -A7 -e 'Memory Module Information' | sed '/Memory Module Information/d'
fi
echo
echo -e "\n\n\t\tProcessor Information :-"
echo -e "\t\t************************"
cpu_count=`dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Family:' | wc -l`
count=1
if [ $cpu_count -eq 0 ]
then
echo "Not Available"
fi
while [ "$count" -le "$cpu_count" ]
do
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Socket Designation:' | head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Type:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Family:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Manufacturer:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'ID:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Signature:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Version:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Voltage:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Externel Clock:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Max Speed:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Current Speed:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'L1 Cache'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'L2 Cache'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'L3 Cache'| head -n $count | tail -n 1
count=`expr $count + 1`
if [ "$count" -le "$cpu_count" ]
then
echo "---"
fi
done
echo
echo -e "\n\n\t\tSystem Slot Information :-"
echo -e "\t\t**************************"
if [ "`dmidecode | grep -A5 -e 'System Slot Information' | sed '/System Slot Information/d' | wc -l`" != "0" ]
then
dmidecode | grep -A5 -e 'System Slot Information' | sed '/System Slot Information/d'
else
echo "Not Available"
fi
echo
echo -e "\n\n\t\tCache Information :-"
echo -e "\t\t********************"
if [ "`dmidecode | grep -A6 -e 'Cache Information' | sed '/Cache Information/d' | wc -l`" != "0" ]
then
dmidecode | grep -A6 -e 'Cache Information' | sed '/Cache Information/d'
else
echo "Not Available"
fi
echo
if [ "`dmidecode | grep -A3 -e 'On Board Device Information' | sed '/On Board Device Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tOn Board Device Information :-"
echo -e "\t\t****************************"
dmidecode | grep -A3 -e 'On Board Device Information' | sed '/On Board Device Information/d'
fi
echo
if [ "`dmidecode | grep -A5 -e 'Port Connector Information' | sed '/Port Connector Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tPort Connector Information :-"
echo -e "\t\t*****************************"
dmidecode | grep -A5 -e 'Port Connector Information' | sed '/Port Connector Information/d'
echo
fi
echo
return 0
}
# THIS DISPLAYS SERVICES INFORMATION
serviceinfo(){
type service > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Service information is not available.\nYour System does not support showing this information."
TITLE='ERROR - SERVICE INFORMATION NOT AVAILABLE'
TRIVIALCODE=1
return 5
fi
TITLE="SERVICE INFORMATION"
echo -e "*****************************"
echo -e "==::SERVICES INFORMATION ::=="
echo -e "*****************************\n"
echo -e "RUNNING SERVICES :-"
echo -e "*******************"
echo -ne "NONE\b\b\b\b"
service --status-all 2> /dev/null | grep running | sed '/not/d'
echo
echo -e "\nSTOPPED SERVICES :-"
echo -e "*******************"
echo -ne "NONE\b\b\b\b"
service --status-all 2> /dev/null | grep stopped
echo
echo -e "\nDISABLED SERVICES :-"
echo -e "*******************"
echo -ne "NONE\b\b\b\b"
service --status-all 2> /dev/null | grep disabled
echo -e "\n\n"
return 0
}
# THIS DISPLAYS NETWORK INFORMATION
networkinfo(){
type ifconfig > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Network information is not available.\nYour System does not support showing this information."
TITLE='ERROR - NETWORK INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING='ifconfig'
return 5
else
ifconfig > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Network information is not available.\nRun the script with root priviledge."
TITLE='ERROR - NETWORK INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING='ifconfig'
return 3
fi
fi
TITLE="NETWORK INFORMATION"
echo -e " ****************************"
echo -e " ==::NETWORK INFORMATION ::=="
echo -e " ****************************\n"
if [ `ifconfig -a | grep eth | wc -l` != "0" ]
then
neth=`ifconfig -a | grep eth | wc -l`
counteth=1
while [ $counteth -le $neth ]
do
count=`expr $counteth \* 4 - 1`
echo -ne "Ethernet Card : "
ifconfig -a | grep eth[0-9] | awk '{ print $1 }' | head -n $counteth | tail -n 1 | awk '{ printf "%s\n", $1 }'
echo -ne "Hardware Address : "
ifconfig -a | sed -n -e 's/.*HWaddr.//p' | head -n $counteth | tail -n 1 | awk '{ printf "%s\n", $1 }'
echo -ne "Inet Address : "
if [ `ifconfig -a | grep -A 2 eth | head -n $count | grep 'inet addr:' | tail -n 1 | sed -n -e 's/.*inet addr.//p' | sed -n -e 's/Bcast.*//p' | awk '{ printf "%s\n", $1 }' | wc -l` -eq 0 ]
then
echo -n -e "Not Applicable\n"
else
ifconfig -a | grep -A 2 eth | head -n $count | grep 'inet addr:' | tail -n 1 | sed -n -e 's/.*inet addr.//p' | sed -n -e 's/Bcast.*//p' | awk '{ printf "%s\n", $1 }'
fi
echo -ne "Broadcast Address : "
if [ `ifconfig -a | grep -A 2 eth | head -n $count| grep 'Bcast:' | tail -n 1 | sed -n -e 's/.*Bcast.//p' | sed -n -e 's/Mask.*//p' | awk '{ printf "%s\n", $1 }' | wc -l` -eq 0 ]
then
echo -n -e "Not Applicable\n"
else
ifconfig -a | grep -A 2 eth | head -n $count| grep 'Bcast:' | tail -n 1 | sed -n -e 's/.*Bcast.//p' | sed -n -e 's/Mask.*//p' | awk '{ printf "%s\n", $1 }'
fi
echo -ne "Mask : "
if [ `ifconfig -a | grep -A 2 eth | head -n $count | grep 'Mask:' | tail -n 1 | sed -n -e 's/.*Mask.//p' | awk '{ printf "%s\n", $1 }' | wc -l` -eq 0 ]
then
echo -n -e "Not Applicable\n"
else
ifconfig -a | grep -A 2 eth | head -n $count | grep 'Mask:' | tail -n 1 | sed -n -e 's/.*Mask.//p' | awk '{ printf "%s\n", $1 }'
fi
echo -e "\nRX/TX Packets Information :- "
echo
ifconfig -a | grep eth[0-9] -A 7 | head -n `expr $counteth + 7` | grep [RT]X
echo -e "\n\n"
counteth=`expr $counteth + 1`
done
else
echo -e "\nIT APPEARS THAT NO NETWORK CARD IS INSTALLED\n\n"
fi
return 0
}
# END OF MODULE 2
#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
####################################################################################################################
# MODULE 3:- #
# THIS MODULE DISPLAYS THE VARIOUS MENUS AND TAKES INPUTS FROM THE USER #
####################################################################################################################
# THIS DISPLAYS THE MENU FOR PRINTING USER INFORMATION
userinfo_menu(){
if [ "$gui_support" = 'y' ]
then
cancel_userinfo_menu=0
while [ "$cancel_userinfo_menu" != "1" ]
do
dialog --title "USER INFORMATION MENU" --backtitle "Author - Rajat Patel, Yeswedeal" --extra-button --extra-label "Save" --cancel-label "Back" --menu "\nSelect Any Item Below and then Press 'OK' to view information or 'Save' to Save it to disk:\n" 19 40 7 1 "List all users in host machine" 2 "Users currently logged in" 3 "Detail of a user" 4 "Group Information" 5 "Quit" 2> "$CHOICE"
cancel_userinfo_menu=$?
choice2=`cat $CHOICE`
if [ "$cancel_userinfo_menu" = "3" ]
then
case "$choice2" in
1)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
usertot > $TEMP 2>> $TMPLOG
if [ "$?" != "0" ]
then
printerr "$?" "$TRIVIALCODE" "$ERRORSTRING"
else
save
fi
;;
2)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
userlog > $TEMP 2>> $TMPLOG
save
;;
3)
type finger > /dev/null 2>&1
if [ "$?" -ne 0 ]
then
printerr 2 1
else
cancel_userdetail=0
while [ "$cancel_userdetail" != "1" ]
do
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --cancel-label "Back" --inputbox " `echo "Users :\n"; awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf "%s, ", $1 ; }' /etc/passwd` \n\nEnter a username to Save the Details to disk (or press Cancel to go back to previous menu):" 19 70 2> "$CHOICE"
cancel_userdetail=$?
username=`cat $CHOICE`
if [ -n "$username" ] && [ "$cancel_userdetail" = "0" ]
then
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
userdetail "$username"
if [ "$?" = "1" ]
then
dialog --title "USER NOT FOUND!!" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
else
save
fi
fi
done
fi
;;
4)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
groupinfo > $TEMP 2>> $TMPLOG
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
fi
;;
5)
exit_msg
quit
;;
esac
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
continue
fi
case "$choice2" in
1)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
usertot > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
2)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
userlog > "$TEMP" 2>> "$TMPLOG"
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 62
;;
3)
type finger > /dev/null 2>&1
if [ "$?" -ne 0 ]
then
printerr 2 1
else
cancel_userdetail=0
while [ "$cancel_userdetail" != "1" ]
do
dialog --title "USER DETAIL" --backtitle "Author - Rajat Patel, Yeswedeal" --cancel-label "Back" --inputbox " `echo "Users :\n"; awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf "%s, ", $1 ; }' /etc/passwd` \n\nEnter a username to View Details (or press Cancel to go back to previous menu):" 19 70 2> "$CHOICE"
cancel_userdetail=$?
username=`cat $CHOICE`
if [ -n "$username" ] && [ "$cancel_userdetail" = "0" ]
then
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
userdetail "$username"
dialog --title "USER DETAIL" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
done
fi
;;
4)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
groupinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 20 52
fi
;;
5)
exit_msg
quit
;;
esac
done
else
choice2=1
while [ -z "$choice2" ] || [ "$choice2" != "6" ]
do
clear
echo -e "\nAuthor - Rajat Patel, Yeswedeal\n\n"
echo -e "\n*******************************"
echo -e "==:: USER INFORMATION MENU ::=="
echo "*******************************"
echo "1) List all users in host machine"
echo "2) Users currently logged in"
echo "3) Information about a particular user"
echo "4) Group Information"
echo "5) Save All User Information to Disk"
echo "6) Back to previous menu"
echo -en "\nPlease Enter Your Choice (1-6): "
read choice2
case "$choice2" in
1)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
usertot > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
2)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
userlog > "$TEMP" 2>> "$TMPLOG"
clear
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
;;
3)
type finger > /dev/null 2>&1
if [ "$?" -ne 0 ]
then
clear
printerr 2 1
else
username=n
while [ "$username" != q ]
do
clear
echo "Users :"
awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf "%s, ", $1 ; }' /etc/passwd echo -e "\nEnter a Username to View Details" echo -n " (q to Return to Previous Menu) : " read username if [ -n "$username" ] && [ "$username" != "q" ] then echo -e "\n\nRetrieving Information." echo -n "Please wait..." userdetail "$username" clear more $TEMP echo -en "\nPress Enter to Continue..." read fi done fi ;; 4) echo -e "\n\nRetrieving Information." echo -n "Please wait..." groupinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
5)
echo -ne "\n\n\nSaving Information.\nPlease wait..."
main -uUg > $TEMP 2> /dev/null
save
echo -e "\n\nInformation Saved in File: $SAVEINFO"
echo -n "Press Enter to continue...."
read
;;
6)
return
;;
esac
done
fi
return 0
}
# THIS DISPLAYS THE MENU FOR PRINTING SYSTEM INFORMATION
systeminfo_menu(){
if [ "$gui_support" = 'y' ]
then
cancel_systeminfo_menu=0
while [ "$cancel_systeminfo_menu" != 1 ]
do
dialog --title "SYSTEM INFORMATION MENU" --backtitle "Author - Rajat Patel, Yeswedeal" --extra-button --extra-label "Save" --cancel-label "Back" --menu "\nSelect Any Item Below and then Press 'OK' to view information or 'Save' to Save it to disk:\n" 19 40 9 1 "Basic Hardware Information" 2 "Basic System Configuration" 3 "Diskdrive Information" 4 "PCI Information" 5 "Memory Usage" 6 "Running Processes" 7 "Advanced System Information" 8 "Services Information" 9 "Quit" 2> "$CHOICE"
cancel_systeminfo_menu=$?
choice1=`cat $CHOICE`
if [ "$cancel_systeminfo_menu" = "3" ]
then
case "$choice1" in
1)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
hwdinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
2)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
configinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
3)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
hddinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
4)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
pciinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
5)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
meminfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
6)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
procinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
7)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
mboardinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
8)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
serviceinfo > "$TEMP" 2> /dev/null
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
if [ `cat $TEMP | wc -l` -le 17 ]
then
printerr 2 1
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
fi
;;
9)
exit_msg
quit
;;
esac
continue
fi
case "$choice1" in
1)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
hwdinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
2)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
configinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
3)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
hddinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
4)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
pciinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
5)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
meminfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
6)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
procinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
7)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
mboardinfo > "$TEMP" 2>> $TMPLOG
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
8)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
serviceinfo > "$TEMP" 2>> $TMPLOG
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
if [ `cat $TEMP | wc -l` -le 17 ]
then
printerr 2 1
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
fi
;;
9)
exit_msg
quit
;;
esac
done
else
choice1=1
while [ -z "$choice1" ] || [ "$choice1" != "10" ]
do
clear
echo -e "\nAuthor - Rajat Patel, Yeswedeal\n\n"
echo -e "\n*********************************"
echo -e "==:: SYSTEM INFORMATION MENU ::=="
echo "*********************************"
echo "1) Basic Hardware Information"
echo "2) Basic System Configuration"
echo "3) Diskdrive Information"
echo "4) PCI Information"
echo "5) Memory Usage"
echo "6) Running Processes"
echo "7) Advanced System Information"
echo "8) Services Information"
echo "9) Save All System Information to Disk"
echo "10) Back to previous menu"
echo -en "\nEnter Your Choice (1-10): "
read choice1
case "$choice1" in
1)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
hwdinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
2)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
configinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
3)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
hddinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
4)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
pciinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
5)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
meminfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
6)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
procinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
7)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
mboardinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
8)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
serviceinfo > "$TEMP" 2>> $TMPLOG
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
if [ `cat $TEMP | wc -l` -le 17 ]
then
printerr 2 1
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
fi
;;
9)
echo -ne "\n\n\nSaving Information.\nPlease wait..."
main -dsHcmpDS > $TEMP 2>> $TMPLOG
save
echo -e "\n\nInformation Saved in File: $SAVEINFO"
echo -n "Press Enter to continue...."
read
;;
10)
return
;;
esac
done
fi
return 0
}
# THERE IS NO MENU FOR DISPLAYING NETWORK INFORMATION TILL NOW, BUT AS A STANDARD FOLLOWED IN THIS SCRIPT,
# I HAVE ADDED THIS FUNCTION HERE.
nwinfo_menu(){
if [ "$gui_support" = 'y' ]
then
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
networkinfo > "$TEMP" 2>> "$TMPLOG"
dialog --title "NETWORK INFORMATION" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 70
else
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
networkinfo > "$TEMP" 2>> "$TMPLOG"
clear
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
return 0
}
# THIS DISPLAYS THE MAIN MENU. THIS IS WHAT THE USER SEES WHEN HE RUNS THE SCRIPT WITHOUT ANY OPTION
# WHEN USED WITH AN OPTION, IT DISPLAYS THE NECESSARY INFO. AND EXITS.
main(){
if [ -z "$*" ]
then
if [ "$gui_support" = "y" ]
then
cancel_main=0
while [ "$cancel_main" != "1" ]
do
dialog --title "MAIN MENU" --backtitle "Author - Rajat Patel, Yeswedeal" --extra-button --extra-label "Save" --cancel-label "Exit" --menu "\nSelect Any Item Below and then Press 'OK' to view information or 'Save' to Save it to disk:\n" 19 38 5 1 "User Information" 2 "System Information" 3 "Network Information" 2> $CHOICE
cancel_main=$?
choice=`cat $CHOICE`
if [ "$cancel_main" = "3" ]
then
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
case "$choice" in
1)
main -uUg > $TEMP 2>> $TMPLOG
;;
2)
main -dsHcmpDS > $TEMP 2>> $TMPLOG
;;
3)
main -N > $TEMP 2>> $TMPLOG
;;
esac
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
continue
fi
case "$choice" in
1)
userinfo_menu
;;
2)
systeminfo_menu
;;
3)
nwinfo_menu
;;
esac
done
else
choice=1
while [ -z "$choice" ] || [ "$choice" != 5 ]
do
clear
echo -e "\nAuthor - Rajat Patel, Yeswedeal\n"
echo -e "\n***************"
echo -e "==:: MENU ::=="
echo "***************"
echo "1) User Information"
echo "2) System Information"
echo "3) Network Information"
echo "4) Save All Information to Disk"
echo "5) Exit"
echo -en "\nPlease Enter Your Choice (1-4): "
read choice
case "$choice" in
1)
userinfo_menu
;;
2)
systeminfo_menu
;;
3)
nwinfo_menu
;;
4)
echo -ne "\n\n\nSaving Information.\nPlease wait..."
main -a > $TEMP 2> /dev/null
save
echo -e "\n\nInformation Saved in File: $SAVEINFO"
echo -n "Press Enter to continue...."
read
;;
esac
done
fi
exit_msg
cleanup
clear
else #THIS IS FOR TAKING CARE OF OPTIONS
for param in "$@"
do
if [ "$param" = "--help" ] || [ "$param" = "-h" ]
then
echo -e 'S&M Sysinfo, Sysinfo by Manna & Sid!!'
echo -e "sysinfo Version $VERSION"
echo -e "Author -- Rajat Patel, Yeswedeal"
echo -e "Copyright (C) 2009 Rajat Patel"
echo -e "This is free software; see the source for copying conditions."
echo -e "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE"
echo -e "\nUsage: sysinfo [OPTION]..."
echo -e "A textmode graphical utility for displaying system information"
echo -e "Run without options to enter graphical menu"
echo -e "\nOptions:"
echo -e "\t-h, --help display this help and exit"
echo -e "\t-v, --version display version and exit"
echo -e "\t-a, --all display all information in the following order"
echo -e "\t-u, --usertot display total users in host"
echo -e "\t-U, --userlog display users currently logged in"
echo -e "\t-g, --grpinfo display groups along with the GID"
echo -e "\t-d, --hardware display hardware information"
echo -e "\t-s, --sysconf display system configuration information"
echo -e "\t-H, --hdd display disk-drive information"
echo -e "\t-c, --pci display PCI information"
echo -e "\t-m, --mem display memory usage information"
echo -e "\t-p, --proc display currently running processs"
echo -e "\t-N, --nwinfo display network information"
echo -e "\t-D, --advhdw display advanced hardware information (needs root priviledge)"
echo -e "\t-S, --service display services information (may need root priviledge)\n"
echo -e "Report Bugs to "
exit 0
fi
if [ "$param" = "--version" ] || [ "$param" = "-v" ]
then
echo -e 'S&M Sysinfo, Sysinfo by Manna & Sid!!'
echo -e "sysinfo Version $VERSION"
echo -e "Author -- Rajat Patel, Yeswedeal"
echo -e "Copyright (C) 2009 Rajat Patel"
echo -e "This is free software; see the source for copying conditions."
echo -e "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE"
exit 0
fi
case "$param" in
--*)
;;
-*h*)
main -h
;;
-*v*)
main -v
;;
[^-]*)
echo -e "\nERROR: Does not take any arguments" 1>&2
echo -e "Try \"sysinfo --help\" for more information\n" 1>&2
exit 1
;;
-*[^ahdsuUgHcmpNDS]*)
echo -e "\nERROR: Unkown option -- \"$param\" " 1>&2
echo -e "Type \"sysinfo --help\" for more information\n" 1>&2
exit 1
;;
esac
done
echo
for param in "$@"
do
short=0
case "$param" in
"--all")
main -a
return
;;
"--usertot")
usertot
;;
"--userlog")
userlog
;;
"--grpinfo")
groupinfo
;;
"--hardware")
hwdinfo
;;
"--sysconf")
configinfo
;;
"--hdd")
hddinfo
;;
"--pci")
pciinfo
;;
"--mem")
meminfo
;;
"--proc")
procinfo
;;
"--nwinfo")
networkinfo
;;
"--advhdw")
mboardinfo
;;
"--service")
serviceinfo
;;
"--"*)
echo -e "ERROR: Unkown option -- \"$param\" " 1>&2
echo -e "Type \"sysinfo --help\" for more information\n" 1>&2
exit 1
;;
"-"*)
short=1
;;
esac
# THIS PART CHECKS FOR SHORT OPTIONS WHICH CAN EVEN BE COMBINED
# BELIEVE ME, THIS PART IS REAL TRICKY!!
# I AM STILL NOT SURE WHETHER THIS PART IS TOTALY BUG FREE
if [ "$short" -eq 1 ]
then
while [ "$param" != "-" ]
do
case "$param" in
-*a*)
main -uUgdsHcmpNDS
return
;;
esac
case "$param" in
-u*)
usertot
param=`echo "$param" | sed -n -e 's/u//p'`
;;
esac
case "$param" in
-U*)
userlog
param=`echo "$param" | sed -n -e 's/U//p'`
;;
esac
case "$param" in
-g*)
groupinfo
param=`echo "$param" | sed -n -e 's/g//p'`
;;
esac
case "$param" in
-d*)
hwdinfo
param=`echo "$param" | sed -n -e 's/d//p'`
;;
esac
case "$param" in
-s*)
configinfo
param=`echo "$param" | sed -n -e 's/s//p'`
;;
esac
case "$param" in
-H*)
hddinfo
param=`echo "$param" | sed -n -e 's/H//p'`
;;
esac
case "$param" in
-c*)
pciinfo
param=`echo "$param" | sed -n -e 's/c//p'`
;;
esac
case "$param" in
-m*)
meminfo
param=`echo "$param" | sed -n -e 's/m//p'`
;;
esac
case "$param" in
-p*)
procinfo
param=`echo "$param" | sed -n -e 's/p//p'`
;;
esac
case "$param" in
-N*)
networkinfo
param=`echo "$param" | sed -n -e 's/N//p'`
;;
esac
case "$param" in
-D*)
mboardinfo
param=`echo "$param" | sed -n -e 's/D//p'`
;;
esac
case "$param" in
-S*)
serviceinfo
param=`echo "$param" | sed -n -e 's/S//p'`
;;
esac
done
fi
done
fi
return "$?"
}
######################################################################################################################
##############******************** EXECUTION OF THE SCRIPT STARTS HERE ********************#######################
######################################################################################################################
# SIMPLY 3 STEPS:-
#STEP 1 :-
# INITITIALIZING THE ENVIRONMENT
trap "quit $1 ; " 1 2 3 7 9 11 15
init "$@"
# STEP 2 :-
# CALLING MAIN FUNCTIONS PASSING ALL THE ARGUMENTS ALONG WITH
trap "quit $1 ; " 1 2 3 7 9 11 15
main "$@"
# SETP 3 :-
# EXIT
exit 0
######################################################################################################################
###############******************** EXECUTION OF THE SCRIPT ENDS HERE *********************#######################
######################################################################################################################
# TYPE ./sysinfo --help FOR OPTIONS
# THE WHOLE SCRIPT CAN BE BROADLY DIVIDED INTO 3 MODULES -
###################################################################################################################
# MODULE 1:- #
# THIS IS RESPONSIBLE FOR CLEAN UP JOBS AND ALSO PERFORMS EXCEPTION HANDLING. #
###################################################################################################################
# CLEANUP CLEANS THE TEMPORARY FILE(S) CREATED
cleanup(){
rm -f "$TEMP" 2>> "$TMPLOG"
rm -f "$CHOICE" 2>> "$TMPLOG"
if [ `cat "$TMPLOG" | wc -l` -gt 0 ]
then
printerr 4 1
else
rm -f "$TMPLOG"
fi
if [ -d "$SYSINFODIR" ] && [ `ls -al "$SYSINFODIR" | wc -l` -le 4 ]
then
rm -fr "$SYSINFODIR"
fi
}
# QUIT FUNCTION IS CALLED IF THE SCRIPT IS KILLED PREMATURELY DURING EXECUTION IT SIMPLY PERFORMS CLEANUP
quit(){
cleanup
if [ -z $@ ]
then
clear
fi
exit 2
}
# INIT INITITALIZES THE VARIABLE AND THE ENVIRONMENT
init(){
script_name="$0"
VERSION=2.3
OLD_PATH=`echo $PATH`
PATH=$PATH:/sbin:/usr/sbin
SYSINFODIR="$HOME/S&M-Sysinfo"
TEMP="${SYSINFODIR}/sysinfo.tmp"
ERRLOG="${SYSINFODIR}/sysinfo_err.log"
TMPLOG="${SYSINFODIR}/sysinfo.log"
CHOICE="${SYSINFODIR}/sysinfo_choice.tmp"
DATE=`date '+%Y.%m.%d'`
SAVEINFO="${SYSINFODIR}/sysinfo.out.${DATE}"
ERRORSTRING="NULL"
TRIVIALCODE="1"
TITLE=""
if [ -z "$*" ]
then
if [ -f "$SYSINFODIR" ]
then
cat "$SYSINFODIR" >> "${SYSINFODIR}.old"
rm -f "$SYSINFODIR" 2> /dev/null
fi
if [ -d "$SYSINFODIR" ]
then
echo > /dev/null
else
mkdir "$SYSINFODIR"
echo -e "This folder $SYSINFODIR was created by the program $0\n\n" >> "${SYSINFODIR}/README"
echo -e 'S&M Sysinfo, Sysinfo by Rajat!!' >> "${SYSINFODIR}/README"
echo -e "sysinfo Version $VERSION" >> "${SYSINFODIR}/README"
echo -e "Author -- Rajat Patel, Yeswedeal" >> "${SYSINFODIR}/README"
echo -e "Copyright (C) 2009 Rajat Patel" >> "${SYSINFODIR}/README"
echo -e "This is free software distributed under the terms of GPL\n\n\n\n\n" >> "${SYSINFODIR}/README"
fi
if [ -f "$TMPLOG" ]
then
cat "$TMPLOG" >> "${TMPLOG}.old"
rm -f "$TMPLOG"
fi
if [ -f "$TEMP" ] || [ -f "$CHOICE" ]
then
rm -f "$TEMP"
fi
if [ -f "$CHOICE" ]
then
rm -f "$CHOICE"
fi
echo -e "\nInitializing Graphical Mode... Successful\n\nPress OK to continue.\n(Press 'Esc' and click 'OK' to enter text mode)" > $TEMP
dialog --title "GUI TEST" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72 2> /dev/null
if [ "$?" -eq 0 ]
then
gui_support=y
else
gui_support=n
clear
echo -e "\nInitializing Graphical Mode... Failed!!\nThis can even happen if you press Esc during initialization of graphical mode.\nThe program will run in text mode\n\n"
echo "Press Enter to continue...."
read
fi
fi
}
# PRINTERR IS FOR TAKING THE NECESSARY ACTION IF AN ERROR OCCURS. IT PRINTS AN ERROR MESSAGE DEPENDING ON
# THE FIRST ARGUMENT AND THEN EITHER EXITS AFTER GENERATING A BUG REPORT AFTER GETTING PERMISSION FROM THE
# USER RUNNING THE SCRIPT WITHIN THE USER'S HOME DIRECTORY UNDER THE NAME "bug_report_sysinfo" OR SIMPLY
# RETURNS TO THE POINT WHERE THE EXCEPTION OCCURED DEPENDING UPON THE SECOND ARGUMENT.
printerr(){
case "$1" in
"1")
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\n\Z1Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nIt seems that the proc filesystem is not enabled in the kernel - Run script after enabling it.If it is enabled then it may not be mounted - Run script after mounting it. If it is mounted then you do not have enough permissions to retrieve information from it - Run the script as root." 19 72
else
echo -e "\nSorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nIt seems that the proc filesystem is not enabled in the kernel - Run script after enabling it.If it is enabled then it may not be mounted - Run script after mounting it. If it is mounted then you do not have enough permissions to retrieve information from it - Run the script as root."
echo -e "\nPress Enter to continue..."
read
fi
;;
"2")
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --colors --msgbox "\n\Z1Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nEither your system does not support showing the details you are looking for or you do not have enough permissions to do that. If you are not root try runnig the script with root priviledge." 19 72
else
echo -e "\nSorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nEither your system does not support showing the details you are looking for or you do not have enough permissions to do that. If you are not root try runnig the script with root priviledge."
echo -e "\nPress Enter to continue..."
read
fi
;;
"3")
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --colors --msgbox "\Z1Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nIt seems you do not have enough permissions. Try runnig the script with root priviledge." 19 72
else
echo -e "Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nIt seems you do not have enough permissions. Try runnig the script with root priviledge."
echo -e "\nPress Enter to continue..."
read
fi
;;
"4")
echo -e "\n\n------------------------------------------------------------" >> "$TMPLOG"
echo -e "Above Error Report Genenrated on:- " >> "$TMPLOG"
date >> "$TMPLOG"
echo -e "********************\n\n\n\n" >> "$TMPLOG"
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1ERROR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\Z1A log file -- $TMPLOG was created. This happened because I faced some problem during my execution. If you suspect a bug, report it to the author at sending him the log file alongwith." 19 72
else
echo -e "A log file -- $TMPLOG was created. This happened because I faced some problem during my execution. If you suspect a bug, report it to the author at sending him the log file alongwith."
echo -e "\nPress Enter to continue..."
read
fi
;;
"5")
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --colors --msgbox "\n\Z1Sorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nYour system does not support showing the details you are looking for." 19 72
else
echo -e "\nSorry, I was unable to retrieve the required information from your system.\nPOSSIBLE CAUSE OF ERROR AND SOLUTION :-\nYour system does not support showing the details you are looking for."
echo -e "\nPress Enter to continue..."
read
fi
;;
*)
if [ "$gui_support" = 'y' ]
then
dialog --colors --title "\Z1ERROR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\n\n\Z1It seems someone has modified this script. Please do not report bug to author. Instead try and contact the person/media/website/agency from where you got this script." 19 72
else
echo -e "\n\nIt seems someone has modified this script. Please do not report bug to author. Instead try and contact the person/media/website/agency from where you got this script."
echo -e "\nPress Enter to continue..."
read
fi
;;
esac
if [ "$2" = "0" ] && [ "$ERRORSTRING" != "NULL" ]
then
if [ "$gui_support" = "y" ]
then
dialog --colors --title "\Z1BUG REPORT GENERATOR" --backtitle "Author - Rajat Patel, Yeswedeal" --yesno "\Z1If the mentioned steps did not solve your problem then report a bug to the author. Send the bug report that is automatically generated by this script along with your system information. However do not care to report a bug if:- \nyou do not want this script to generate the bug report. Or you are running this script in a non Linux operating system. This script is written for Linux only.\nReport bugs to the author at rajat@Yeswedeal.com\n\nA bug report will be generated -- $ERRLOG. If it already exists, it will won't get overwritten, it will be appended \nMake sure you have write permission in your home directory before pressing yes\nShould this script generate a bug report? " 19 72
if [ "$?" = "0" ]
then
create_bug_report=y
fi
else
echo -e "If the mentioned steps did not solve your problem then report a bug to the author. Send the bug report that is automatically generated by this script along with your system information. However do not care to report a bug if:- \nyou do not want this script to generate the bug report. Or you are running this script in a non Linux operating system. This script is written for Linux only.\nReport bugs to the author at rajat@Yeswedeal.com\n\nA bug report will be generated -- $ERRLOG. If it already exists, it will won't get overwritten, it will be appended \nMake sure you have write permission in your home directory before typing \'y\'\nShould this script generate a bug report? (y/n) ..."
read create_bug_report
fi
if [ "$create_bug_report" = 'y' ]
then
if [ "$gui_support" = "y" ]
then
dialog --colors --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "\Z1Generating Bug Report.\nPlease wait...\n(This may take a long time)" 9 45
else
echo -e "\n\nGenerating Bug Report.(This may take a long time)\nPlease Wait..."
fi
echo -e "\n\n------------------------------------------------------------\n" >> $ERRLOG
echo -ne "\nError Report Generated on:- " >> $ERRLOG
date >> $ERRLOG
echo -e "\n\nScript Output:-\n\n" >> $ERRLOG
$script_name -a >> $ERRLOG 2>> $ERRLOG
echo -e "\n\n------------------------------------------------------------\n\n" >> $ERRLOG
echo "Error_code: $1" >> $ERRLOG
bug_report_gen=$?
if [ "$bug_report_gen" != "0" ] && [ "$gui_support" = "y" ]
then
dialog --title "ERROR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nI faced some problem. Bug report was not generated.\n" 15 65
return
fi
if [ "$bug_report_gen" != "0" ] && [ "$gui_support" = "y" ]
then
echo -e "\nI faced some problem. Bug report was not generated.\n"
echo -e "Press Enter to continue..."
read
return
fi
case "$3" in
"proc")
echo -e "\nRoot Directory:\n " >> $ERRLOG
ls -l / >> $ERRLOG 2>> $ERRLOG
echo -e "\nProc Directory:\n " >> $ERRLOG
ls /proc -lR >> $ERRLOG 2>> $ERRLOG
echo -e "\n" >> $ERRLOG
;;
"passwd")
echo -e "\netc Directory:\n" >> $ERRLOG
ls -lR /etc/ >> $ERRLOG 2>> $ERRLOG
echo -e "\n\npasswd:\n" >> $ERRLOG
cat /etc/passwd >> $ERRLOG 2>> $ERRLOG
echo -e "\n" >> $ERRLOG
;;
"group")
echo -e "\netc Directory:\n" >> $ERRLOG
ls -lR /etc/ >> $ERRLOG 2>> $ERRLOG
echo -e "\n\ngroup:\n" >> $ERRLOG
cat /etc/group >> $ERRLOG 2>> $ERRLOG
echo -e "\n" >> $ERRLOG
;;
*)
echo -e "\n Trying to execute -- $3 \n" >> $ERRLOG
$3 >> $ERRLOG 2>> $ERRLOG
echo -e "\n" >> $ERRLOG
;;
esac
if [ "$bug_report_gen" = "0" ] && [ "$gui_support" = "y" ]
then
dialog --title "BUG REPORT GENERATOR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nBug report generated: $ERRLOG\n" 15 65
return
else
echo -e "\nBug report generated: $ERRLOG\n"
echo -e "\nPress Enter to continue..."
read
fi
return
fi
if [ "$create_bug_report" != "y" ] && [ "$gui_support" = "y" ]
then
dialog --title "BUG REPORT GENERATOR" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nBug report was not generated\nAborted by user.\n" 15 65
return
else
echo -e "\nBug report was not generated\nAborted by user.\n"
echo -e "\nPress Enter to continue..."
read
fi
fi
}
#FOR SAVING TO DISK
save(){
echo -e "---------------------------------------------------------------------------" >> "$SAVEINFO"
echo -ne " Following information saved on : " >> "$SAVEINFO"
date >> "$SAVEINFO"
echo -e "---------------------------------------------------------------------------\n" >> "$SAVEINFO"
cat "$TEMP" >> "$SAVEINFO"
echo -e "############################################################################\n\n" >> "$SAVEINFO"
}
#THIS SHOWS THE EXIT MESSAGE.
exit_msg(){
if [ "$gui_support" = 'y' ]
then
dialog --clear --title "THANK YOU FOR USING THIS PROGRAM" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nsysinfo Version $VERSION\nCopyright (C) 2009 Rajat Patel\nThis is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\nAuthors:-\nRajat Patel" 15 62
else
clear
echo -e "\n\n\t\t THANK YOU FOR USING THIS PROGRAM\n\n"
echo -e "\nsysinfo Version $VERSION\nCopyright (C) 2009 Rajat Patel\nThis is free software; see the source for copying conditions.\nThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\n\nAuthors:-\nRajat Patel"
echo -e "\nPress Enter to exit...."
read
fi
}
# END OF MODULE 1
#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
####################################################################################################################
# MODULE 2:- #
#IT IS THIS PART WHICH IS ACTUALLY RESPONSIBLE FOR DISPLAYING ALL THE INFORMATION. #
####################################################################################################################
#***********************************************#
# SUBMODULE A:- #
# THIS SUBMODULE DISPLAYS THE USER INFORMATION. #
#***********************************************#
# THIS IS FOR PRINTING THE LIST OF ALL THE USERS IN THE HOST MACHINE
usertot(){
if [ ! -r /etc/passwd ]
then
echo -e "ERROR : username of all the users is not available"
TITLE='ERROR - USERNAME NOT RETRIEVABLE'
TRIVIALCODE=0
ERRORSTRING="passwd"
return 3
fi
TITLE="USER INFORMATION"
if [ `awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf "%s\n", $1 ; }' /etc/passwd | wc -l` -eq 0 ] then echo -e "\n\nNO ORDINARY USERS FOUND!!" return fi echo " ****************************************" echo -e " ==::List of Users in The Local Host::==" echo " ****************************************" echo -e "*********************************************************************" echo -e "\n Username Full Name Home Login Shell" echo -e "*********************************************************************" awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf " %-10s %-18s %-16s %-9s \n", $1, $5, $6, $7 }' /etc/passwd echo "*********************************************************************" echo -e "\n" return 0 } # THIS PRINTS OUT INFORMATION OF ALL THE USERS LOGGED IN THE HOST MACHINE userlog(){ type who > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : User information is not available.\nSomething is terribly wrong with your system."
TITLE='ERROR - USER INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="who"
return 5
else
who > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : User information is not available.\nSomething is terribly wrong with your system."
TITLE='ERROR - CONFIGURATION INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="who"
return 2
fi
fi
TITLE="USERS LOGGED IN"
echo -e " *****************************************"
echo -e " ==::List of Users Currently Logged in::=="
echo -e " *****************************************"
echo " ***************************************************"
echo ' USERNAME TERMINAL TIME LOGGED IN'
echo " ***************************************************"
who | awk '{ printf " %-18s %-9s %s\n", $1, $2, $5 ; }'
echo -e " ***************************************************\n"
whoami | awk '{ printf " Your Username is : %s\n", $1 ; }'
who am i | awk '{printf " You are Working in Terminal : %s \n\n\n", $2 ; }'
return 0
}
# THIS PRINTS OUT THE DETAIL OF THE USER INTERACTIVELY
userdetail(){
TITLE="DETAIL OF USER $1"
username="$@"
finger -p "$username" > "$TEMP" 2> /dev/null
grep Login "$TEMP" > /dev/null 2>&1
if [ $? -eq 0 ]
then
strln=`echo -e "\nDetails of User $username:-" |wc -m`
echo -e "\nDetails of User $username:-" > "$TEMP"
while [ "$strln" != "2" ]
do
echo -n "*"
strln=`expr $strln - 1`
done >> "$TEMP"
echo -e "\n" >> "$TEMP"
finger -p "$username" >> "$TEMP"
echo >> "$TEMP"
return 0
else
echo -e "\n\n\n\t\tUser $username could not be found!!" >> "$TEMP"
echo -e "\n\n\t\tPlease Enter a valid username." >> "$TEMP"
return 1
fi
return 0
}
groupinfo(){
if [ ! -r /etc/group ]
then
echo -e "ERROR : groupname not available"
TITLE='ERROR - GROUP INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="group"
return 3
fi
TITLE="GROUP INFORMATION"
echo -e " **************************"
echo -e " ==::GROUPS INFORMATION::=="
echo -e " **************************\n"
echo -e " *******************************"
echo -e " GROUPS GROUP ID"
echo -e " *******************************"
cat /etc/group | awk -F: '{ printf " %-15s %7s\n", $1, $3 }'
echo -e " *******************************"
echo -e "\n"
return 0
}
#*************************************************#
# SUBMODULE B:- #
# THIS SUBMODULE DISPLAYS THE SYSTEM INFORMATION. #
#*************************************************#
# THIS FUNCTION DISPLAYS HARDWARE INFORMATION LIKE CPU INFO AND MEMORY INFO.
hwdinfo(){
if [ ! -r /proc/cpuinfo ] && [ ! -r /proc/meminfo ]
then
echo -e "ERROR : Hardware information is not available. Maybe some problem with proc."
TRIVIALCODE=0
ERRORSTRING="proc"
TITLE='ERROR - HARDWARE INFORMATION NOT AVAILABLE'
return 1
fi
TITLE="BASIC HARDWARE INFORMATION"
echo -e "**********************************"
echo -e "==::BASIC HARDWARE INFORMATION::=="
echo -e "**********************************"
echo -e "\nCPU INFORMATION:-"
echo -e "*****************"
cpu_count=`cat /proc/cpuinfo | grep processor | wc -l`
count=1
while [ $count -le $cpu_count ]
do
cat /proc/cpuinfo | sed -n -e '/processor/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/vendor/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/model/p' | head -n $count | tail -n 1
echo -n "cpu MHz :" | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/cpu/p' | sed -n '/Hz/p' | awk -F : '{ printf "%s\n", $2 ; }' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/cpu family/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/cache/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/step/p' | head -n $count | tail -n 1
cat /proc/cpuinfo | sed -n -e '/flags/p' | head -n $count | tail -n 1
echo -en "cpu architecture: "
uname -m
echo
count=`expr $count + 1`
done
echo -e "MEMORY:-"
echo -e "********"
echo -en "Total System Memory :"
cat /proc/meminfo | sed -n -e '/MemTotal/p' | awk '{ printf "%s %s\n", $2, $3 ; }'
echo -en "Total Swap Memory :"
cat /proc/meminfo | sed -n -e '/SwapTotal/p' | awk '{ printf "%s %s\n", $2, $3 ; }'
if [ "`cat /etc/X11/* 2> /dev/null | grep -A 3 [mM]onitor | wc -l`" != "0" ]
then
echo -e "\nMONITOR INFORMATION:-"
echo -e "*********************"
for fileX11 in /etc/X11/*
do
if [ ! -L $fileX11 ] && [ -f $fileX11 ]
then
cat $fileX11
fi
done 2> /dev/null | grep -A 5 [mM]onitor | sed '/[sS]ection/d' | grep [I]dentif | tail -n 1
for fileX11 in /etc/X11/*
do
if [ ! -L $fileX11 ] && [ -f $fileX11 ]
then
cat $fileX11
fi
done 2> /dev/null | grep -A 5 [mM]onitor | sed '/[sS]ection/d' | grep [mM]odel | tail -n 1
for fileX11 in /etc/X11/*
do
if [ ! -L $fileX11 ] && [ -f $fileX11 ]
then
cat $fileX11
fi
done 2> /dev/null | grep -A 5 [mM]onitor | sed '/[sS]ection/d' | grep [Vv]endor | sed '/Monitor Vendor/d' | tail -n 1
fi
echo -e "\nIDE Drives:-"
echo -e "************"
if [ "`dmesg 2> /dev/null | sed -n -e '/[hs]d[a-z]:/p' | sed -n -e '/drive/p' | sed -e '/[cC]ache/d' -e '/driver/d' -e '/[Ee]rror/d' | wc -l`" != "0" ]
then
dmesg | sed -n -e '/[hs]d[a-z]:/p' | sed -n -e '/drive/p' | sed -e '/[cC]ache/d' -e '/driver/d' -e '/[Ee]rror/d'
else
if [ "`cat /var/log/dmesg 2> /dev/null | sed -n -e '/[hs]d[a-z]:/p' | sed -n -e '/drive/p' | sed -e '/[cC]ache/d' -e '/driver/d' -e '/[Ee]rror/d' -e '/disk/d' | wc -l`" != "0" ]
then
cat /var/log/dmesg | sed -n -e '/[hs]d[a-z]:/p' | sed -n -e '/drive/p' | sed -e '/[cC]ache/d' -e '/driver/d' -e '/[Ee]rror/d' -e '/disk/d'
else
cat /proc/ide/hd[a-z]/model
fi
fi
if [ "`cat /proc/scsi/scsi 2>> /dev/null | grep -A 1 '[vV]endor'| wc -l`" != "0" ]
then
echo -e "\nSCSI Devices:-"
echo -e "**************"
cat /proc/scsi/scsi | grep -A 1 '[vV]endor'
fi
echo -e "\n"
return 0
}
# THIS ONE PRINTS THE BASIC CONFIGURATION INFO. LIKE OS, KERNEL VERSION ETC.
configinfo(){
type uname > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Configuration information is not available."
TITLE='ERROR - CONFIGURATION INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="uname"
return 5
else
uname > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Configuration information is not available."
TITLE='ERROR - CONFIGURATION INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="uname"
return 3
fi
fi
TITLE="CONFIGURATION INFORMATION"
echo -e " ***********************************************"
echo -e " ==::BASIC SYSTEM CONFIGURATION INFORMATION::== "
echo -e " ***********************************************"
echo -en " System OS : "
uname -s
echo -en " Release : "
for i in /etc/*[rv]e[lr][es][ai][so][en]
do
if [ -L "$i" ]
then
echo > /dev/null
else
cat "$i"
fi
done 2> /dev/null | sed '/LSB/d' | head -n 1
echo -en " Kernel Version : "
uname -r
echo -en " Hostname : "
uname -n
grep ':initdefault' /etc/inittab 1> /dev/null
if [ "$?" -eq 0 ]
then
echo -en " Default Runlevel : "
grep ':initdefault' /etc/inittab | sed 's/:/ /g' | awk '{ printf "%s\n", $2 ; }'
fi
runlevel > /dev/null 2>> /dev/null
if [ "$?" -eq 0 ]
then
echo -en " Current Runlevel : "
runlevel | awk '{ printf "%s\n", $2 ; }'
echo -en " Previous Runlevel : "
runlevel | awk '{ printf "%s\n", $1 ; }'
fi
gcc -v 1> /dev/null 2>&1
if [ "$?" = "0" ] && [ `gcc --version | grep 'gcc' | awk '{ printf "%s\n", $3 ; }' | wc -l` -eq 1 ]
then
echo -ne " GCC Version : "
gcc --version | grep 'gcc' | awk '{ printf "%s\n", $3 ; }'
else
echo -e " GCC : Not Installed"
fi
echo -n " Boot Loader(s) Installed : "
if [ -f /boot/grub/menu.lst ] || [ -f /etc/lilo.conf ]
then
if [ -f /boot/grub/menu.lst ]
then
echo -n "GRUB"
fi
if [ -f /boot/grub/menu.lst ] && [ -f /etc/lilo.conf ]
then
echo -n ", "
fi
if [ -f /etc/lilo.conf ]
then
echo -n "LILO"
fi
else
echo -n "Could not determine"
fi
echo -e "\n\n"
return 0
}
# THIS ONE PRINTS THE DISKDRIVE INFORMATION LIKE LISTING OUT PARTITIONS AND FILESYSTEM.
hddinfo(){
if [ ! -r /proc/partitions ]
then
echo -e "ERROR : Disk drive information is not available. Maybe some problem with proc."
TITLE='ERROR - DISK DRIVE INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="proc"
return 1
fi
TITLE="DISK DRIVE INFORMATION"
echo -e "******************************"
echo -e "==::DISK DRIVE INFORMATION::=="
echo -e "******************************"
if [ "`cat /proc/partitions 2> /dev/null | wc -l`" != "0" ]
then
echo -e "\nList of Partitions (includes even unmounted partitions, if any) :-"
echo -e "******************************************************************"
cat /proc/partitions | grep [a-z]d[a-z][1-9][0-9]* | awk '{ printf "%s\n", $4 }'
echo -e "******************************************************************\n"
fi
echo -e "Mounted Filesystems :-"
echo -e "**********************"
mount > /dev/null 2>&1
if [ "$?" != 0 ]
then
echo -e "\nINFORMATION NOT AVAILABLE!!\n"
else
echo -e "********************************************************************************"
printf "%-15s %-20s %-15s %-5s\n" "PARTITION" "MOUNTED ON" "FILESYSTEM" "REMARK"
echo -e "********************************************************************************"
mount | sed -n '/dev/p' | sed -e '/proc/d' -e '/none/d' -e '/shm/d' -e '/pts/d' | awk '{ printf "%-15s %-20s %-15s %-5s\n", $1,$3,$5,$6 ; } '
echo -e "********************************************************************************\n"
fi
echo -e "Disk Drive Usage :-"
echo -e "******************"
df > /dev/null 2>&1
if [ "$?" != 0 ]
then
echo -e "\nINFORMATION NOT AVAILABLE!!\n"
else
echo -e "**********************************************************************"
printf "%-12s %-20s %5s %5s %5s %5s\n" "PARTITION" "MOUNTED ON" "SIZE" "USED" "AVAIL" "%USED"
echo -e "**********************************************************************"
df -h | sed -n '/dev/p' | sed -e '/none/d' -e '/shm/d' -e '/pts/d' | awk '{ printf "%-12s %-20s %5s %5s %5s %5s\n",$1,$6,$2,$3,$4,$5 ; }'
echo -e "**********************************************************************\n\n"
fi
return 0
}
# THIS LISTS OUT THE PCI DEVICES, CONTROLLERS AND BRIDGES ETC.
pciinfo(){
type lspci > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : PCI information is not available."
TITLE='ERROR - PCI INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING='find / | grep lspci'
return 5
else
lspci > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : PCI information is not available."
TITLE='ERROR - PCI INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING='lspci'
return 3
fi
fi
TITLE="PCI INFORMATION"
echo -e "*******************************"
echo -e "==::PCI Buses and Devices ::=="
echo -e "*******************************"
echo -e "\nGraphics Card :-"
echo "****************"
lspci | grep VGA | awk -F: '{ print $3 $4 }'
echo -e "\nSound Card :-"
echo "*************"
lspci | grep '[sS]ound' | awk -F: '{ print $3 $4 }'
lspci | grep '[aA][uU][dD][iI][oO]' | awk -F: '{ print $3 $4 }'
if [ "`lspci | grep 'USB' | awk -F: '{ print $3 $4 }'| wc -l`" != "0" ]
then
echo -e "\nUSB Controller :-"
echo "*****************"
lspci | grep 'USB' | awk -F: '{ print $3 $4 }'
fi
if [ "`lspci | grep 'IDE' | awk -F: '{ print $3 $4 }'| wc -l`" != "0" ]
then
echo -e "\nIDE Controller :-"
echo "*****************"
lspci | grep 'IDE' | awk -F: '{ print $3 $4 }'
fi
if [ "`lspci | grep 'FireWire' | awk -F: '{ print $3 $4 }'| wc -l`" != "0" ]
then
echo -e "\nFireWire Controller :-"
echo "**********************"
lspci | grep 'FireWire' | awk -F: '{ print $3 $4 }'
fi
if [ "`lspci | grep 'I/O' | awk -F: '{ print $3 $4 }'| wc -l`" != "0" ]
then
echo -e "\nI/O Controller :-"
echo "*****************"
lspci | grep 'I/O' | awk -F: '{ print $3 $4 }'
fi
echo -e "\nOther PCI Controller/Bridge/Device :-"
echo "*************************************"
lspci | sed -e '/[sS]ound/d' -e '/I\/O/d' -e '/VGA/d' -e '/[aA][uU][dD][iI][oO]/d' -e '/USB/d' -e '/IDE/d' -e '/FireWire/d' | awk -F: '{ print $3 $4 }'
echo -e "\n"
return 0
}
# AND THIS ONE PRINTS OUT THE MEMORY INFORMATION
meminfo(){
if [ ! -r /proc/meminfo ]
then
echo -e "ERROR : Memory information is not available. Maybe some problem with proc."
TITLE='ERROR - MEMORY INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="proc"
return 1
fi
TITLE="MEMORY INFORMATION"
echo -e " ***************************"
echo -e " ==::System Memory Usage::=="
echo -e " ***************************"
echo -en "\n Total System Memory : "
cat /proc/meminfo | sed -n -e '/MemTotal:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Total Swap Memory : "
cat /proc/meminfo | sed -n -e '/SwapTotal:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Free System Memory : "
cat /proc/meminfo | sed -n -e '/MemFree:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Free Swap Memory : "
cat /proc/meminfo | sed -n -e '/SwapFree:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Cached Memory : "
cat /proc/meminfo | sed -n -e '/Cached:/p' | sed -e '/[sS]wap[cC]ached:/d'| awk '{ printf "%7s %s", $2, $3 }'
echo -en "\n Cached Swap Memory : "
cat /proc/meminfo | sed -n -e '/SwapCached:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Active : "
cat /proc/meminfo | sed -n -e '/Active:/p' | sed -e '/Inactive:/d' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Inactive : "
cat /proc/meminfo | sed -n -e '/Inactive:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n High Total : "
cat /proc/meminfo | sed -n -e '/HighTotal:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n High Free : "
cat /proc/meminfo | sed -n -e '/HighFree:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Low Total : "
cat /proc/meminfo | sed -n -e '/LowTotal:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Low Free : "
cat /proc/meminfo | sed -n -e '/LowFree:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Dirty : "
cat /proc/meminfo | sed -n -e '/Dirty:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Write Back : "
cat /proc/meminfo | sed -n -e '/Writeback:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Mapped : "
cat /proc/meminfo | sed -n -e '/Mapped:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Page Tables : "
cat /proc/meminfo | sed -n -e '/PageTables:/p' | awk '{ printf "%7s %s", $2, $3 ; }'
echo -en "\n Swap Partition : "
cat /proc/swaps | sed -n -e '/dev/p' | awk '{ printf " %s ", $1 }'
echo -e "\n\n"
return 0
}
# TO VIEW ALL THE RUNNING PROCESSES IN THE HOST MACHINE, THIS FUNCTION IS USED
procinfo(){
type ps > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Processes information is not available."
TITLE='ERROR - PROCESSES INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="ps"
return 5
else
ps > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Processes information is not available."
TITLE='ERROR - PROCESSES INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING="ps"
return 3
fi
fi
TITLE="PROCESSES INFORMATION"
echo -e " ***********************************"
echo -e " ==::CURRENTLY RUNNING PROCESSES::=="
echo -e " ***********************************"
ps aux
echo -e "\n"
return 0
}
# TO VIEW MOTHERBOARD INFORMATION. YOU NEED ROOT PRIVILEDG FOR THIS.
mboardinfo(){
type dmidecode > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Advanced hardware information is not available.\nYour System does not support showing this information."
TITLE='ERROR - ADVANCED HARDWARE INFORMATION NOT AVAILABLE'
TRIVIALCODE=1
return 5
else
dmidecode > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Advanced hardware information is not available.\nRun the script with root priviledge."
TITLE='ERROR - ADVANCED HARDWARE INFORMATION NOT AVAILABLE'
TRIVIALCODE=1
return 3
fi
fi
TITLE="ADVANCED HARDWARE INFORMATION"
echo -e "\t ***********************************"
echo -e "\t ==::ADVANCED SYSTEM INFORMATION::=="
echo -e "\t ***********************************\n"
echo -e "\t\tBIOS Information :-"
echo -e "\t\t*******************"
if [ "`dmidecode | grep -A5 -e 'BIOS Information' | sed '/BIOS Information/d' | wc -l`" != "0" ]
then
dmidecode | grep -A5 -e 'BIOS Information' | sed '/BIOS Information/d'
else
echo "Not Available"
fi
echo
echo -e "\n\n\t\tBase Board Information :-"
echo -e "\t\t*************************"
if [ "`dmidecode | grep -A4 -e 'Base Board Information' | sed '/Base Board Information/d' | wc -l`" != "0" ]
then
dmidecode | grep -A4 -e 'Base Board Information' | sed '/Base Board Information/d'
else
echo "Not Available"
fi
echo
if [ "`dmidecode | grep -A6 -e 'Chassis Information' | sed '/Chassis Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tChassis Information :-"
echo -e "\t\t*************************"
dmidecode | grep -A8 -e 'Chassis Information' | sed '/Chassis Information/d'
fi
echo
if [ "`dmidecode | grep -A7 -e 'Memory Controller Information' | sed '/Memory Controller Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tMemory Controller Information :-"
echo -e "\t\t********************************"
dmidecode | grep -A7 -e 'Memory Controller Information' | sed '/Memory Controller Information/d'
fi
echo
if [ "`dmidecode | grep -A7 -e 'Memory Module Information' | sed '/Memory Module Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tMemory Module Information :-"
echo -e "\t\t****************************"
dmidecode | grep -A7 -e 'Memory Module Information' | sed '/Memory Module Information/d'
fi
echo
echo -e "\n\n\t\tProcessor Information :-"
echo -e "\t\t************************"
cpu_count=`dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Family:' | wc -l`
count=1
if [ $cpu_count -eq 0 ]
then
echo "Not Available"
fi
while [ "$count" -le "$cpu_count" ]
do
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Socket Designation:' | head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Type:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Family:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Manufacturer:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'ID:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Signature:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Version:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Voltage:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Externel Clock:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Max Speed:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'Current Speed:'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'L1 Cache'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'L2 Cache'| head -n $count | tail -n 1
dmidecode | grep -A50 -e 'Processor Information' | sed '/Processor Information/d' | grep 'L3 Cache'| head -n $count | tail -n 1
count=`expr $count + 1`
if [ "$count" -le "$cpu_count" ]
then
echo "---"
fi
done
echo
echo -e "\n\n\t\tSystem Slot Information :-"
echo -e "\t\t**************************"
if [ "`dmidecode | grep -A5 -e 'System Slot Information' | sed '/System Slot Information/d' | wc -l`" != "0" ]
then
dmidecode | grep -A5 -e 'System Slot Information' | sed '/System Slot Information/d'
else
echo "Not Available"
fi
echo
echo -e "\n\n\t\tCache Information :-"
echo -e "\t\t********************"
if [ "`dmidecode | grep -A6 -e 'Cache Information' | sed '/Cache Information/d' | wc -l`" != "0" ]
then
dmidecode | grep -A6 -e 'Cache Information' | sed '/Cache Information/d'
else
echo "Not Available"
fi
echo
if [ "`dmidecode | grep -A3 -e 'On Board Device Information' | sed '/On Board Device Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tOn Board Device Information :-"
echo -e "\t\t****************************"
dmidecode | grep -A3 -e 'On Board Device Information' | sed '/On Board Device Information/d'
fi
echo
if [ "`dmidecode | grep -A5 -e 'Port Connector Information' | sed '/Port Connector Information/d' | wc -l`" != "0" ]
then
echo -e "\n\n\t\tPort Connector Information :-"
echo -e "\t\t*****************************"
dmidecode | grep -A5 -e 'Port Connector Information' | sed '/Port Connector Information/d'
echo
fi
echo
return 0
}
# THIS DISPLAYS SERVICES INFORMATION
serviceinfo(){
type service > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Service information is not available.\nYour System does not support showing this information."
TITLE='ERROR - SERVICE INFORMATION NOT AVAILABLE'
TRIVIALCODE=1
return 5
fi
TITLE="SERVICE INFORMATION"
echo -e "*****************************"
echo -e "==::SERVICES INFORMATION ::=="
echo -e "*****************************\n"
echo -e "RUNNING SERVICES :-"
echo -e "*******************"
echo -ne "NONE\b\b\b\b"
service --status-all 2> /dev/null | grep running | sed '/not/d'
echo
echo -e "\nSTOPPED SERVICES :-"
echo -e "*******************"
echo -ne "NONE\b\b\b\b"
service --status-all 2> /dev/null | grep stopped
echo
echo -e "\nDISABLED SERVICES :-"
echo -e "*******************"
echo -ne "NONE\b\b\b\b"
service --status-all 2> /dev/null | grep disabled
echo -e "\n\n"
return 0
}
# THIS DISPLAYS NETWORK INFORMATION
networkinfo(){
type ifconfig > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Network information is not available.\nYour System does not support showing this information."
TITLE='ERROR - NETWORK INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING='ifconfig'
return 5
else
ifconfig > /dev/null 2>&1
if [ "$?" != "0" ]
then
echo -e "ERROR : Network information is not available.\nRun the script with root priviledge."
TITLE='ERROR - NETWORK INFORMATION NOT AVAILABLE'
TRIVIALCODE=0
ERRORSTRING='ifconfig'
return 3
fi
fi
TITLE="NETWORK INFORMATION"
echo -e " ****************************"
echo -e " ==::NETWORK INFORMATION ::=="
echo -e " ****************************\n"
if [ `ifconfig -a | grep eth | wc -l` != "0" ]
then
neth=`ifconfig -a | grep eth | wc -l`
counteth=1
while [ $counteth -le $neth ]
do
count=`expr $counteth \* 4 - 1`
echo -ne "Ethernet Card : "
ifconfig -a | grep eth[0-9] | awk '{ print $1 }' | head -n $counteth | tail -n 1 | awk '{ printf "%s\n", $1 }'
echo -ne "Hardware Address : "
ifconfig -a | sed -n -e 's/.*HWaddr.//p' | head -n $counteth | tail -n 1 | awk '{ printf "%s\n", $1 }'
echo -ne "Inet Address : "
if [ `ifconfig -a | grep -A 2 eth | head -n $count | grep 'inet addr:' | tail -n 1 | sed -n -e 's/.*inet addr.//p' | sed -n -e 's/Bcast.*//p' | awk '{ printf "%s\n", $1 }' | wc -l` -eq 0 ]
then
echo -n -e "Not Applicable\n"
else
ifconfig -a | grep -A 2 eth | head -n $count | grep 'inet addr:' | tail -n 1 | sed -n -e 's/.*inet addr.//p' | sed -n -e 's/Bcast.*//p' | awk '{ printf "%s\n", $1 }'
fi
echo -ne "Broadcast Address : "
if [ `ifconfig -a | grep -A 2 eth | head -n $count| grep 'Bcast:' | tail -n 1 | sed -n -e 's/.*Bcast.//p' | sed -n -e 's/Mask.*//p' | awk '{ printf "%s\n", $1 }' | wc -l` -eq 0 ]
then
echo -n -e "Not Applicable\n"
else
ifconfig -a | grep -A 2 eth | head -n $count| grep 'Bcast:' | tail -n 1 | sed -n -e 's/.*Bcast.//p' | sed -n -e 's/Mask.*//p' | awk '{ printf "%s\n", $1 }'
fi
echo -ne "Mask : "
if [ `ifconfig -a | grep -A 2 eth | head -n $count | grep 'Mask:' | tail -n 1 | sed -n -e 's/.*Mask.//p' | awk '{ printf "%s\n", $1 }' | wc -l` -eq 0 ]
then
echo -n -e "Not Applicable\n"
else
ifconfig -a | grep -A 2 eth | head -n $count | grep 'Mask:' | tail -n 1 | sed -n -e 's/.*Mask.//p' | awk '{ printf "%s\n", $1 }'
fi
echo -e "\nRX/TX Packets Information :- "
echo
ifconfig -a | grep eth[0-9] -A 7 | head -n `expr $counteth + 7` | grep [RT]X
echo -e "\n\n"
counteth=`expr $counteth + 1`
done
else
echo -e "\nIT APPEARS THAT NO NETWORK CARD IS INSTALLED\n\n"
fi
return 0
}
# END OF MODULE 2
#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
####################################################################################################################
# MODULE 3:- #
# THIS MODULE DISPLAYS THE VARIOUS MENUS AND TAKES INPUTS FROM THE USER #
####################################################################################################################
# THIS DISPLAYS THE MENU FOR PRINTING USER INFORMATION
userinfo_menu(){
if [ "$gui_support" = 'y' ]
then
cancel_userinfo_menu=0
while [ "$cancel_userinfo_menu" != "1" ]
do
dialog --title "USER INFORMATION MENU" --backtitle "Author - Rajat Patel, Yeswedeal" --extra-button --extra-label "Save" --cancel-label "Back" --menu "\nSelect Any Item Below and then Press 'OK' to view information or 'Save' to Save it to disk:\n" 19 40 7 1 "List all users in host machine" 2 "Users currently logged in" 3 "Detail of a user" 4 "Group Information" 5 "Quit" 2> "$CHOICE"
cancel_userinfo_menu=$?
choice2=`cat $CHOICE`
if [ "$cancel_userinfo_menu" = "3" ]
then
case "$choice2" in
1)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
usertot > $TEMP 2>> $TMPLOG
if [ "$?" != "0" ]
then
printerr "$?" "$TRIVIALCODE" "$ERRORSTRING"
else
save
fi
;;
2)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
userlog > $TEMP 2>> $TMPLOG
save
;;
3)
type finger > /dev/null 2>&1
if [ "$?" -ne 0 ]
then
printerr 2 1
else
cancel_userdetail=0
while [ "$cancel_userdetail" != "1" ]
do
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --cancel-label "Back" --inputbox " `echo "Users :\n"; awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf "%s, ", $1 ; }' /etc/passwd` \n\nEnter a username to Save the Details to disk (or press Cancel to go back to previous menu):" 19 70 2> "$CHOICE"
cancel_userdetail=$?
username=`cat $CHOICE`
if [ -n "$username" ] && [ "$cancel_userdetail" = "0" ]
then
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
userdetail "$username"
if [ "$?" = "1" ]
then
dialog --title "USER NOT FOUND!!" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
else
save
fi
fi
done
fi
;;
4)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
groupinfo > $TEMP 2>> $TMPLOG
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
fi
;;
5)
exit_msg
quit
;;
esac
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
continue
fi
case "$choice2" in
1)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
usertot > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
2)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
userlog > "$TEMP" 2>> "$TMPLOG"
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 62
;;
3)
type finger > /dev/null 2>&1
if [ "$?" -ne 0 ]
then
printerr 2 1
else
cancel_userdetail=0
while [ "$cancel_userdetail" != "1" ]
do
dialog --title "USER DETAIL" --backtitle "Author - Rajat Patel, Yeswedeal" --cancel-label "Back" --inputbox " `echo "Users :\n"; awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf "%s, ", $1 ; }' /etc/passwd` \n\nEnter a username to View Details (or press Cancel to go back to previous menu):" 19 70 2> "$CHOICE"
cancel_userdetail=$?
username=`cat $CHOICE`
if [ -n "$username" ] && [ "$cancel_userdetail" = "0" ]
then
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
userdetail "$username"
dialog --title "USER DETAIL" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
done
fi
;;
4)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
groupinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 20 52
fi
;;
5)
exit_msg
quit
;;
esac
done
else
choice2=1
while [ -z "$choice2" ] || [ "$choice2" != "6" ]
do
clear
echo -e "\nAuthor - Rajat Patel, Yeswedeal\n\n"
echo -e "\n*******************************"
echo -e "==:: USER INFORMATION MENU ::=="
echo "*******************************"
echo "1) List all users in host machine"
echo "2) Users currently logged in"
echo "3) Information about a particular user"
echo "4) Group Information"
echo "5) Save All User Information to Disk"
echo "6) Back to previous menu"
echo -en "\nPlease Enter Your Choice (1-6): "
read choice2
case "$choice2" in
1)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
usertot > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
2)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
userlog > "$TEMP" 2>> "$TMPLOG"
clear
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
;;
3)
type finger > /dev/null 2>&1
if [ "$?" -ne 0 ]
then
clear
printerr 2 1
else
username=n
while [ "$username" != q ]
do
clear
echo "Users :"
awk -F: '{ if( $3 >= 500 && $3 <= 9999 ) printf "%s, ", $1 ; }' /etc/passwd echo -e "\nEnter a Username to View Details" echo -n " (q to Return to Previous Menu) : " read username if [ -n "$username" ] && [ "$username" != "q" ] then echo -e "\n\nRetrieving Information." echo -n "Please wait..." userdetail "$username" clear more $TEMP echo -en "\nPress Enter to Continue..." read fi done fi ;; 4) echo -e "\n\nRetrieving Information." echo -n "Please wait..." groupinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
5)
echo -ne "\n\n\nSaving Information.\nPlease wait..."
main -uUg > $TEMP 2> /dev/null
save
echo -e "\n\nInformation Saved in File: $SAVEINFO"
echo -n "Press Enter to continue...."
read
;;
6)
return
;;
esac
done
fi
return 0
}
# THIS DISPLAYS THE MENU FOR PRINTING SYSTEM INFORMATION
systeminfo_menu(){
if [ "$gui_support" = 'y' ]
then
cancel_systeminfo_menu=0
while [ "$cancel_systeminfo_menu" != 1 ]
do
dialog --title "SYSTEM INFORMATION MENU" --backtitle "Author - Rajat Patel, Yeswedeal" --extra-button --extra-label "Save" --cancel-label "Back" --menu "\nSelect Any Item Below and then Press 'OK' to view information or 'Save' to Save it to disk:\n" 19 40 9 1 "Basic Hardware Information" 2 "Basic System Configuration" 3 "Diskdrive Information" 4 "PCI Information" 5 "Memory Usage" 6 "Running Processes" 7 "Advanced System Information" 8 "Services Information" 9 "Quit" 2> "$CHOICE"
cancel_systeminfo_menu=$?
choice1=`cat $CHOICE`
if [ "$cancel_systeminfo_menu" = "3" ]
then
case "$choice1" in
1)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
hwdinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
2)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
configinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
3)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
hddinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
4)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
pciinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
5)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
meminfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
6)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
procinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
7)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
mboardinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
;;
8)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
serviceinfo > "$TEMP" 2> /dev/null
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
if [ `cat $TEMP | wc -l` -le 17 ]
then
printerr 2 1
else
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
fi
fi
;;
9)
exit_msg
quit
;;
esac
continue
fi
case "$choice1" in
1)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
hwdinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
2)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
configinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
3)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
hddinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
4)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
pciinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
5)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
meminfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
6)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
procinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
7)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
mboardinfo > "$TEMP" 2>> $TMPLOG
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
;;
8)
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
serviceinfo > "$TEMP" 2>> $TMPLOG
EXIT_STATUS="$?"
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
if [ `cat $TEMP | wc -l` -le 17 ]
then
printerr 2 1
else
dialog --title "$TITLE" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 72
fi
fi
;;
9)
exit_msg
quit
;;
esac
done
else
choice1=1
while [ -z "$choice1" ] || [ "$choice1" != "10" ]
do
clear
echo -e "\nAuthor - Rajat Patel, Yeswedeal\n\n"
echo -e "\n*********************************"
echo -e "==:: SYSTEM INFORMATION MENU ::=="
echo "*********************************"
echo "1) Basic Hardware Information"
echo "2) Basic System Configuration"
echo "3) Diskdrive Information"
echo "4) PCI Information"
echo "5) Memory Usage"
echo "6) Running Processes"
echo "7) Advanced System Information"
echo "8) Services Information"
echo "9) Save All System Information to Disk"
echo "10) Back to previous menu"
echo -en "\nEnter Your Choice (1-10): "
read choice1
case "$choice1" in
1)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
hwdinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
2)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
configinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
3)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
hddinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
4)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
pciinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
5)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
meminfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
6)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
procinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
7)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
mboardinfo > "$TEMP" 2>> "$TMPLOG"
EXIT_STATUS="$?"
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
;;
8)
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
serviceinfo > "$TEMP" 2>> $TMPLOG
clear
if [ "$EXIT_STATUS" != "0" ]
then
printerr "$EXIT_STATUS" "$TRIVIALCODE" "$ERRORSTRING"
else
if [ `cat $TEMP | wc -l` -le 17 ]
then
printerr 2 1
else
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
fi
;;
9)
echo -ne "\n\n\nSaving Information.\nPlease wait..."
main -dsHcmpDS > $TEMP 2>> $TMPLOG
save
echo -e "\n\nInformation Saved in File: $SAVEINFO"
echo -n "Press Enter to continue...."
read
;;
10)
return
;;
esac
done
fi
return 0
}
# THERE IS NO MENU FOR DISPLAYING NETWORK INFORMATION TILL NOW, BUT AS A STANDARD FOLLOWED IN THIS SCRIPT,
# I HAVE ADDED THIS FUNCTION HERE.
nwinfo_menu(){
if [ "$gui_support" = 'y' ]
then
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Retrieving Information.\nPlease wait..." 7 40
networkinfo > "$TEMP" 2>> "$TMPLOG"
dialog --title "NETWORK INFORMATION" --backtitle "Author - Rajat Patel, Yeswedeal" --exit-label "OK" --textbox "$TEMP" 19 70
else
echo -e "\n\nRetrieving Information."
echo -n "Please wait..."
networkinfo > "$TEMP" 2>> "$TMPLOG"
clear
more "$TEMP"
echo -en "\nPress Enter to Continue..."
read
fi
return 0
}
# THIS DISPLAYS THE MAIN MENU. THIS IS WHAT THE USER SEES WHEN HE RUNS THE SCRIPT WITHOUT ANY OPTION
# WHEN USED WITH AN OPTION, IT DISPLAYS THE NECESSARY INFO. AND EXITS.
main(){
if [ -z "$*" ]
then
if [ "$gui_support" = "y" ]
then
cancel_main=0
while [ "$cancel_main" != "1" ]
do
dialog --title "MAIN MENU" --backtitle "Author - Rajat Patel, Yeswedeal" --extra-button --extra-label "Save" --cancel-label "Exit" --menu "\nSelect Any Item Below and then Press 'OK' to view information or 'Save' to Save it to disk:\n" 19 38 5 1 "User Information" 2 "System Information" 3 "Network Information" 2> $CHOICE
cancel_main=$?
choice=`cat $CHOICE`
if [ "$cancel_main" = "3" ]
then
dialog --backtitle "Author - Rajat Patel, Yeswedeal" --infobox "Saving Information.\nPlease wait..." 7 40
case "$choice" in
1)
main -uUg > $TEMP 2>> $TMPLOG
;;
2)
main -dsHcmpDS > $TEMP 2>> $TMPLOG
;;
3)
main -N > $TEMP 2>> $TMPLOG
;;
esac
save
dialog --title "FILE SAVED" --backtitle "Author - Rajat Patel, Yeswedeal" --msgbox "\nInformation Saved in File: $SAVEINFO\n" 12 45
continue
fi
case "$choice" in
1)
userinfo_menu
;;
2)
systeminfo_menu
;;
3)
nwinfo_menu
;;
esac
done
else
choice=1
while [ -z "$choice" ] || [ "$choice" != 5 ]
do
clear
echo -e "\nAuthor - Rajat Patel, Yeswedeal\n"
echo -e "\n***************"
echo -e "==:: MENU ::=="
echo "***************"
echo "1) User Information"
echo "2) System Information"
echo "3) Network Information"
echo "4) Save All Information to Disk"
echo "5) Exit"
echo -en "\nPlease Enter Your Choice (1-4): "
read choice
case "$choice" in
1)
userinfo_menu
;;
2)
systeminfo_menu
;;
3)
nwinfo_menu
;;
4)
echo -ne "\n\n\nSaving Information.\nPlease wait..."
main -a > $TEMP 2> /dev/null
save
echo -e "\n\nInformation Saved in File: $SAVEINFO"
echo -n "Press Enter to continue...."
read
;;
esac
done
fi
exit_msg
cleanup
clear
else #THIS IS FOR TAKING CARE OF OPTIONS
for param in "$@"
do
if [ "$param" = "--help" ] || [ "$param" = "-h" ]
then
echo -e 'S&M Sysinfo, Sysinfo by Manna & Sid!!'
echo -e "sysinfo Version $VERSION"
echo -e "Author -- Rajat Patel, Yeswedeal"
echo -e "Copyright (C) 2009 Rajat Patel"
echo -e "This is free software; see the source for copying conditions."
echo -e "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE"
echo -e "\nUsage: sysinfo [OPTION]..."
echo -e "A textmode graphical utility for displaying system information"
echo -e "Run without options to enter graphical menu"
echo -e "\nOptions:"
echo -e "\t-h, --help display this help and exit"
echo -e "\t-v, --version display version and exit"
echo -e "\t-a, --all display all information in the following order"
echo -e "\t-u, --usertot display total users in host"
echo -e "\t-U, --userlog display users currently logged in"
echo -e "\t-g, --grpinfo display groups along with the GID"
echo -e "\t-d, --hardware display hardware information"
echo -e "\t-s, --sysconf display system configuration information"
echo -e "\t-H, --hdd display disk-drive information"
echo -e "\t-c, --pci display PCI information"
echo -e "\t-m, --mem display memory usage information"
echo -e "\t-p, --proc display currently running processs"
echo -e "\t-N, --nwinfo display network information"
echo -e "\t-D, --advhdw display advanced hardware information (needs root priviledge)"
echo -e "\t-S, --service display services information (may need root priviledge)\n"
echo -e "Report Bugs to "
exit 0
fi
if [ "$param" = "--version" ] || [ "$param" = "-v" ]
then
echo -e 'S&M Sysinfo, Sysinfo by Manna & Sid!!'
echo -e "sysinfo Version $VERSION"
echo -e "Author -- Rajat Patel, Yeswedeal"
echo -e "Copyright (C) 2009 Rajat Patel"
echo -e "This is free software; see the source for copying conditions."
echo -e "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE"
exit 0
fi
case "$param" in
--*)
;;
-*h*)
main -h
;;
-*v*)
main -v
;;
[^-]*)
echo -e "\nERROR: Does not take any arguments" 1>&2
echo -e "Try \"sysinfo --help\" for more information\n" 1>&2
exit 1
;;
-*[^ahdsuUgHcmpNDS]*)
echo -e "\nERROR: Unkown option -- \"$param\" " 1>&2
echo -e "Type \"sysinfo --help\" for more information\n" 1>&2
exit 1
;;
esac
done
echo
for param in "$@"
do
short=0
case "$param" in
"--all")
main -a
return
;;
"--usertot")
usertot
;;
"--userlog")
userlog
;;
"--grpinfo")
groupinfo
;;
"--hardware")
hwdinfo
;;
"--sysconf")
configinfo
;;
"--hdd")
hddinfo
;;
"--pci")
pciinfo
;;
"--mem")
meminfo
;;
"--proc")
procinfo
;;
"--nwinfo")
networkinfo
;;
"--advhdw")
mboardinfo
;;
"--service")
serviceinfo
;;
"--"*)
echo -e "ERROR: Unkown option -- \"$param\" " 1>&2
echo -e "Type \"sysinfo --help\" for more information\n" 1>&2
exit 1
;;
"-"*)
short=1
;;
esac
# THIS PART CHECKS FOR SHORT OPTIONS WHICH CAN EVEN BE COMBINED
# BELIEVE ME, THIS PART IS REAL TRICKY!!
# I AM STILL NOT SURE WHETHER THIS PART IS TOTALY BUG FREE
if [ "$short" -eq 1 ]
then
while [ "$param" != "-" ]
do
case "$param" in
-*a*)
main -uUgdsHcmpNDS
return
;;
esac
case "$param" in
-u*)
usertot
param=`echo "$param" | sed -n -e 's/u//p'`
;;
esac
case "$param" in
-U*)
userlog
param=`echo "$param" | sed -n -e 's/U//p'`
;;
esac
case "$param" in
-g*)
groupinfo
param=`echo "$param" | sed -n -e 's/g//p'`
;;
esac
case "$param" in
-d*)
hwdinfo
param=`echo "$param" | sed -n -e 's/d//p'`
;;
esac
case "$param" in
-s*)
configinfo
param=`echo "$param" | sed -n -e 's/s//p'`
;;
esac
case "$param" in
-H*)
hddinfo
param=`echo "$param" | sed -n -e 's/H//p'`
;;
esac
case "$param" in
-c*)
pciinfo
param=`echo "$param" | sed -n -e 's/c//p'`
;;
esac
case "$param" in
-m*)
meminfo
param=`echo "$param" | sed -n -e 's/m//p'`
;;
esac
case "$param" in
-p*)
procinfo
param=`echo "$param" | sed -n -e 's/p//p'`
;;
esac
case "$param" in
-N*)
networkinfo
param=`echo "$param" | sed -n -e 's/N//p'`
;;
esac
case "$param" in
-D*)
mboardinfo
param=`echo "$param" | sed -n -e 's/D//p'`
;;
esac
case "$param" in
-S*)
serviceinfo
param=`echo "$param" | sed -n -e 's/S//p'`
;;
esac
done
fi
done
fi
return "$?"
}
######################################################################################################################
##############******************** EXECUTION OF THE SCRIPT STARTS HERE ********************#######################
######################################################################################################################
# SIMPLY 3 STEPS:-
#STEP 1 :-
# INITITIALIZING THE ENVIRONMENT
trap "quit $1 ; " 1 2 3 7 9 11 15
init "$@"
# STEP 2 :-
# CALLING MAIN FUNCTIONS PASSING ALL THE ARGUMENTS ALONG WITH
trap "quit $1 ; " 1 2 3 7 9 11 15
main "$@"
# SETP 3 :-
# EXIT
exit 0
######################################################################################################################
###############******************** EXECUTION OF THE SCRIPT ENDS HERE *********************#######################
######################################################################################################################
Rajat Patel
Subscribe to:
Posts (Atom)