Wednesday, November 30, 2011

How to find out who is doing what in an UNIX system

OK, so you are here to learn how to find out who is doing what in your UNIX system.

Then first of all let me ask, who are you?
Now, you have a question in your mind, who am i?

type it down in your system and lets see what the system responds.

bash-3.00$ who am i
scott      pts/3        Nov 30 19:37    (10.203.54.223)

now you have your account name/user name, the communication line, date and time of login and your ip address as well.

Now you know who you are, right? Is that all that you need to know about you?

You know that UNIX is a multi user system. Hence the system you have logged in probably might have more users other than you. Rather than having a unique name, don't you think the UNIX system will have a unique id for each of the users in the system!! So let us check our what id Unix has assigned to you.

Type down what come to your mind. Nothing but id!!

bash-3.00$ id
uid=200(scott) gid=201(scott)


It give you both id and your group id as well. After all you don't need to bother much about UID and GID

Now you know who you are, and now its time for you to check who else is there in the system.

who

The only limitation here is, you can get details only on users who are currently logged in to the system.

bash-3.00$ who
scott      pts/2        Nov 30 11:31    (10.203.54.102)
taylor      pts/3        Nov 30 19:37    (10.203.54.223)
ram      pts/4        Nov 30 12:52    (10.203.54.4)
build      pts/5        Nov 24 19:15    (10.222.46.132)


Four users are logged into the same UNIX system. Their communication channel, the time they logged into the system and their system ip address is also listed down.


Now you know who all are there in the system. But do you know what they are doing? Watching some ...movies? You want to check it out?

Use the command "w", a combination of "who are they?" and "what they do?"

bash-3.00$ w
  8:02pm  up 215 day(s),  3:13,  8 users,  load average: 0.18, 0.20, 0.20
User     tty           login@      idle   JCPU   PCPU  what
scott    pts/2        11:31am    17                              bash
taylor    pts/3       7:37pm                                       bash


This command gives us info about the user name, ttyp, logged in time, how long since the user has done anything, combined CPU time of all jobs run by the user, CPU time taken by current job and last field tells you what the user is doing?


So, next time while you do something in your UNIX system, beware that other users can check it out, what you are doing!!

*All the commands explained here are tested against SunOS

How to change password for my UNIX account

Use the command "passwd" to change password of your UNIX account


bash-3.00$ passwd
passwd: Changing password for fwire
Enter existing login password:
New Password:
Re-enter new Password:
passwd: They don't match.
Please try again
New Password:


As I dont want to change my existing one, I gave it wrong :-) !!

Friday, November 25, 2011

How UNIX differs from other Operating System

UNIX is an operating system as like other OS available in market. Its does the task as any other OS does, running programmes, managing resources and communicating with other computer systems.

The uniqueness of UNIX OS is, multiple users can access the same system simultenously, hence we call UNIX a multiuser system. Multiple users can access the machine, run their programmes, do their work all in the same computer, which is not possible in a windows OS. Moreover these users can run multiple programmes from a UNIX machine, hence it is called a multitasking system.

UNIX is also called as a Multichoice system as it has three different primary command-line interface. This command line interface is called shell. Three available flavours of this command-line interface (shell) are Bourne shell, Korn shell and C shell.

UNIX has more than 250 individual commands ranging from simpler to complex ones for high speed networking, developing software and file revision management. Whereas Microsfot MS-DOS and Apple Macintosh has very fewer commands. These interfaces are easy to use which give only less controll to the user.

The way unix system stores data, ordering of files, connection to the external devices are entirely different from Windows or Macintosh OS. Unix use plain text for storing data; it has a hierarchical file system. Everything in UNIX is a file. Every programme, data, external devices everything. It treat devices and certain types of inter-process communication as files.

Tuesday, November 22, 2011

UNIX: Search for files

The grep command helps you to search with the text pattern in the file or filenames. It helps you to find the files by their content. Whereas find command helps you in searching for the files.

