LINUX OS
Linux is an operating system or a kernel. It is distributed under an open source license.
Its functionality list is quite like UNIX.
Who created Linux?
Linux is an operating system or a kernel which germinated as an idea in the mind of
young and bright Linus Torvalds when he was a computer science student. He used to
work on the UNIX OS (proprietary software) and thought that it needed
improvements. However, when his suggestions were rejected by the designers of UNIX,
he thought of launching an OS which will be receptive to changes, modifications
suggested by its users.
As time passed by, he collaborated with other programmers in places like MIT and
applications for Linux started to appear. So around 1991, a working Linux operating
system with some applications was officially launched, and this was the start of one of
the most loved and open-source OS options available today.The earlier versions of
Linux were not so user-
friendly as they were in use by computer programmers and Linus Torvalds never had it
in mind to commercialize his product.
This definitely curbed the Linux's popularity as other commercially oriented Operating
System Windows got famous. Nonetheless, the open-source aspect of the Linux
operating system made it more robust.
The main advantage of Linux was that programmers were able to use the Linux Kernel to
design their own custom operating systems. With time, a new range of user-friendly
OS's stormed the computer world. Now, Linux is one of the most popular and widely
used Kernel, and it is the backbone of popular operating systems like Debian,
Knoppix, Ubuntu, and Fedora. Nevertheless, the list does not end here as there are
thousands of OS's based on Linux which offer a variety of functions to the users. Linux
Kernel is normally used in combination of GNU project by Dr. Richard Stallman. All
mordern distributions of Linux are actually distributions of Linux/GNU
Properties of Linux
Linux Pros
A lot of the advantages of Linux are a consequence of Linux' origins, deeply rooted in
UNIX, except for the first advantage, of course:
1. Linux is free:
If you want to spend absolutely nothing, you don't even have to pay the price of a CD.
Linux can be downloaded in its entirety from the Internet completely for free. No
registration fees, no costs per user, free updates, and freely available source code in
case you want to change the behavior of your system.
2. Most of all, Linux is free as in free speech:
The license commonly used is the GNU Public License (GPL). The license says that
anybody who may want to do so, has the right to change Linux and eventually to
redistribute a changed version, on the one condition that the code is still available after
redistribution
3. Linux is portable to any hardware platform:
A vendor who wants to sell a new type of computer and who doesn't know what kind
of OS his new machine will run (say the CPU in your car or washing machine), can take
a Linux kernel and make it work on his hardware.
4. Linux is secure and versatile:
The security model used in Linux is based on the UNIX idea of security, which is known
to be robust and of proven quality. But Linux is not only fit for use as a fort against
enemy attacks from the Internet: it will adapt equally to other situations, utilizing the
same high standards for security. Your development machine or control station will be
as secure as your firewall.
5. Linux is scalable:
From a Palmtop with 2 MB of memory to a petabyte storage cluster with hundreds of
nodes: add or remove the appropriate packages and Linux fits all. You don't need a
supercomputer anymore, because you can use Linux to do big things using the
building blocks provided with the system. If you want to do little things, such as
making an operating system for an embedded processor or just recycling your old
486, Linux will do that as well.
What is Kernel in Operating System?
The kernel is the central component of a computer operating systems. The only job
performed by the kernel is to the manage the communication between the software
and the hardware. A Kernel is at the nucleus of a computer. It makes the
communication between the hardware and software possible. While the Kernel is the
innermost part of an operating system, a shell is the outermost one.
Tutorial One
1.1 Listing files and directories (ls)
When you first login, your current working directory is your home directory. Your
home directory has the same name as your user-name, for example, nye1, and it is
where your personal files and subdirectories are saved.
To find out what is in your home directory type
ls
The ls command lists the contents of your current working directory.
However, it does not cause all the files in your home directory to be listed, but only
those ones whose name does not begin with a dot (.) Files beginning with a dot (.)
are known as hidden files and usually contain important program configuration
information. They are hidden because you should not change them unless you are
familiar with Linux.
To list all files in your home directory including those whose names begin with a dot,
type
ls -a
ls is an example of a command which can take options: -a is an example of an option.
The options change the behaviour of the command. There are online manual pages
that tell you what options a particular command can take, and how each option
modifies the behaviour of the command. The online manual command is covered in
tutorial 4.3.
ls -l
ls -lt
ls -lS
ls -lrS
ls -lrt
1.2 Making Directories (mkdir)
We will now make a subdirectory in your home directory to hold the files you will be
creating and using in the course of this tutorial. To make a subdirectory called
unixstuff in your current working directory type
mkdir unixstuff
To see the directory you have just created, type
ls
1.3 Changing to a different directory (cd)
The command cd directory means change the current working directory to
'directory'. The current working directory may be thought of as the directory you are
in, i.e. your current position in the file-system tree.
To change to the directory you have just made, type
cd unixstuff
Type ls to see the contents (which should be empty)
Exercise 1a
Make another directory inside the unixstuff directory called backups
1.4 The directories . and ..
Still in the unixstuff directory, type
ls -a
As you can see, in the unixstuff directory (and in all other directories), there are two
special directories called . and ..
In Linux . means the current directory, so typing
cd .
There is a space between cd and the dot. There is normally always a space between
the command and the argument.
This may not seem very useful at first, but using (.) as the name of the current
directory will save a lot of typing, as we shall see later in the tutorial. (..) means the
parent of the current directory, so typing
cd ..
will take you one directory up the hierarchy (back to your home directory). Try it now.
Typing cd with no argument always returns you to your home directory. This is very
useful if you are lost in the file system.
1.5 Pathnames (pwd)
Pathnames enable you to work out where you are in relation to the whole file-
system. For example, to find out the absolute pathname of your home-directory, type
cd to get back to your home-directory and then type
pwd
/home/n/nye1
Exercise 1b
Use the commands ls, pwd and cd to explore the file system.
(Remember, if you get lost, type cd by itself to return to your home-directory)
1.6 More about home directories and pathnames
Understanding pathnames
First type cd to get back to your home-directory, then type
ls unixstuff
to list the contents of your unixstuff directory. Now type
ls backups
backups: No such file or directory
This is simply because you have not created a directory called backups.
Now, create a sub-directory of unixstuff named backups:
cd unixstuff/
mkdir backups
ls backups/
Note that it is not necessary to be in the unixstuff directory to create a subdirectory
of it. A quicker alternative would be:
mkdir unixstuff/backups
ls unixstuff/backups
~ (your home directory)
Home directories can also be referred to by the tilde ~ character. It can be used to
specify paths starting at your home directory. So typing
ls ~/unixstuff
will list the contents of your unixstuff directory, no matter where you currently are in
the file system.
What do you think the following would list?
ls ~
What do you think the following would list?
2.1 Copying Files and Directories (cp)
cp file1 file2 is the command which makes a copy of file1 in the current working
directory and calls it file2.
What we are going to do now is to take a file stored in an open access area of the file
system, and use the cp command to copy it to your unixstuff directory.
First, change to your unixstuff directory.
cd ~/unixstuff
Then at the shell prompt type:
cp /cm/shared/training/tutorial/science.txt .
Don't forget the dot (.) at the end. Remember, in UNIX, the dot means the current
directory. The above command means copy the file science.txt to the current
directory, keeping the name the same.
Directories can also be copied with the cp command, but it’s necessary to add the
option –R to do so. This option means ‘recursive’ and will copy the contents of the
directory as well as the directory itself, for example:
cp -R directory1 directory2
Try running
cp -R /cm/shared/training/tutorial ~/unixstuff
Exercise 2a
Create a backup of your science.txt file by copying it to a file called science.bak
2.2 Moving files and Directories (mv)
The move command has a variety of similar but subtly different uses. It can be used
to move a file to a different location (i.e. a different directory). It can also be used to
move multiple files to a different directory. It can also be used to rename a file or a
directory. For example:
mv file1 directory1/
This would move file1 from the current directory into directory1.
mv file1 file2 file3 directory1/
This would move file1, file2 and file3 from the current directory into directory1.
mv file1 file2
This would rename file1 as file2.
mv directory1/ directory2/
This would rename a directory. Finally,
mv file1 directory/file2
This would move and rename a file in one step.
We are now going to move the file science.bak to your backup directory. First,
change directories to your unixstuff directory (can you remember how?). Then, inside
the unixstuff directory, type
mv science.bak backups/
To see if it worked type
ls
ls backups
2.3 Removing Files (rm) and Directories (rmdir)
To delete (remove) a file, use the rm command. As an example, we are going to
create a copy of the science.txt file then delete it.
Inside your unixstuff directory, type
cp science.txt tempfile.txt
ls
rm tempfile.txt
ls
In order to delete an empty directory you can use the command
rmdir directory
However this won't remove directories that already have files in them, instead you
can use
rm -r directory
to recursively delete files in directory (use sparingly - there is no Recycle bin!)
You can use the rmdir command to remove a directory (make sure it is empty first).
Try to remove the backups directory. You will not be able to since Linux will not let
you remove a non-empty directory.
Exercise 2b
Create a directory called tempstuff using mkdir, then remove it using the rmdir
command.
2.4 Displaying the contents of a file on the screen
clear (clear screen)
Before you start the next section, you may like to clear the terminal window of the
previous commands so the output of the following commands can be clearly
understood.
At the prompt, type
clear
This will clear all text and leave you with the prompt at the top of the window.
cat (concatenate)
The command cat can be used to display the contents of a file on the screen. Type:
cat science.txt
As you can see, the file is longer than than the size of the window, so it scrolls past
making it unreadable.
less
The command less writes the contents of a file onto the screen a page at a time. Type
less science.txt
Press the space bar if you want to see another page, type q if you want to quit
reading.
As you can see, less is used in preference to cat for long files.
head
The head command writes the first ten lines of a file to the screen. First clear the
screen then type
head science.txt
Then type
head -5 science.txt
What difference did the -5 do to the head command?
tail
The tail command writes the last ten lines of a file to the screen. Clear the screen and
type
tail science.txt
How can you view the last 15 lines of the file?
2.5 Searching the contents of a file
Simple searching using less
Using less, you can search though a text file for a keyword (pattern). For example, to
search through science.txt for the word 'science', type
less science.txt
then, still in less (i.e. don't press q to quit), type a forward slash (/) followed by the
word to search for, e.g.
/science
As you can see, less finds and highlights the keyword. Type n to search for the next
occurrence of the word.
grep
grep is one of many standard UNIX utilities. It searches files for specified words or
patterns. First clear the screen, then type
grep science science.txt
As you can see, grep has printed out each line that contains the word science. Or has
it?
Try typing
grep Science science.txt
The grep command is case sensitive; it distinguishes between Science and science.
To ignore upper/lower case distinctions, use the -i option, i.e. type
grep -i science science.txt
Often when there is a lot of text it is useful to highlight the matches (this is a default
setting on ALICE / SPECTRE now but may not be on other systems)
grep --color -i science science.txt
To search for a phrase or pattern, you must enclose it in single quotes (the
apostrophe symbol). For example to search for the phrase spinning top, type
grep -i 'spinning top' science.txt
Some of the other options of grep are:
-v display those lines that do NOT match
-n precede each matching line with the line number
-c print only the total count of matched lines
Try some of them and see the different results. Don't forget, you can use more than
one option at a time, for example, the number of lines without the words science or
Science is
grep -ivc science science.txt
wc (word count)
A handy little utility is the wc command, short for word count. To do a word count on
science.txt, type
wc -w science.txt
To find out how many lines the file has, type
wc -l science.txt
To find out how many characters the file has, type
wc -m science.txt
3.1 Redirection
It is extremely common for processes initiated by Linux commands write to the
standard output (that is, they write to the terminal screen), and many take their input
from the standard input (that is, they read it from the keyboard). There is also the
standard error, where processes write their error messages, by default, to the terminal
screen.
Standard Input (STDIN) - Usually the keyboard
Standard Output (STDOUT) - Usually the Terminal
Standard Error (STDERR) - Usually the Terminal
3.2 Redirecting Standard Output
We use the > symbol to redirect the output of a command. Many of the commands
we have seen so far write their output to the terminal (for instance cat, ls, grep, tail,
head and wc all write to STDOUT). However we can redirect the output of any of these
commands to a file instead (the file can have any name you chose. If the file does not
exist it will be created, if it does exist it will be replaced.
The command echo prints its arguments to standard output. Compare these two
commands
echo "Hello World"
and
echo "Hello World" > output.txt
You can view the contents of your new file using
less output.txt
Exercise 3a
Create a file called list1 using a suitable text editor containing the following items one
per line: SASTRA,JVC,SCBT,Bioinformatics,linux
Now create a second file called list2 that contains the following items: Thanjavur,
India. Again save and close your file. You can view your files using a command such
as cat, more or less, for example
more list1
more list2
You should now have two files. We will use the cat command to join (concatenate)
these files into a new file called biglist. Type
cat list1 list2 > biglist
this command reads the contents of list1 and list2 in turn, and then writes the text
to the file biglist.
3.3 Appending data to an existing file
It was mentioned above that the redirection operator, >, will create a new file if one
does not exist, but it will overwrite the contents of a file if the file already exists. If we
want to add/append data to an existing file, rather than overwrite it, we need to use
the >> operator instead
For example, to append a kiwi to the file biglist we would type:
echo "mybbin" >> biglist
cat biglist
You will see that a mybbin was added to the list. Now repeat this using a single >
operator.
echo "linux and PERL" > biglist
cat biglist
You will see that all of the original content of the file has been lost and replaced with
the word linux and PERL
3.5 Redirecting Standard Input
Similarly we can use the < operator to redirect STDIN. For example, the sort
command read input from STDIN (the keyboard) and produces an alphabetically or
numerically sort list. Type
sort
Then type in the names of some vegetables. Press Return after each one, and hit
control-d after the last entry to return to the shell.
carrot
beetroot
artichoke
^d (control-d to stop)
The output will be
artichoke
beetroot
carrot
Instead of generating STDIN using the keyboard, we can use the < operator to
redirect the contents of a file to STDIN. For example, to sort your list of fruit, first re-
create biglist:
cat list1 list2 > biglist
then to sort it type:
sort < biglist
and the sorted list will be output to the screen.
4.1 Wildcards
The characters * and ?
The character * is called a wildcard, and will match against none or more character(s)
in a file (or directory) name. For example, in your unixstuff directory, type
ls list*
This will list all files in the current directory starting with list....
Try typing
ls *list
This will list all files in the current directory ending with ....list
The character ? will match exactly one character. So ls ?ouse will match files like
house and mouse, but not grouse. Try typing
ls ?list
ls list?
If you need to match a limit number of patterns you can use {pattern1,pattern2,etc}
ls list{1,2}
This can be used with most commands:
mkdir newdir{1,2,3,4,5}
The previous command would create 5 new directories
4.2 Filename conventions
We should note here that a directory is merely a special type of file. So the rules and
conventions for naming files apply also to directories.
In naming files, characters with special meanings such as / * & % , should be
avoided. Also, avoid using spaces within names. The safest way to name a file is to
use only alphanumeric characters, that is, letters and numbers, together with _
(underscore) and . (dot).
File names conventionally start with a lower-case letter, and may end with a dot
followed by a group of letters indicating the contents of the file. For example, all
files consisting of C code may be named with the ending .c, for example, prog1.c.
Then in order to list all files containing C code in your home directory, you need
only type ls *.c in that directory.
4.3 Getting Help
On-line Manuals
There are on-line manuals which gives information about most commands. The
manual pages tell you which options a particular command can take, and how each
option modifies the behaviour of the command. Type man command to read the
manual page for a particular command.
For example, to find out more about the wc (word count) command, type
man wc
Alternatively
whatis wc
gives a one-line description of the command, but omits any information about
options etc.
When you are not sure of the exact name of a command,
man –k keyword
will give you the commands with keyword in their manual page header. For
example, try typing
man –k list
5.1 Viewing file and directory permissions
In your unixstuff directory, type
ls -l
You will see that you now get lots of details about the contents of your directory,
similar to the example below.
The initial The user (nye1) and The date and time
character will group (cc_staff) which when the file was
be d if the file owns the file created
is a directory.
-rwxrw-r—- 1 nye1 cc_staff 700 2008-07-27 20:45 file1
A 9-letter code giving the access The size of the The name of
rights. In this case it’s read, write, the
execute for the owner (nye1); file in bytes file
read, write for the group
(cc_staff); read only for everyone
else.
Each file (and directory) has associated access rights, which may be found by typing
ls -l.
In the left-hand column is a 10-symbol string consisting of the symbols d, r, w, x, -,
and, occasionally, s or S. If d is present, it will be at the left hand end of the string,
and indicates a directory: otherwise - will usually be the starting symbol of the string,
indicating a normal file.
The 9 remaining symbols indicate the permissions, or access rights, and are taken as
three groups of 3.
The left group of 3 gives the file permissions for the user that owns the file (or
directory) (nye1 in the above example);
The middle group gives the permissions for the group of people to whom the
file (or directory) belongs (cc_staff in the above example);
The rightmost group gives the permissions for everyone else.
The symbols r, w, etc., have slightly different meanings depending on whether they
refer to a simple file or to a directory.
Access rights on files
r (or -), indicates read permission (or otherwise), that is, the presence or
absence of permission to read and copy the file
w (or -), indicates write permission (or otherwise), that is, the permission (or
otherwise) to change a file
x (or -), indicates execution permission (or otherwise), that is, the permission
to execute a file, where appropriate
Access rights on directories
r allows users to list files in the directory;
w means that users may delete files from the directory or move files into it;
x means the right to access files in the directory. This implies that you may
read files in the directory provided you have read permission on the individual
files.
So, in order to read a file, you must have execute permission on the directory
containing that file, and hence on any directory containing that directory as a
subdirectory, and so on, up the tree.
Some examples
-rwxrwxrwx a file that everyone can read, write and execute (and delete).
a file that only the owner can read and write - no-one else
-rw-------
can read or write and no-one has execution rights.
5.2 Changing access rights (chmod)
Only the owner of a file can use chmod to change the permissions of a file. The
options of chmod are as follows
Symbol Meaning
u user
g group
o other
a all
r read
w write (and delete)
x execute (and access directory)
+add permission
-take away permission
For example, to remove read write and execute permissions on the file biglist for the
group and others, type
chmod go-rwx biglist
This will leave the other permissions unaffected.
To give read and write permissions on the file biglist to all,
chmod a+rw biglist
Exercise 5a
Try changing access permissions on the file science.txt and on the directory backups
To check that the permissions have changed, use:
ls -l
5.3 Processes and Jobs
A process is an executing program identified by a unique PID (process identifier). To
see information about your processes, with their associated PID and status, type
ps
A process may be in the foreground, in the background, or be suspended. In general
the shell does not return the UNIX prompt until the current process has finished
executing.
Some processes take a long time to run and hold up the terminal. Backgrounding a
long process has the effect that the UNIX prompt is returned immediately, and other
tasks can be carried out while the original process continues executing.
Running background processes
To background a process, type an & at the end of the command line. For example, the
command sleep waits a given number of seconds before continuing. Type
sleep 10
This will wait 10 seconds before returning the command prompt. Until the command
prompt is returned, you can do nothing except wait.
to run sleep in the background, type
sleep 10 &
[1] 6259
The & runs the job in the background and returns the prompt straight away, allowing
you to run other programs while waiting for that one to finish.
The first line in the above example is typed in by the user; the next line, indicating job
number and PID, is returned by the machine. The user is be notified of a job number
(numbered from 1) enclosed in square brackets, together with a PID and is notified
when a background process is finished. Backgrounding is useful for jobs which will take
a long time to complete.
Backgrounding a current foreground process
At the prompt, type
sleep 100
You can suspend the process running in the foreground by holding down the Control
key and typing z (written as ^z) Then to put it in the background, type
bg
Note: do not background programs that require user interaction e.g. nano.
5.4 Listing suspended and background processes
When a process is running, backgrounded or suspended, it will be entered onto a list
along with a job number. To examine this list, type
jobs
An example of a job list could be
[1] Suspended sleep 100
[2] Running firefox
[3] Running nedit
To restart (foreground) a suspended processes, type
fg %jobnumber
For example, to restart sleep 100, type
fg %1
Typing fg with no job number foregrounds the last suspended process.
5.5 Killing a process
kill (terminate or signal a process)
It is sometimes necessary to kill a process (for example, when an executing program is
in an infinite loop)
To kill a job running in the foreground, type ^c (control-c). For example, run
sleep 100
^c
To kill a suspended or background process, type
kill %jobnumber
For example, run
sleep 100 &
jobs
If it is job number 4, type
kill %4
To check whether this has worked, examine the job list again to see if the process has
been removed.
ps (process status)
Alternatively, processes can be killed by finding their process numbers (PIDs) and using
kill PID_number
sleep 100 &
ps
PID TT S TIME COMMAND
20077 pts/5 S 0:05 sleep 100
21563 pts/5 T 0:00 netscape
21873 pts/5 S 0:25 nedit
To kill off the process sleep 100, type
kill 20077
and then type ps again to see if it has been removed from the list. If a process refuses
to be killed, uses the -9 option, i.e. type
kill -9 20077
Note: It is not possible to kill off other users' processes!
Automation of commands using shell scripts
Once you have become used to basic commands and finding your way around a
Linux system you may want to automate tasks which are executed frequently. This
can be done with shell scripts – lists of commands to run in sequence. This is a
simple but powerful form of programming which with loops and conditional
statements allows complex sequences of commands to be run, saving much time.
9.1 Basic shell script
Create and edit a file called test.sh:
#!/bin/bash
echo “Hello $USER”
The line at the beginning is called a shebang, sha-bang, hashbang, pound-bang or
hash-pling and tells the computer that the script should be run in a bash shell. The
script knows that everything beginning with a dollar sign ($) is a variable and will use
the value of the environment variable $USER (see section 7.2)
Once you have finished editing the file, close the editor and make the file executable
with ‘chmod’, which you used in section 5.2
chmod +x test.sh
Before you run the script, what do you think the output will be?
Now run the script:
./test.sh
9.2 Using variables
As well as using environment variables, new variables can created and used within
your script. The example below uses a new variable, NUMLOGINS.
Note that you do not need to use the dollar sign when you create the variable, only to
refer to it once it has been created. The $( command ) construct is used in this instance
to pass the output of a command or commands and assign the value to the new
variable.
bin/bash
echo “Hello $USER”
NUMLOGINS=$(who | grep $USER | wc -l) echo
“You have $NUMLOGINS login sessions”
9.3 Looping with ‘for’
Rather than simply process a sequence of commands one after the other, loops can
perform the same commands for different variables. The example below uses the
variable $user which is set up at the beginning of the ‘for’ loop. Note that this is not
the same as the $USER environment variable as variable names are case sensitive.
#!/bin/bash
for user in gg78 ljg2 root
do
NUMLOGINS=$(who | grep $user | wc –l)
echo “$user has $NUMLOGINS sessions”
done
The script loops over the section between ‘do’ and ‘done’ once for each value of
$user specified by the line beginning with ‘for’.
Numbers can be used instead of variables in the loop so that the script can keep
track of which number loop it is on:
#!/bin/bash
for i in 1 2 3 4 5
do
echo “loop $i”
done
If the script needs to loop a lot of times, this notation can be used:
for i in {1..20}
This will loop 20 times with the value of $i incrementing by 1 each time. If
incrementing by a value other than 1 is required then use the ‘seq’ command, eg:
for i in $(seq 0 0.5 4)
This will give values for $i from 0 to 4, incrementing by 0.5
9.4 Conditional statements
“if / then / else” statements allow conditional branching within a script. This script
tests the value of a variable and then decides which branch to take (and therefore
what to output), depending on that value.
#!/bin/bash
NUMLOGINS=$(who | grep $USER | wc –l)
if [ $NUMLOGINS -gt 1 ]
then
echo "$USER is logged in with at least 2 sessions"
else
echo "$USER has less than 2 sessions"
fi
The ‘if … then … else’ statement must be finished with ‘fi’. The ‘else’ option is
optional – the script will carry on past ‘fi’ if you do not use it.
‘-gt’ is short for ‘greater than’. Other tests include:
-eq is equal to
-ne is not equal to
-ge is greater than or equal to
-lt is less than
-le is less than or equal to