Friday, January 1, 2010

10 Useful Linux Commands

Here's a list of 10 commands which may come handy when using the command line in Linux:

Search for all files modified in the last N days containing a specific text in their name

find DIR -mtime -N -name "*TEXT*"

For example:

find ~ -mtime -5 -name "*log*"

Will display all the files modified in the past 5 days which include the text 'log' in their filename.

Determine which processes use the most memory

ps aux | sort -nk 4 | tail

Will show the first 10 processes which use the most memory, using ascendant sorting. Alternately:

ps aux | sort -nrk 4 | head

Will show the first 10 processes using most memory, using descendent sorting.


Output of ps aux | sort -nrk 4 | head

Display the username which is currently logged in

whoami

Show date using format modifiers

date +"%H:%M:%S"

Will output time in format HOUR:MINUTE:SECOND. You can use any format specifiers explained in the man page. The double quotes are required in case you need to use spaces.

Showing date in format month, day year

Show info about a specific user

finger $USER

Output of finger $USER

Show disk usage separately for each partition

df -h

The -h switch will tell df to show human-readable sizes (KB, MB and GB when it is the case)

df -B 1K

Will show sizes in kilobytes.

Show which modules are loaded

lsmod

Add or remove a module to/from the Linux kernel

Insert a module:

modprobe MODULE

Remove a module:

modprobe -r MODULE

Search for a file using locate

locate FILENAME

Will search the locate database (created with updatedb) for any path or file which contains FILENAME.

Change the encoding of a text file

iconv -f INITIAL_ENCODING -t DESIRED_ENCODING filename

For example:

iconv -f ISO-8859-16 -t UTF-8 myfile.txt

Will change the encoding of myfile.txt from ISO-8859-16 (Romanian) to UTF-8.

Linux dialog utility short tutorial

dialog - display dialog boxes from shell scripts.

'dialog' is a utility for building console-based 'front ends' in UNIX like operating systems.

In this brief tutorial I am mentioning the usage of few important basic controls available with this 'dialog' utility and later I have created a very simple front end application in UNIX bash scripting using dialog.

To install 'dialog' on your ubuntu:
$ apt-get install dialog

Box options available with dialog: (Do a 'man' of dialog to know the usage of each control box)
--calendar
--checklist
--dselect
--editbox
--form
--fselect
--gauge
--infobox
--inputbox
--inputmenu
--menu
--mixedform
--mixedgauge
--msgbox
--passwordbox
--passwordform
--pause
--progressbox
--radiolist
--tailbox
--tailboxbg
--textbox
--timebox
--yesno

Checklist box:

A checklist box allows you to present a set of choices to the user and the user can toggle each one on or off individually using the space bar.


A sample one:
$ dialog --checklist "Choose OS:" 15 40 5 \
1 Linux off \
2 Solaris on \
3 'HP UX' off \
4 AIX off


Radiolist box:

The 'radiolist' control box is same as 'checklist' box.
$ dialog --backtitle "OS infomration" \
--radiolist "Select OS:" 10 40 3 \
 1 "Linux 7.2" off \
 2 "Solaris 9" on \
 3 "HPUX 11i" off


Inputbox:

The 'inputbox' allows the user to enter a string.
$ dialog --title "Inputbox - Example" \
--backtitle "unstableme.blogspot.com" \
--inputbox "Enter your favourite OS here" 8 50


Menu box:
$ dialog --title "A dialog Menu Example" \
--menu "Please choose an option:" 15 55 5 \
1 "Add a record to DB" \
2 "Delete a record from DB" \
3 "Exit from this menu"

A message-box:
$ dialog --title "Example Dialog message box" \
--msgbox "\n Installation Completed on host7" 6 50


A yesno box:
$ dialog --title "Confirmation"  --yesno "Want to quit?" 6 20


Infobox:
$ dialog --infobox "Processing, please wait" 3 34 ; sleep 5


Textbox:
It is a simple file viewer
$ dialog --textbox ~/work/conf.txt 10 4


From the sample application I have created at the end of this post, you will easily learn how to program these dialog boxes i.e. how to capture what user has entered/pressed.

The dialog program writes its output to the standard error by default. In most of the dialog controls we redirect the choice user has selected to a tempfile and then process return value of dialog and contents of the tempfile.

Gauge Box:
#!/bin/sh
#A gauge Box example with dialog
(
c=10
while [ $c -ne 110 ]
    do
        echo $c
        echo "###"
        echo "$c %"
        echo "###"
        ((c+=10))
        sleep 1
done
) |
dialog --title "A Test Gauge With dialog" --gauge "Please wait ...." 10 60 0


Calendar Box:
#!/bin/sh

dat=$(dialog --stdout --title "My Calendar" \
                   --calendar "Select a date:" 0 0 25 12 2009)

case $? in
0)
 echo "You have entered: $dat"   ;;
1)
 echo "You have pressed Cancel"  ;;
255)
 echo "Box closed"   ;;
esac


Time Box:
#!/bin/sh

tim=$(dialog --stdout --title "A TimeBox" \
                    --timebox "Set the time:" 0 0 10 13 59)

case $? in
0)
  echo "You have set: $tim"   ;;
1)
  echo "You have pressed Cancel"  ;;
255)
  echo "Box closed"   ;;
esac



A sample application:

Suppose:
$ cat /home/user9/work/conf.txt
port:3322
threads:2
logdir:/opt/user6/logs/
confdir:/opt/user6/etc/

The following bash script using dialog utility will facilitate a simple interface to view or edit the content of the above config file.
#!/bin/sh
#http://unstableme.blogspot.com/
#A sample application using UNIX/Linux dialog utility
#Auto-size with height and width = 0 of the dialog controls

file='/home/user9/work/conf.txt'
tempfile1=/tmp/dialog_1_$$
tempfile2=/tmp/dialog_2_$$
tempfile3=/tmp/dialog_3_$$

trap "rm -f $tempfile1 $tempfile2 $tempfile3" 0 1 2 5 15

_edit () {
   items=$(awk -F\: '{print $1,$2}' $file)
   dialog --title "A Sample Application" \
          --menu "What you want to change :" 0 0 0 $items 2> $tempfile1

   retval=$?
   parameter=$(cat $tempfile1)

   [ $retval -eq 0 ] && tochange=$parameter || return 1

   val=$(awk -F\: -v x=$tochange '$1==x {print $2}' $file)
   dialog --clear --title "Inputbox - Test" \
          --inputbox "Enter new value($tochange)" 0 0 $val 2> $tempfile2

   dialog --title "Confirmation"  --yesno "Commit ?" 0 0
   case $? in
       0) newval=$(cat $tempfile2)
          awk -v x=$tochange -v n=$newval '
               BEGIN {FS=OFS=":"}$1==x {$2=n} {print}
               ' $file > $file.tmp
          mv $file.tmp $file
       ;;
       1|255) dialog --infobox "No Changes done" 0 0
              sleep 2
   ;;
   esac
   dialog --textbox $file 0 0
}

_main () {
   dialog --title "A sample application" \
           --menu "Please choose an option:" 15 55 5 \
                   1 "View the config file" \
                   2 "Edit config file" \
                   3 "Exit from this menu" 2> $tempfile3

   retv=$?
   choice=$(cat $tempfile3)
   [ $retv -eq 1 -o $retv -eq 255 ] && exit

   case $choice in
       1) dialog --textbox $file 0 0
          _main
           ;;
       2) _edit
          _main ;;
       3) exit ;;
   esac
}

_main

Dialog utility home page

Save MySQL Petition

http://www.helpmysql.org/en/petition