Examples:

1. Print all directories and filenames under the current directory
bash-3.00$ find . (dont miss the dot here)
.
./wm-dev
./wm-dev/bin
./wm-dev/bin/exec.sh
./wm-dev/config

2. Print all directories and filenames under the current directory/directory

bash-3.00$ find wm-dev
wm-dev
wm-dev/bin
wm-dev/bin/exec.sh
wm-dev/config

You can notice that the list printed starts with the searching directory.

3. Print all directories and filenames under the current directory/directory/directory
bash-3.00$ find wm-dev/bin
wm-dev/bin
wm-dev/bin/exec.sh

4. From the root directory search for a filename of the given pattern 'exec.sh'
bash-3.00$ find . | grep 'exec.sh'
./wm-dev/bin/exec.sh
./wm-cn/bin/ca7-orig/exec.sh.orig
./wm-cn/bin/exec.sh
./wm-cn/bin-old/exec.sh
./wm-cn-dev/bin/exec.sh
./wm-prod-dev-old/bin/exec.sh
./wm-prod-dev/bin/exec.sh
./wm-prod-dev/bin/exec.sh_090909

Another one alternative for the above option.
bash-3.00$ find . -name "exec.sh"
./wm-dev/bin/exec.sh
./wm-cn/bin/ca7-orig/exec.sh.orig
./wm-cn/bin/exec.sh
./wm-cn/bin-old/exec.sh
./wm-cn-dev/bin/exec.sh
./wm-prod-dev-old/bin/exec.sh
./wm-prod-dev/bin/exec.sh
./wm-prod-dev/bin/exec.sh_090909

Find files that have been modified in last 5 days (with minus)
find . -mtime -5

Find files that was modified exactly 5 days before (without minus)
find . -mtime 5

Find files that was not modified for past 5 days (with +)
find . -mtime +5

Find files in multiple directories.
find usr bin -name "*.cp"

List the directories alone.
find . -type d

List the files alone.
find . -type f


Hope this is helpful. Thanks Phoenix...

UNIX: Terminating a process

You can terminate a process using the KILL command. To KILL a process you need to have the process ID passed to the KILL command.

There are different types of signals that you pass to a process.
1    SIGHUP - Hang Up
2    SIGINT - Interrrupt
9    SIGKILL - Kill Immediate
15  SIGTERM - Terminate

SIGHUP signal is sent to every process you are running just before you log out of the system.
SIGINT signal is sent when you press ctrl+c
SIGKILL - Kills a process immediately. Temporary files are not deleted here.
SIGTERM - Immediate termination of progamme but allows cleaning up the temporary files.

The default signal with KILL command is SIGTERM.

You can specify the signals with KILL command either by their number or by their name without the SIG
eg:-
kill -9 process.sh
or
kill KILL process.sh

Basically there are 30 different signals in UNIX. The above explained are the most important ones.

Example:
Finding the jobs
bash-3.00$ jobs
[2]-  Stopped                 vi
[3]+  Stopped                 vi
Killing the job with % (here we terminates the job)
bash-3.00$ kill %2
bash-3.00$ jobs
[2]-  Done                    vi
[3]+  Stopped                 vi
Finding Jobs:
bash-3.00$ jobs
[3]+  Stopped                 vi
Killing jobs with KILL signal (-KILL is missing)
bash-3.00$ kill KILL %3
bash: kill: KILL: arguments must be process or job IDs
starting a process in the background
bash-3.00$ vi &
[1] 28236
bash-3.00$ jobs
[1]+  Stopped                 vi
Kill process with signal number (kill immediate)
bash-3.00$ kill -9 28236
bash-3.00$ jobs
[1]+  Killed                  vi
Checking for jobs
bash-3.00$ jobs
No jobs left

create new job in bg
bash-3.00$ vi &
[1] 28321

bash-3.00$ jobs
[1]+  Stopped                 vi

Kill with signal number option for termination
bash-3.00$ kill -15 28321

