UNIX Tutorial: Typographical Conventions
UNIX Tutorial: Typographical Conventions
Typographical conventions
% ls anydirectory [Enter]
Don't forget to press the [Enter] key: commands are not sent to the
computer until this is done.
UNIX Introduction
This session concerns UNIX, which is a common operating system.
By operating system, we mean the suite of programs which make
the computer work. UNIX is used by the workstations and multi-
user servers within the school.
The kernel
As an illustration of the way that the shell and the kernel work
together, suppose a user types rm myfile (which has the effect
of removing the file myfile). The shell searches the filestore for the
file containing the program rm, and then requests the kernel,
through system calls, to execute the program rm on myfile. When
the process rm myfile has finished running, the shell then
returns the UNIX prompt % to the user, indicating that it is waiting
for further commands.
The shell
The shell acts as an interface between the user and the kernel.
When a user logs in, the login program checks the username and
password, and then starts another program called the shell. The
shell is a command line interpreter (CLI). It interprets the
commands the user types in and arranges for them to be carried
out. The commands are themselves programs: when they
terminate, the shell gives the user another prompt (% on our
systems).
The adept user can customise his/her own shell, and users can use
different shells on the same machine. Staff and students in the
school have the tcsh shell by default.
The tcsh shell has certain features to help the user inputting
commands.
History - The shell keeps a list of the commands you have typed in.
If you need to repeat a command, use the cursor keys to scroll up
and down the list or type history for a list of previous commands.
Examples of files:
All the files are grouped together in the directory structure. The file-
system is arranged in a hierarchical structure, like an inverted tree.
The top of the hierarchy is traditionally called root.
In the diagram above, we see that the directory ee51ab contains
the subdirectory unixstuff and a file proj.txt
An Xterminal window will appear with a Unix prompt, waiting for you
to start entering commands.
UNIX Tutorial One
1.1 Listing files and directories
ls (list)
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, ee91ab, and it is where your personal files and
subdirectories are saved.
To list all files in your home directory including those whose names
begin with a dot, type
% ls -a
% mkdir unixstuff
% ls
cd (change directory)
Exercise 1a
% ls -a
% cd .
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.
% cd ..
will take you one directory up the hierarchy (back to your home
directory). Try it now.
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
/a/fservb/fservb/fservb22/eebeng99/ee91ab
Note:
/a/fservb/fservb/fservb22/eebeng99/ee91ab
can be shortened to
/user/eebeng99/ee91ab
Exercise 1b
Use the commands ls, pwd and cd to explore the file system.
Understanding pathnames
% ls unixstuff
to list the conents of your unixstuff directory.
Now type
% ls backups
% ls unixstuff/backups
% ls ~/unixstuff
will list the contents of your unixstuff directory, no matter where you
currently are in the file system.
% ls ~
would list?
% ls ~/..
would list?
Summary
cp (copy)
% cd ~/unixstuff
% cp /vol/examples/tutorial/science.txt .
(Note: 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.
Exercise 2a
mv (move)
It can also be used to rename a file, by moving the file to the same
directory, but giving it a different name.
% mv science.bak backups/.
% cp science.txt tempfile.txt
% ls (to check if it has created the file)
% rm tempfile.txt
% ls (to check if it has deleted the file)
Exercise 2b
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.
% clear
This will clear all text and leave you with the % prompt at the top of
the window.
cat (concatenate)
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
head
The head command writes the first ten lines of a file to the screen.
% head science.txt
Then type
% head -5 science.txt
tail
The tail command writes the last ten lines of a file to the screen.
% tail science.txt
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
/science
As you can see, less finds and highlights the keyword. Type [n]
to search for the next occurrence of the word.
As you can see, grep has printed out each line containg the word
science.
Or has it????
Try typing
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
wc (word count)
% wc -w science.txt
% wc -l science.txt
Summary
We have already seen one use of the cat command to write the
contents of a file to the screen.
% cat
Then type a few words on the keyboard and press the [Return]
key.
Finally hold the [Ctrl] key down and press [d] (written as ^D
for short) to end the input.
Then type in the names of some fruit. Press [Return] after each
one.
pear
banana
apple
^D (Control D to stop)
What happens is the cat command reads the standard input (the
keyboard) and the > redirects the output, which normally goes to
the screen, into a file called list1
% cat list1
Exercise 3a
Using the above method, create another file called list2 containing
the following fruit: orange, plum, mango, grapefruit. Read the
contents of list2
peach
grape
orange
^D (Control D to stop)
% cat list1
You should now have two files. One contains six fruit, the other
contains four fruit. We will now use the cat command to join
(concatenate) list1 and list2 into a new file called biglist. Type
What this is doing is reading the contents of list1 and list2 in turn,
then outputing the text to the file biglist
% cat biglist
% sort
carrot
beetroot
artichoke
^D (control d to stop)
artichoke
beetroot
carrot
Using < you can redirect the input to come from a file rather than
the keyboard. For example, to sort the list of fruit, type
3.4 Pipes
% who
% who | sort
will give the same result as above, but quicker and cleaner.
% who | wc -l
Exercise 3b
Using pipes, print all lines of list1 and list2 containing the letter 'p',
sort the result, and print to the printer hockney.
Summary
command > file redirect standard output to a file
command >> file append standard output to a file
command < file redirect standard input from a file
pipe the output of command1 to the input of
command1 | command2
command2
cat file1 file2 >
concatenate file1 and file2 to file0
file0
sort sort data
who list users currently logged in
a2ps -Pprinter
print text file to named printer
textfile
lpr -Pprinter psfile print postscript file to named printer
% 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
Beware: some applications give the same name to all the output
files they generate.
On-line Manuals
For example, to find out more about the wc (word count) command,
type
% man wc
Alternatively
% whatis wc
Apropos
% apropos keyword
will give you the commands with keyword in their manual page
header. For example, try typing
% apropos copy
Summary
Each file (and directory) has associated access rights, which may
be found by typing ls -l. Also, ls -lg gives additional
information as to which group owns the file (beng95 in the following
example):
• The left group of 3 gives the file permissions for the user that owns
the file (or directory) (ee51ab in the above example);
• the middle group gives the permissions for the group of people to
whom the file (or directory) belongs (eebeng95 in the above
example);
• the rightmost group gives the permissions for all others.
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 (e.g. your
mailbox file).
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
Exercise 5a
% ps
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.
% sleep 10
% sleep 10 &
[1] 6259
The & runs the job in the background and returns the prompt
straight away, allowing you do 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.
% sleep 100
% bg
% jobs
% fg %jobnumber
% fg %1
% sleep 100
^C
% kill %jobnumber
% kill %4
To check whether this has worked, examine the job list again to see
if the process has been removed.
ps (process status)
% kill 20077
and then type ps again to see if it has been removed from the list.
% kill -9 20077
Summary
quota
All students are allocated a certain amount of disk space on the file
system for their personal files, usually about 5 Megabyes
(equivalent to 4 floppy disks worth). If you go over your quota, you
are given 7 days to remove excess files.
To check your current quota and how much of it you have used,
type
% quota -v
df
The df command reports on the space left on the file system. For
example, to find out how much space is left on the fileserver, type
% df .
du
% du
compress
This reduces the size of a file, thus freeing valuable disk space. For
example, type
% ls -l science.txt
and note the size of the file. Then to compress science.txt, type
% compress science.txt
This will compress the file and place it in a file called science.txt.Z
% uncompress science.txt.Z
gzip
% gzip science.txt
This will zip the file and place it in a file called science.txt.gz
% gunzip science.txt.gz
file
file classifies the named files according to the type of data they
contain, for example ascii (text), pictures, compressed data, etc..
To report on all files in your home directory, type
% file *
history
The C shell keeps an ordered list of all the commands that you
have entered. Each command is given a number according to the
order it was entered.
If you are using the C shell, you can use the exclamation character
(!) to recall commands easily.
% set history=100
The make program gets its set of compile rules from a text file
called Makefile which resides in the same directory as the source
files. It contains information on how to compile the software, e.g.
the optimisation level, whether to include debugging info in the
executable. It also contains information on where to install the
finished compiled binaries (executables), manual pages, data files,
dependent library files, configuration files, etc.
Some packages require you to edit the Makefile by hand to set the
final installation directory and any other parameters. However,
many packages are now being distributed with the GNU configure
utility.
configure
The only generic options you are likely to use are the --prefix
and --exec-prefix options. These options are used to
specify the installation directories.
% mkdir download
% cd download
% ls -l
As you can see, the filename ends in tar.gz. The tar command
turns several files and directories into one single tar file. This is
then compressed using the gzip command (to create a tar.gz file).
First unzip the file using the gunzip command. This will create
a .tar file.
% gunzip units-1.74.tar.gz
% cd units-1.74
The units package uses the GNU configure system to compile the
source code. We will need to specify the installation directory, since
the default will be the main system area which you will not have
write permissions for. We need to create an install directory in your
home directory.
% mkdir ~/units174
Then run the configure utility setting the installation path to this.
% ./configure --prefix=$HOME/units174
NOTE:
% echo $HOME
If configure has run correctly, it will have created a Makefile with all
necessary options. You can view the Makefile if you wish (use the
less command), but do not edit the contents of this.
Now you can go ahead and build the package by running the make
command.
% make
% make check
% make install
This will install the files into the ~/units174 directory you created
earlier.
7.6 Running the software
% cd ~/units174
If you list the contents of the units directory, you will see a number
of subdirectories.
% ./units
* 1.8288
To view what units it can convert between, view the data file in the
share directory (the list is quite comprehensive).
To read the full documentation, change into the info directory and
type
% info --file=units.info
This is useful for the programmer, but unnecessary for the user. We
can assume that the package, once finished and available for
download has already been tested and debugged. However, when
we compiled the software above, debugging information was still
compiled into the final executable. Since it is unlikey that we are
going to need this debugging information, we can strip it out of the
final executable. One of the advantages of this is a much smaller
executable, which should run slightly faster.
What we are going to do is look at the before and after size of the
binary file. First change into the bin directory of the units installation
directory.
% cd ~/units174/bin
% ls -l
As you can see, the file is over 100 kbytes in size. You can get
more information on the type of file by using the file command.
% file units
To strip all the debug and line numbering information out of the
binary file, use the strip command
% strip units
% ls -l
As you can see, the file is now 36 kbytes - a third of its original size.
Two thirds of the binary file was debug code !!!
% file units
units: ELF 32-bit LSB executable, Intel
80386, version 1, dynamically linked (uses
shared libs), stripped
% echo $OSTYPE
% printenv | less
% echo $history
SHELL variables are both set and displayed using the set
command. They can be unset by using the unset command.
% set | less
Each time the shell variables home, user and term are changed,
the corresponding environment variables HOME, USER and TERM
receive the same values. However, altering the environment
variables has no effect on the corresponding shell variables.
Each time you login to a UNIX host, the system looks in your home
directory for initialisation files. Information in these files is used to
set up your working environment. The C and TC shells uses two
files called .login and .cshrc (note that both file names begin with a
dot).
.login is to set conditions which will apply to the whole session and
to perform actions that are relevant only at login.
% echo $history
However, this has only set the variable for the lifetime of the current
shell. If you open a new xterm window, it will only have the default
history value set. To PERMANENTLY set the value of history, you
will need to add the set command to the .cshrc file.
% nedit ~/.cshrc
Save the file and force the shell to reread its .cshrc file buy using
the shell source command.
% source .cshrc
% echo $history
When you type a command, your path (or PATH) variable defines
in which directories the shell will look to find the command you
typed. If the system returns a message saying "command:
Command not found", this indicates that either the command
doesn't exist at all on the system or it is simply not in your path.
For example, to run units, you either need to directly specify the
units path (~/units174/bin/units), or you need to have the directory
~/units174/bin in your path.
You can add it to the end of your existing path (the $path
represents this) by issuing the command:
% cd; units