18 April, 2011

python code for taking images with webcam in Linux

Hey friends lets checkout a small, simple and cute python program for taking photos with with your webcam without the help of any third party application programs. Most probably the Ubuntu like linux distributions comes without a pre-installed application for imaging with webcam. I suggest this small piece of code because most of the linux distributions includes python  as pre-installed.

I have simplified the code to the extend that any newbie to python can understand it. Also you should install the following python library for this program to work. 

 # python-opencv
        You can install this library using synaptic package manager or apt. The package name is 'python-opencv'


Code


                                                                                                                                                                                       



   import os
   import datetime
   import opencv.adaptors
   from opencv import highgui 
   import Image

   def get_image(camera):
im = highgui.cvQueryFrame(camera)
      # Add the line below if you need it (Ubuntu 8.04+)
     im = opencv.cvGetMat(im)
     #convert Ipl image to PIL image
dir(im)
print "image taken"
     return opencv.adaptors.Ipl2PIL(im) 

   #_______________find usernae___________
   a=os.popen('whoami')
   l=a.read() 
   s=l.split('\n')
   uname=s[0]

   #______________find date n time  _________
   now = datetime.datetime.now()
   now = str(now)
  
   im=None
   camera= highgui.cvCreateCameraCapture(0)
   im = get_image(camera)
   os.chdir('/home/%s/Pictures' %(uname) )
   fname='image_'+now+'.png'
   im.save(fname, "PNG")
   ####  code ends here
                                                                                                                                                                                     


You can run this program using the terminal as follows

                                                           python camera.py                                                                                         


The images will be automatically stored inside the Pictures folder inside the home directory.


till the next post...

Read rest of entry

26 January, 2011

pgrep command for listing PID's of currently running processes

pgrep is a bash command that looks through the currently running processes and lists the process IDs which matches the selection criteria to stdout.  All the criteria given as parameters to pgrep have to matched.
$ pgrep fi 
         -- List the PID of process names match with "fi".   

$ pgrep -l fi 
         -- Same as above and process name also get 
             listed.  
 
$ pgrep -vl fi 
         -- List all processes, which name not match    
             with "fi".   

$ pgrep -xl fi 
         -- List all processes, which name exactly match  
             with "fi".  
 
$ pgrep -f sbin 
         --List all processes, which are running from  some 
            sbin folder. It check the command line also.  
 
$pgrep -c fi
         --Show the count of matching processes.  
 
$ pgrep -d, fi 
         -- List the matching process id in CSV format.  
 
$ pgrep -t tty1 
         -- List the process controlling the term tty1. 
 
$ pgrep -u root, jo 
         -- List all processes owned by root and jo. 
 
$ pgrep -u jo gnome
         -- List the process called sshd and owned  by jo.  
 
$ pgrep -n fi 
          -- Show only the newest process.  
 
$ pgrep -o fi 
          -- Show only the oldest process.  
Read rest of entry

30 November, 2010

fork bomb explained...

 


Don't try this @ your home ....Injurious to your computer's health, else  you will be...



Defining the fork bomb . . .

                   A fork bomb is simply a line of some characters entered into the command line of a Unix system, and when the enter key is pressed, within seconds the computer will crash... The little program we entered in to the bash shell act as a process & make multiple copies of itself, setting off a chain reaction and thus quickly exhausting the system’s resources. Most computer operating systems can be  simply crashed or at least brought to a coma stagewhen users, even those without superuser privileges, launches this 'logical bomb' that eat up all memory and CPU time. "Forkbomb" does nothing but launch two or more copies of itself upon startup. Since these copies do the same in turn, this sets off a chain reaction with an exponentially growing number of processes. A fork bomb process "explodes" by recursively  spawning copies of itself using the Unix system call fork().




