Introduction: Simple Linux Commands From a Web Page.
There had to be a way to do simple commands for linux without going to the command line. The neat part to this project is that you can so easily expand it yourself. Need a directory listing. No problem. Need to know how the disk space is doing. No problem. This simple project will probably expand to a whole management system eventually. But in the mean time, here is just the basic structure which you can easily expand on. Also see https://www.instructables.com/id/Web-page-scraping-fromto-a-web-page/
Note: if you are on a terminal that does not have a terminal client, this project is a real lifesaver. This project makes it real easy for me to use a touchpad and check on my servers. No special client software necessary. Also this could be very easily adapted for the Apple Macintosh systems also since it is allegedly bsd based (a cousin of linux). Yes, control your "Mac" from a web page.
If you like this instructable, you might like this one also: https://www.instructables.com/id/Linux-screen-play/
Installed Arch linux on a pogoplug v2 and that is a wee bit different to set up the cgi-bin.
Step 1: What's Needed:
http://www.freeos.com/guides/lsst/
Computer running Apache or other web server that supports the CGI (Common gateway interface).
A Lamp (linux, apache, mysql, and php) server would be a good start.
Step 2: Extra Program Needed.
[code]
#=================================
# lsuser - list users
#=================================
# Assignments
# --------------------------------
datafile="/etc/passwd"
# end assignments
#=================================
#
# Data input
#---------------------------------
while read line
do echo $line | cut -d: -f1
done < $datafile
[/code]
Once the file is created we need to make it executable.
$ chmod +x lsuser
The we need to copy it to the usr program directory.
$ sudo cp lsuser /usr/bin/.
Attachments
Step 3: Adding Wakeonlan
$ sudo apt-get install wakeonlan
Step 4: The Main Program.
bash.cgi
[code]
i#!/bin/sh
echo "Content-type: text/html\n"
# read in our parameters
CMD=`echo "$QUERY_STRING" | sed -n 's/^.*cmd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
FOLDER=`echo "$QUERY_STRING" | sed -n 's/^.*folder=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"| sed "s/%2F/\//g"`
FOLDER1=`echo "$QUERY_STRING" | sed -n 's/^.*folder1=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"| sed "s/%2F/\//g"`
FOLDER2=`echo "$QUERY_STRING" | sed -n 's/^.*folder2=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"| sed "s/%2F/\//g"`
# our html header
echo "<html>"
echo "<head><title>Bash CGI</title></head>"
echo "<body>"
# test if any parameters were passed
if [ $CMD ]
then
case "$CMD" in
ifconfig)
echo "Output of ifconfig :<pre>"
/sbin/ifconfig
echo "</pre>"
;;
uname)
echo "Output of uname -a :<pre>"
/bin/uname -a
echo "</pre>"
;;
dmesg)
echo "Output of dmesg :<pre>"
/bin/dmesg
echo "</pre>"
;;
df)
echo "Output of df -h :<pre>"
/bin/df -h
echo "</pre>"
;;
free)
echo "Output of free :<pre>"
/usr/bin/free
echo "</pre>"
;;
hw)
echo "Hardware listing :<pre>"
/usr/bin/lshw
echo "</pre>"
;;
lsusb)
echo "lsusb :<pre>"
/usr/bin/lsusb
echo "</pre>"
;;
lsuser)
echo "List of users :<pre>"
/usr/bin/lsuser
echo "</pre>"
;;
ls)
echo "Output of ls $FOLDER :<pre>"
/bin/ls "$FOLDER"
echo "</pre>"
;;
lsal)
echo "Output of ls $FOLDER1 :<pre>"
/bin/ls -al "$FOLDER1"
echo "</pre>"
;;
wol)
echo "System to wake: $FOLDER2 :<pre>"
/usr/bin/wakeonlan "$FOLDER2"
echo "</pre>"
;;
lsb_release)
echo "Ubuntu version :<pre>"
/usr/bin/lsb_release -a
echo "</pre>"
;;
cpuinfo)
echo "Cpu information :<pre>"
cat /proc/cpuinfo
echo "</pre>"
;;
*)
echo "Unknown command $CMD<br>"
;;
esac
fi
# print out the form
# page header
echo "<p>"
echo "<center>"
echo "<h2>Bash commands</h2>"
echo "</center>"
echo "<p>"
echo "<p>"
echo "Choose which command you want to run"
echo "<form method=get>"
echo "<input type=radio name=cmd value=ifconfig checked> ifconfig (Network configuration) <br>"
echo "<input type=radio name=cmd value=uname> uname -a (Kernel version)<br>"
echo "<input type=radio name=cmd value=dmesg> dmesg (System messages) <br>"
echo "<input type=radio name=cmd value=lsb_release> lsb_release (Ubuntu version) <br>"
echo "<input type=radio name=cmd value=df> df -h (Free disk space) <br>"
echo "<input type=radio name=cmd value=free> free (Memory info)<br>"
echo "<input type=radio name=cmd value=cpuinfo> Cpu information <br>"
echo "<input type=radio name=cmd value=hw> Hardware listing <br>"
echo "<input type=radio name=cmd value=lsuser> User listing <br>"
echo "<input type=radio name=cmd value=lsusb> lsusb (Usb ports info)<br>"
echo "<input type=radio name=cmd value=ls> ls -- folder <input type=text name=folder value=/mnt/flash><br>"
echo "<input type=radio name=cmd value=lsal> ls -al -- folder <input type=text name=folder1 value=/mnt/flash><br>"
echo "<input type=radio name=cmd value=wol> wakeonlan (enter mac address) <input type=text name=folder2 value=00:00:00:00:00:00><br>"
echo "<input type=submit>"
echo "</form>"
echo "</body>"
echo "</html>"
[/code]
then you will need to make it executable.
$ chmod +x bash.cgi
The you must copy it into your cgi directory. (check to make sure there is not already a file of the same name!).
$ sudo cp bash.cgi /var/www/cgi-bin/.
You should be ready to test it now.
Attachments
Step 5: Testing.
Step 6: Adding a Feature.
Take a piece of code from the command section and copy it.
[code]
free)
echo "Output of free :<pre>"
/usr/bin/free
echo "</pre>"
;;
[/code]
Then edit it. (I added a header to make it more readable.)
[code]
who)
echo "Who is logged in :<pre>"
echo "who where login-time logged-in-from"
echo "---------------------------------------------------"
/usr/bin/who
echo "</pre>"
;;
[/code]
Add it to the code if you have not done so already.
Now we need to copy an option:
[code]
echo "<input type=radio name=cmd value=lsuser> User listing <br>"
[/code]
Then edit it for our needs
[code]
echo "<input type=radio name=cmd value=who> Who is logged in <br>"
[/code]
Again add it back in if you have not done so already.
If you want to do input you will need to add another section also. (you need to change FOLDER2/folder2 names).
[code]
FOLDER3=`echo "$QUERY_STRING" | sed -n 's/^.*folder3=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"| sed "s/%2F/\//g"`
[/code]
Note you may want to fancy up your menu also to make it more user friendly. (see attached file for details).
Have Fun!!
Attachments
Step 7: New Header.
[code]
# page header
echo "<p>"
echo "<center><h2>"
echo "Management Console for: "
uname -n
echo "</center></h2>"
echo "<p>"
echo "<p>"
echo "<form method=get>"
echo "Choose which command you want to run: <br>"
echo "<br>System information<br>"
[/code]
Also included is the original and then a more up to date view of the program. (source code not included.) Quite a change.