bash-3.00$ jobs
[1]+  Stopped                 vi
bash-3.00$ kill 28321
bash-3.00$ jobs
[1]+  Stopped                 vi
bash-3.00$ kill -KILL 28321
bash-3.00$ jobs
[1]+  Killed                  vi
Note: Inorder to run the kill command for a second time to make sure that the kill works, enter "!!"

UNIX: Find the running processes

Finding out Jobs that runs in your UNIX system is a simple task. The command, jobs, helps you to list the jobs which are either stopped or moved to background for process.


Below code automatically moves the vi process to the background
bash-3.00$ vi &
[1] 27467

On entering hte "jobs" command it listed the jobs that are stopped in the background.

bash-3.00$ jobs
[1]+  Stopped                 vi
bash-3.00$
Alternative to find the processes running in your UNIX system:
The command ps is another one alternative to find the jobs running in your UNIX system. This is a little complex. The command ps stands for processor status and it lists out the processor status of the entire computer.


bash-3.00$ ps
   PID TTY         TIME CMD
 27467 pts/15      0:00 vi
 27469 pts/15      0:00 ps
  3784 pts/15      0:01 bash
  3780 pts/15      0:00 sh

Monday, November 21, 2011

UNIX Process or Jobs: Suspend and Resume

In unix whatever command you execute from the command line initiate a process. Say for example you tried ls tol list files invokes the process ls.  In UNIX any program that's running is a process. You can have multiple process running at once.

Any program that you are running is known as current job.

States of Jobs/Process:
There are different states for the Jobs/Process in UNIX. The most important one is "running".

Stopping and restarting a Job:
A job can be stopped by pressing ctrl+z and to restart it enter fg.

bash-3.00$ ./logging.sh
Stopping the server please wait .........\n
Tue Nov 22 12:08:52 IST 2011
Invoking the PL/SQL Procedures and Bulk add command \n
Bulk Add Start Time:
Tue Nov 22 12:08:52 IST 2011
^Z
[1]+  Stopped                 ./logging.sh
bash-3.00$ fg
./logging.sh
Bulk Add End Time:
Tue Nov 22 12:09:09 IST 2011
Done with  PL/SQL Procedures and Bulk add. Starting the server. Please wait....\n
Tue Nov 22 12:09:09 IST 2011
1
bash-3.00$
Why we use ctrl+z to stop and fg to restart it later?
These commands helps us to stop a a job or process (ctrl+z) that we are doing currently and perform some other job and then resume (fg) our stopped job later.

For example if we are working on a vi editor editing our file and in between you want to execute some other programme press ctrl+z and once after completing your second job you can resume to editing your file by entering fg.

bash-3.00$ vi
I am testing stopping job and resuming it later
let me stop the job now !!
i am pressing ctrl+z!!   ^Z^Z^Z^Z^Z^Z
ooops!! Before pressing ctrl+z we should be in command mode!!
Moving to command mode and then pressing ctrl+z

~
~
~
Incomplete shell escape command - use 'shell' to get a shell
[1]+  Stopped                 vi
bash-3.00$
bash-3.00$ ls -l | tail -5
-rw-r--r--   1 fwire    fwire       1331 Apr 20  2011 publishpreview.sh
-rw-r--r--   1 fwire    fwire         11 Feb 25  2011 publishpreview_dummy.sh
-rw-r--r--   1 fwire    fwire        275 Oct 15 17:28 shiyas_new.txt
-rw-r--r--   1 fwire    fwire       1622 Oct 15 16:35 test.sh
-rw-r--r--   1 fwire    fwire        313 Oct 15 17:15 uniqtest.txt
bash-3.00$fg
 I am testing stopping job and resuming it later
let me stop the job now !!
i am pressing ctrl+z!!   ^Z^Z^Z^Z^Z^Z
ooops!! Before pressing ctrl+z we should be in command mode!!
Moving to command mode and then pressing ctrl+z


I am back !!
~