Working of the 'bomb'...
  
              A process begins  execution when it's execution environment and corresponding threads are created. Before  execution the process has to take a room in the process table, which is a data structure for holding  information required by the kernel to run the process such as...

      > Process state
      > Several process IDs
      > User IDs for determining process privileges
      > Pointer to text structure for shared text areas
      > Pointer to page table for memory management
      > Scheduling parameters,  priority values
      > Timers for resource usage etc...


                A fork bomb creates a large number of processes very quickly and begins execution one after the other by seizing the process table. So whenever a free slot occurs in the process table, another copy of the bomb process enters it and start spawning new bombs. When process table becomes saturated, no new programs may start until another process terminates. Even if that happens, it is not likely that a useful program may be started since the instances of the bomb program will each attempt to take any newly-available slot themselves.


                In addition to using space in the process table, each child process of a fork bomb uses further processor-time and memory. As a result of this, the system and existing programs slow down and become much more unresponsive and difficult or even impossible to use.

see the defenition for fork bomb in wikipedia,
                In computing, the fork bomb is a form of denial-of-service attack against a computer system which makes use of the fork operation (or equivalent functionality) whereby a running process can create another running process. Fork bombs count as wabbits: they typically do not spread as worms or viruses. To incapacitate a system, they rely on the (generally valid) assumption that the number of programs and processes which may execute simultaneously on a computer has a limit.




Some bombs that you can try @ your friend's pc


Fork Bomb in windows

 Open up notepad and type the string below and and save
 it as fork.bat :


   %0|%0


 On double clicking this file,it will lead to total CPU jam 
 by opening a large no. of processes of command prompt.




In UNIX C or C++:


 Compile and execute the following C/C++ code snippet
 in Unix to understand (???) the bomb...

#include <unistd.h>
int main(void)
{
    for(;;)      //for(;;) or while(1) makes an infinite loop
    fork();
    return 0;
}


Bash Shell Fork Bomb


Following is the most coolest one i had ever seen. Take the bash terminal and just type in the following code....

   : (){ : |:& };:

This code is the elegant and most beautiful example of a fork bomb.


:()       _  define ':' , like a function call
{         _  beginning of what to do when we say ':'
    :      _  load another copy of the ':' function into
               memory...
    |      _  ...and pipe its output to...
    :      _  ...another copy of ':' function, which has to be
               loaded into memory (therefore, ':|:' simply gets 
               two copies of ':' loaded whenever ':' is called)
    &     _  disown the functions, that is if the first ':' is
               killed, all of the functions that it has started
               should NOT be auto-killed...
}         _  end of the definition of ':'
;          _  Having defined ':', like in structures etc... we
               should now...
:          _  ...call ':', initiating a chain-reaction: each ':' will
               start two more.


Simply the above function is the same as the code below

forkbomb(){ forkbomb|forkbomb & } ; forkbomb



How to get out of the bomb . . .
             One may have to reboot the system to resume its normal operation destroying all running copies of it. Trying to use a program to kill the rogue processes normally requires creating another process — this is  an impossible task if the host machine has no empty slots in its process table, or no space in its memory structures. Furthermore, as the processes of the bomb are terminated (for example, by using the kill command), process slots become free and the remaining fork bomb threads can continue reproducing again, either because there are multiple CPU cores active in the system, and/or because the scheduler moved control away from kill(8) due to the time slice being used up.


A simple solution is that we can stop (“freez”) the bomb's processes, so that a subsequent kill/killall can terminate them without any of the parts re-replicating due to newly available process slots:


killall -STOP bombprocess
killall -KILL  bombprocess



...Bye till the fire and smoke settles...
Read rest of entry

14 October, 2010

How to add sudo to last command typed in bash terminal



Its most common that you might forget to type in the 'sudo' command along with some other commands. I have faced this problem many times and usually end up by typing the entire command with sudo keyword again. Here is a technique that we can use to avoid retyping the command again after typing sudo.

Consider that i have to install a package called blueman system with the apt package manager via the terminal. Here i am not adding the sudo command before the apt command



Then type the following command to avoid rexecuting the command with all permissions

 $ sudo !!


See here the bash automatically retyped the command with sudo. 



Read rest of entry

11 October, 2010

Troubleshooting Network problems in Ubuntu


                Internet connectivity is one of the important means of communication in todays life. So troubleshooting the problems in our own networks or reconfiguring it for the easiness is not to be praised as a "geekness". In my opinion you don't need to be a geek for setting an internet connection or recovering your machine from a network problem.

Before getting into more troubles just checkout wheather the physical network components (cables, NICs, and so on) are connected properly and working. If everything is right then proceed to the following steps



Checking the Connectivity to a Host

The troubleshooting is done in a bottom up manner. So we will troubleshoot the network layer first and then move on to transport layer. Here we will check the connetivity by pinging  to your default gateway. You should have either configured the default gateway in the /etc/network/interfaces file, i have written a post about it in the last month or leave it to the system using service such as DHCP. To check your default gateway in the actual routing table, use the ip command as follows:

$ ip route


The gateway for the default route in this example is  192.168.0.5 To make sure wheather there is internet connectivity to that gateway, use the ping command as follows, passing the address for your default gateway:

$ ping 192.168.0.5

By default, ping continues until you press Ctrl+c. Other important ping options include the following:
$ ping -a 10.0.0.1
            [You can here a buzzer sound @ each pings]
$ ping -c 4 10.0.0.1 
            [Ping 4 times and exit (default in Windows)]
$ ping -q -c 5 10.0.0.1 
            [Show summary of pings (works best with -c)]
$ sudo ping -f 10.0.0.1 
            [Send a flood of pings (must be root)]
$ ping -i 3 10.0.0.1 
            [Send packets in 3-second intervals]
$ sudo ping -I eth0 10.0.0.1  
            [Set source to eth0 (use if multiple NICs)]



Use the ping flood option with caution, if the packet size is larger than usual  it can cause connections to stand out.

Checking Address Resolution Protocol (ARP)


If you’re not able to ping your gateway, you may have an issue at the Ethernet hardware address layer. The Address Resolution Protocol (ARP) can be used to find information at the MAC layer (hardware layer). 

ARP stands for Address Resolution Protocol, which is used to  find  the  media  access control [MAC] address of a network neighbour for a given IP Address.


To view and configure ARP entries, we can use the arp or ip neighbor command. Arp  command displays  the  kernel’s IPv4 network neighbour cache. It can add entries to the table, delete one or display the current content.

$ arp -v    [List ARP cache entries by name]



Above command will show the names of other computers that the local computer’s ARP cache knows about and the associated hardware type and hardware address of each computer’s NIC. You can disable name resolution to see those computers’ IP addresses instead of the hostname by using the following command:

$ arp -vn     [List ARP cache entries by IP address]

          To delete an entry from the ARP cache, use 
          the -d option:
              $ sudo arp -d 10.0.0.50
                   [Delete address 10.0.0.50 from ARP cache]

          Instead of just letting ARP dynamically learn 
          about other systems, you can add static ARP 
          entries to the cache using the -s option:
               $ sudo arp -s 10.0.0.51 00:0B:6A:02:EC:95


To query a subnet to see if an IP is already in use, and to find the MAC address of the device using it, use the arping command. The arping command continuously queries for the address until the command is ended by typing Ctrl+c. Typically, you just want to know if the target is alive, so you can run one of the following commands:

$ arping -f 10.0.0.50 
[Query 10.0.0.50 and stop at the first reply]

                      
$ arping -c 2 10.0.0.51 
[Query 10.0.0.50 and stop after 2 counts]


Tracing Routes to Hosts

After verifying that you can ping your gateway and even reach machines that are outside of your network you can use traceroute (traceroute package should be installed) to find the problem correctly.

$ traceroute  www.mywebsite.com  
[Follow the route taken to a host]
 

If there are lines of asterisks (*) in the end of  the list  it is because of the firewalls inside your office/college network that block traffic to the target. However, if you see several asterisks before the destination, those can indicate congestion or network failures and points to bottleneck issues.

traceroute command options are
$ traceroute -I www.google.com 
                        Use ICMP packets to trace a route
$ traceroute -p 25 www.google.com 
                        Connect to port 25 in trace
$ traceroute -n www.google.com 
                        Disable name resolution in trace
$ tracepath www.google.com 
                        Use UDP to trace the route

Using the ip command...
You can do the same activities with ip command similar to route command. Here are three different ways to show the same basic routing information:

$ ip route show 
[Display basic routing information]

options for adding and deleting routes with ip are as follows:
$ sudo ip r add 192.168.0.0/24 via 10.0.0.100 dev eth0                  - Add route to interface
$ sudo ip r add 192.168.0.0/24 via 10.0.0.100  
                           - Add route no interface
$ sudo ip r del 192.168.0.0/24 
                           - Delete route

To make a new route permanent, edit the /etc/network/interfaces file and place the information about the new route in that file. For example, to add the route added with the ip command above, add the following lines to /etc/network/interfaces:
       iface eth0 inet static
    address 192.168.0.0
    netmask 255.255.255.0
    gateway 10.0.0.100

Read rest of entry

05 October, 2010

Changing Permissions with chmod

The chmod command lets you change the access permissions of files and directories. shows several chmod command lines and how access to the directory or file changes.

chmod 0700

The directory’s owner can read or write files in that directory as well as change to it. All other users (except root) have no access.

chmod 0711 
Same as for the owner. All others can change to the directory, but not view or change files in the directory. This can be useful for server hardening, where you prevent someone from
listing directory contents, but allow access to a file in the directory if someone already knows it’s there.

chmod go+r

Adding read permission to a directory may not give desired results. Without execute on, others can’t view the contents of any files in that directory.

chmod 0777

All permissions are wide open.

chmod 0000

All permissions are closed. Good to protect a directory from errant changes. However, backup programs that run as non-root may fail to back up the directory’s contents.

chmod 666

Open read/write permissions completely on a file.

chmod go-rw Don’t let anyone except the owner view, change, or delete the file.

chmod 644

Only the owner can change or delete the file, but all can view it.
Read rest of entry

27 September, 2010

How to wipeout your hard disk perfectly in Ubuntu


Here is a command shread which can be used to in bash terminal of Ubuntu to wipeout your harddisk completely without leaving any chances for further recovery. Please dont try it unless otherwise you dont have no other use with your current system...

$ shread -v -n 1 -z /dev/hda


Options


-f, --force
       change permissions to allow writing if necessary

       -n, --iterations=N
       Overwrite N times instead of the default (25)

       -s, --size=N
       shred this many bytes (suffixes like K, M, G accepted)

       -u, --remove
       truncate and remove file after overwriting

       -v, --verbose
       show progress

       -x, --exact
       do not round file sizes up to the next full block;

       this is the default for non-regular files

       -z, --zero
       add a final overwrite with zeros to hide shredding
Read rest of entry

24 September, 2010

How to install finch in Ubuntu 10.04


Finch is a text/console-based, modular instant messaging client capable of using AIM/ICQ, Yahoo!, MSN, IRC, Jabber, Napster, Zephyr, Gadu-Gadu, Bonjour, Groupwise, Sametime, SILC, and SIMPLE all at once. Terminal acts as the GUI for the finch... And you might fell in love with it only if you are comfortable with the bash terminal also...

Installing finch in Ubuntu 10.04

take the gnome terminal and type in as follows :

$ sudo apt-get install finch


You can install it also using the Synaptic Package manager also.





Read rest of entry

10 September, 2010

How to install NetBeans IDE 6.9.1 in Ubuntu 10.04


How to install java runtime environment in Ubuntu
NetBeans IDE is an open-source, fast and feature full tool for developing Java software. It runs on any operating system where a Java Virtual Machine is available. NetBeans helps to develop java applications and projects with ease and good user friendly environment. Here is the right mechanism to install NetBeans IDE in Ubuntu. You should have to install a Java Virtual Machine in the computer before installing NetBeans.

Install Java Runtime Environment in Ubuntu 10.04

1.Open the terminal and add the following repository

   $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid  partner"    

2. Update the apt:

$ sudo apt-get update

3. Now install Sun Java packages using command: 

$ sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts



Install NetBeans IDE 6.9.1 in Ubuntu 10.04

Download the latest version of the NetBeans IDE binaries from the link here. The versions available from synaptic or apt-get is usually out-of-date from the version available directly from NetBeans. So the best way to get the latest version is to download the binaries directly from the NetBeans website and execute it in your machine.

><      Download the binary corresponding to Java SE.


><       After the download is complete, take the  terminal and change to the directory where the file is downloaded, usually that may be in your Downloads folder.

$ cd  /home/your_username/Downloads


><      Now install the NetBeans IDE using the shell command as follows. Change the filename with the one corresponding to the file downloaded on to your machine.

$ sudo sh  ./netbeans-6.9.1-ml-javase-linux.sh

><       The terminal will initialize the NetBeans installer in Graphical mode after executing the above command. When installation is completed you can start creating your java application by taking the NetBeans IDE from Applications > Programming > NetBeans


Read rest of entry

07 September, 2010

Remote login using SSH and copying files from remote machines


copy files remotely over internt

SSH stands for “secure shell” and its a program and protocol also. Through SSH you can  use the applications that are available in a remote computer on internet even if you don't have it in local machine. Only requirement is a working internet connection and an account in the remote machine.  The OpenSSH program suite, developed by the OpenBSD project, offers a free SSH facility with everything necessary to use encrypted connections on different operating systems: 
  :: commandline tools for working on remote machines
  :: to execute programs remotely 
  :: to tunnel Internet services via SSH 
  :: tools for secure file copying

   OpenSSH is a must-have application in any recent Linux distribution. Most systems offer separate packages for the client and the server. Server program is necessary if you want to access your Linux computer via SSH from another machine. 

Applications . . .
- You can login to your office computer remotely from
   home and do all the office work @ home
- Using ssh tunnelling you can communicate over the
   restrictions imposed by proxies and firewalls 
Functions of SSH

ssh       :The command-line client establishes   
             encrypted connections to remote machines 
             and will run commands on these machines if
             needed.

scp      :To copy files (non-interactively) locally to or 
             from remote computers, you can use scp
             (“secure copy”).

sftp      :The ftp client (“secure ftp”) supports
             interactive copying. Like other command line
             ftp clients, the tool offers many other options
             such as copying, changing and listing 
             directories, modifying permissions, deleting
             directories and files, and more...

sshd     :The SSH server is implemented as a daemon
             and listens on port 22 by default. SSH clients 
             establish connections to the sshd.

Installation & Configuration

Take the terminal and type in following commands to install SSH

$ sudo apt-get install openssh-server openssh-client
 
Inorder to test ssh please type in the following command...

$ ssh localhost 
 
To stop ssh server, type in

$ sudo /etc/init.d/ssh stop

To start sshs server, type in

$ sudo /etc/init.d/ssh start

To restart ssh server, type in

 # sudo /etc/init.d/ssh restart


Remote login using SSH

You can remotely login to another machine on the internet by using the following command,

$ ssh  -X  username@100.100.100.3

Replace the username and ip (100.100.100.3) with the one corresponding to you. X option enables the Xserver.

                On executing the above command, the terminal prompt changes to user@remotemachine:~$  you can execute any command as if you are logged in at the remotemachine. Any application from that remote machines can be run by executing the command

examples :
user@remotemachine:~$ firefox
          for starting firefox on a remote machine
user@remotemachine:~$ nautilus
          for starting the file manager on remote  
           machine 
user@remotemachine:~$gnome-session
          to start the gnome session so that you get the   
          desktop with all the features, then you can 
          perform everything in graphical user 
          environment  


Copying files from remote system

                The ssh command alone allows remote login only, but you can copy a file in a remote system to your local machine using the 'scp' command.

1. You are already logged in at user@local$

2. Login to the remote machine  using the ssh  
    command. Then the terminal prompt will change to 
    user@remote

3. Type in the scp command as follows

$ scp  filename user@ip_local:destination

               filename      :: the file to be copied which is 
                                      in remote machine
               ip_local        :: ip adress of your machine
               destination  :: destination folder where the 
                                     copied files are to be saved
       Then the terminal will prompt for your accounts password...


Thats all for now with ssh and scp. You can refer the man page of ssh and scp to see more details in case of using them under a proxy server and also for advanced features...






Read rest of entry
 

Terminal Diary | techblog Copyright © 2009 Gadget Blog is Designed by jintu jacob Powered by Blogger