CMSC 106 CMSC 106 UNIX Tutorial Fall 2006: Larry Herman Jandelyn Plane Gwen Kaye July 27, 2007
CMSC 106 CMSC 106 UNIX Tutorial Fall 2006: Larry Herman Jandelyn Plane Gwen Kaye July 27, 2007
Larry Herman
Jandelyn Plane
Gwen Kaye
July 27, 2007
Contents
1 Introduction 2
2 Getting started 3
2.1 Logging in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Changing your password, and password security . . . . . . . . . . . . . . . . . . . . . . 3
2.3 Logging out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Printing files 4
1
5.9 Renaming (moving) a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.10 Deleting (removing) a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.11 Moving to a higher directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.12 Directory hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.13 Removing (deleting) a subdirectory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.14 Copying a file from another directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.15 Wildcard characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.16 Disk quota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.17 Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7 Submitting programs 17
8 Aliases 18
8.1 Adding aliases to the .aliases file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1 Introduction
This document is a basic introduction to the UNIX operating system, in particular the OIT Grace
UNIX Cluster and the UNIX facilities which you may need to use in your course. This tutorial covers
procedures for logging into the system, manipulating files and directories, compiling and running pro-
grams, submitting programs electronically, and other information. If you know all of this information
you don’t need to read most of this tutorial, but even so you will need to read about whatever material
you don’t know.
This tutorial is only an introduction, and hardly a comprehensive study of UNIX. UNIX is very
powerful, and only the most important capabilities which you may need for doing your work in this
course will be discussed. For those interested, further information on UNIX is available from OIT’s
website; see the link on the Information page of the class webpage.
2
This tutorial has explanatory material as well as activities you can perform. Information which
is to be typed exactly as it appears usually follows the UNIX prompt, which on the Grace cluster
depends on which of the machines you’re logged into, but will be of the format “posh:~:” (where
“posh” represents and will be replaced by the name of the specific machine you’re logged in to during
any session). The prompt is printed by the system to that it’s waiting for you to type your next
command in, but you don’t actually type the prompt yourself. Italic text represents information you
should fill in. Explanations will appear in regular type. Also, you should be aware that UNIX is
case-sensitive, that is, it distinguishes between lowercase and uppercase letters, so you will need to
type commands exactly as described.
2 Getting started
2.1 Logging in
There are three steps involved in logging into the system: specifying the machine you want to use,
giving your login id, and giving the password for that login id. Your login ID and password will just
be those for your Glue account.
Specifying the machine you will be using will vary from situation to situation. If you cannot
immediately see how to connect to the machines using the directions your TA has given in discussion
section, try coming to office hours. The Grace Cluster machines on which your Glue account works
can be logged in to by using ssh to connect to “grace.umd.edu”. Note that you have to use ssh to
connect to these machines, as telnet will not work. The OIT Grace cluster contains four machines,
two are running Sun’s Solaris version of UNIX, and two are running Linux. If you want to log into one
of the Solaris hosts specifically you can use ssh to connect to “solaris.grace.umd.edu”, while you can
connect to a Linux host using “linux.grace.umd.edu”. If you just log into grace.umd.edu you could be
connected to either type of host.
3
posh:~: passwd
You will be prompted for your new password. The request for you to retype your new password is
simply to insure you didn’t make any typing mistakes. When you are done, your new password will
be the password for your account until you change it again.
Always follow the following security practices related to passwords:
1. Never email your password to anyone, even a friend.
2. Do not write your password where anyone else may have access to it, even a friend.
3. Do not tell your password to anyone! This includes the instructional staff of this course; we have
no reason to ever ask for anyone’s password, and also includes your friends.
4. It’s a good idea to change your password periodically, just in case someone has been able to
guess your password or figure it out another way (perhaps by watching you type in one of the
labs while you were logging in). Someone might know your password at some point but just not
have used your account yet.
5. Don’t ever leave your terminal unattended in a public lab where someone could get access to
your account, even if you are just stepping out of the room for a minute. Lock the terminal if
possible, or log out. It would be better to log out and have to wait for another computer when
you return than to have someone steal or ruin all of your files.
Note that you should never leave your terminal unattended even if a friend you know from class
is nearby to watch it for you. Supposed friends have victimized students in the past by stealing
or ruining their files without their knowledge.
You could be held liable by the University for any damage caused by someone using your account,
even without your knowledge, if they were able to access your account through negligence such as
described above.
3 Printing files
The command to print one or more files to the OIT printers is:
posh:~: qpr -x duplex -q dispatch names–of–files–to–print
If you want to print on only one side of the page, omit the “-x duplex” option:
posh:~: qpr -q dispatch names–of–files–to–print
If you really want to save paper, you can use the mpage utility to print your files reduced so that
two pages fit on each side of each piece of paper. The command to do so is:
posh:~: mpage -2ft -Pdispatch names–of–files–to–print
4
Note there is no space between “-P” and “dispatch”. Since this command will print two pages
per each side of a piece of paper, and print on both sides of the page, therefore four pages of each file
will be printed on each piece of paper.
To use mpage to print two pages per each side of paper, but only single–sided, omit the ’t’ in the
options above:
posh:~: mpage -2f -Pdispatch names–of–files–to–print
Printouts sent to these printers can be picked up at the OIT dispatch counter, which is located at
the entrance of the A.V. Williams building closest to the Wind Tunnel. If you view the A.V. Williams
building as a large U, with the main entrance in the middle of the U, the OIT dispatch entrance is at
the upper–left–corner of the U; look for the sign which says “OIT Dispatch”. If you’re walking out of
the front of the CSIC building and you go between the Wind Tunnel and A.V. Williams, this entrance
will be on your right. You pick up printouts at the window by giving your Glue account ID. Note
that you can’t get to the dispatch counter from the rest of A.V. Williams; you have to exit and walk
around to the entrance which says “OIT Dispatch”.
Besides printing at the dispatch window, anyone with a WAM or Glue account can use the printers
in WAM and Glue labs, but you must first get a print account and pay by the page. Having a print
account can be convenient, so you don’t have to walk to the A.V. Williams building to get a printout.
Information on getting a print account and using pay–for–print can be found on OIT’s website; see
the link from the Information page of the class webpage.
5
machine, and the menu commands can’t be accessed using the mouse, so below we’ll explain how to
use the most common Emacs commands just using keystrokes.
4.1 Introduction
The Emacs editor uses modeless editing, meaning that commands always use a special key followed
by a letter or other symbol. For example, Control–f, that is, holding down the Control key and
pressing ’f’ at the same time, will move the cursor forward one character. Unless preceded by a special
key, ordinary characters typed are simply inserted in the document being edited. In the following
discussion C indicates the Control key while M indicates the Escape key (also known in Emacs as
the Meta key). C–f indicates that you should press the Control and, while holding the Control
key, then press the ’f’ key. On the other hand, M–v means you should press Escape and release it,
and then press ’v’.
6
4.4.1 Basic cursor movement commands
Experiment with these commands so that you will become familiar with them; for instance, type
M−> and see that the cursor moves to the bottom of the file you’re editing.
7
4.5 Saving a file
So far any work you have done hasn’t been written to a file. It is all stored in Emacs’ memory. To
write the current contents of the text stored in Emacs to the file whose name you typed when starting
Emacs, that is, “tempfile” above, type C−x C−s again, as you did earlier.
Very important: be sure to save your work often while you are working. Every programmer has
at least one horror story of typing a program for hours and just as it’s finished the power goes out or
the computer locks up for some reason, and all their work is lost. A good habit to get into is to type
C–x C–s every several minutes while you are working. Also, in order to avoid inadvertently deleting or
incorrectly changing the only copy of a file it’s essential to save at least one backup copy in a different
directory or with a different filename, using the UNIX commands explained below.
Cancel command:
C–g
8
Basic cursor movement commands:
forward one character C–f
backward one character C–b
previous (up) one line C–p
next (down) one line C–n
beginning of current line C–a
end of current line C–e
one whole page up M–v
one whole page down C–v
beginning of file M–<
end of file M–>
Several additional powerful and convenient features of Emacs are described in Section 10 at the end
of this tutorial, which can make editing files much more convenient, but since the commands described
in this section are sufficient to get started with we’ll defer discussion of those till later, after basic
UNIX commands have been explained.
9
In UNIX a single period (.) refers to the current directory, and two adjacent periods (..) refers
to the directory one level above (closer to the root) the current directory. The tilde symbol (~) refers
to your home directory, and the ~ followed by some other account ID refers to that account’s home
directory. Your home directory corresponds to your Glue login id and will not change; you will be
in your home directory as you log in each time. The current directory corresponds to your home
directory as you first log in, but the current directory will change each time you move to another
directory; things in the current directory will be assumed as the default when you give a command.
A pathname is a description of where a file (usually one which is not in the current directory)
appears, including the directory names which form a path to the directory where the file is located.
The slash (/) designates the root directory, and is also used to separate directory names in a pathname.
For instance, the pathname
/afs/glue/class/fall2006/cmsc/106/0101/public/testfile
refers to a file named “testfile” located in the “public” subdirectory of the “0101” subdirectory
of the “106” directory, etc. Files which are not in the current directory are sometimes specified using
a pathname showing where they are in relation to the root directory, as in this pathname. They are
even more commonly specified relative to the current directory or relative to a home directory (yours
or another user’s), using ~. The examples below show different ways of referring to files and use the
symbols mentioned above.
10
3. The third column specifies the name of the owner of the file, which will be your login ID for the
files you create.
4. The fifth column has the size of the file, in bytes.
5. The next three columns have the date of creation or of last modification of the file or directory.
6. The last column gives the name of the file or directory.
11
5.6 Creating new files in the current directory
Using a text editor (such as Emacs), create two small files in this directory. The first file named
“file1” should contain the following text:
This is file1.
The second file named “file2” should contain:
This is file2.
List the files in this directory in the way you did above. You should see file1 and file2 there now.
12
5.9 Renaming (moving) a file
“Move” file1 by giving it the new name file4:
posh:~: mv file1 file4
Look at file4 to see what it has in it:
posh:~: cat file4
List using ls. Now the directory should show file2, file3, and file4. Obviously, the difference between
a copy and a move is that copy makes an additional copy of the file while move “moves” the file’s
contents to another file. It should be noted that there is not actually a move, but a renaming of the
file. Since file1 was moved to file4, file1 is no longer in the directory.
file2 file4
But actually your “account” is just a subdirectory in the directory of accounts on the system. To
see the path, that is, the chain of directories leading from the root to your account, type the command
to print the working directory:
posh:~: pwd
The first slash in this listing of directories represents the root. The names which follow represent
directories leading directly from the root to your account directory. The slashes other than the first
are delimiters. cd .. will change to the next higher directory, and
posh:~: cd ~loginID
will return to your own directory (or as a shortcut you could simply type cd, which returns you to
your home directory.)
13
5.14 Copying a file from another directory
You may, if the permissions are set correctly, copy files from another account or directory. Your
instructor may have given you the name of a public directory for your class where you can access
certain materials which may be placed there. Try listing the files in that directory.
posh:~: ls -l /afs/glue/class/fall2006/cmsc/106/0101/public
Say there is a file named “tempfile” in this directory which you want to copy to your home directory.
You can either do this if you are located in your home directory, or if you are located in the directory
/afs/glue/class/fall2006/cmsc/106/0101/public.
The first way, assuming you are already located in your home directory:
posh:~: cp /afs/glue/class/fall2006/cmsc/106/0101/public/temp .
or
posh:~: cp /afs/glue/class/fall2006/cmsc/106/0101/public/temp temp2
The second form above copies the file temp to your home directory and names it temp2, while the
first form copies it to your home directory keeping its original name temp.
The second way to copy the file would be to change your location to the directory where the file
is (/afs/glue/class/fall2006/cmsc/106/0101/public), and copy the file to your home directory
from there:
posh:~: cd /afs/glue/class/fall2006/cmsc/106/0101/public
posh:~: cp temp ~
or
posh:~: cd /afs/glue/class/fall2006/cmsc/106/0101/public
posh:~: cp temp ~/temp2
Again, the first form retains the name temp for the copied file, while the second form makes a copy
of the file with the new name temp2.
A small test file named “testfile” has been placed in this directory. Experiment by copying this
file using both of these methods, using different file names. Once you have a few files in your directory
or even in some subdirectories, you can also experiment with the other UNIX commands listed above,
such as those to rename files, view files, etc.
Using the –r option with cp copies a subdirectory along with all the files it contains, from one
location to another.
14
The command “ls hw?” lists all files whose names are “hw” followed by any other character, in
other words, in this case the files hw1, hw2, and hw3.
The command “ls hw*” lists all files whose names begin with “hw” and are followed by any other
characters, in other words, the files hw1, hw1.ans, hw2, hw2.ans, hw3, and hw3.ans.
The command “ls *txt” lists all files whose names end in “txt”, in other words, the files an-
swer2.txt, answer3.txt, answer4.txt, answer5.txt, answer6.txt, and just txt.
The command “ls proj?.c” lists the files proj1.c, proj2.c, proj3.c, and proj4.c.
The command “ls pro*” lists program1, program2, proj1.c, proj2.c, proj3.c, and proj4.c.
The command “ls *2*” lists all files whose names contain a 2, which is answer2.txt, hw2, hw2.ans,
program2, and proj2.c.
Other commands besides ls can use wildcard characters, as in the following:
copy all files whose names end in “.c” from the
posh:~: cp ~fred/*.c .
user fred’s directory to your own
posh:~: rm hw? delete hw1, hw2, and hw3
Be very careful when using wildcard characters with the mv and rm commands, which can delete
or overwrite a file. If you’re not sure whether a command will work correctly, either don’t try it, or
make backup copies of your files under different names, or in a subdirectory, ahead of time. It is a
very good idea to always keep backup copies of any important files, in case you accidentally delete or
change them.
5.17 Pipelines
UNIX pipelines are used to run two commands, with the output of one command being used as the
input for another command. The simplest form of a piped command is:
posh:~: command1 | command2
This executes command1 and instead of sending its output to the screen it becomes the input for
the command command2. For example:
posh:~: ls | more
Here the list of files in the current directory is displayed one screen at a time.
15
posh:~: gcc test.c
16
6.4 Required options
All your C programs in this course should be written in ANSI C (standard C), which means they
must compile and run correctly with the -ansi, -pedantic-errors, -Werror, and -Wall options to
gcc which cause the compiler to strictly enforce the standard (these are options for the version of the
C compiler on the OIT Grace Cluster which we’ll be using). Just add these options after gcc when
compiling:
posh:~: gcc -ansi -pedantic-errors -Werror -Wall test.c -o test.x
7 Submitting programs
You will submit your programming projects electronically; project grading then involves the instruc-
tional staff running the programs to determine that they are giving correct results, and looking at your
programming style.
The submit program can be run as follows:
posh:~: submit semester department course section assignment–number filename–to–submit
If you are submitting Project #1, use 1 for the assignment number above, 2 for Project #2, etc.,
as instructed in the assignment for each project. The name of the file you are submitting, containing
your project code, should appear in place of “name–of–file–to–be–submitted ” in this command.
If your program is named proj1.c you would either have to be in the directory which contains
proj1.c in order to submit it, or when submitting you would have to give the name of the file including
its pathname. If you were located in the directory where proj1.c is located, you could submit that
program as the first assignment for your class by typing a command like:
17
posh:~: submit 2006 fall cmsc 106 0101 1 proj1.c
Of course you should use your correct course number and section number, and the correct project
number and filename in the command.
You can submit any project more than once. See your syllabus for your instructor’s grading policies
regarding multiple submissions.
Submit only your exact project file containing your source code for each assignment, otherwise you
will probably receive little credit for the project. Be absolutely certain you submit the correct file
by typing the right filename in place of “name–of–file–to–be–submitted ”, and that you submit your
project using the correct project number. You can be graded only on what you actually submit.
Come to office hours before your first project’s due date if you need more explanation or help in
figuring out how to create and submit projects. If you want to make sure you understand how to
submit, you can create a small file using the text editor, and try submitting it now using project
number 0.
8 Aliases
UNIX allows you to create a shorter alias to facilitate typing long or complicated commands. A
command like
alias word "replacement"
will cause word when typed in to be replaced by replacement (which can consist of several words
if desired).
Note that if you make any changes to this file you must either log out and log back in, or execute
the command
source ~/.aliases
before they will take effect.
18
9 Using the online reference information
There is an online reference manual which is referenced using the “man” command. For instance, to
access the manual’s information for cp, type
posh:~: man cp
If there is more than one screenful of information on a subject, advance to the next screen by
hitting the space bar. If you don’t want to see any more information on the subject simply type ’q’
(for quit).
19
it back”, in Emacs terminology) from the kill ring. Text can be copied by placing it in the kill ring
without deleting it, moving the cursor, and inserting it from the kill ring.
set mark at current cursor position C–@ or C–Space (the space bar)
kill region (cut) C–w
copy region to kill ring without deleting M–w
yank back last region killed (paste) C–y
To move some text from one place in a file to another, place the cursor at the beginning of the
text you want to move and type C−@ or C−Space to put the mark here (C−@ is typed by holding
Control and pressing both Shift and @, which appears above the ’2’ key). Then move the cursor
to the end of the text you want to move and type C−w to kill the region. Lastly, move the cursor to
the location you want to move the text to and type C−y.
In editing a large program you may want to search for a particular word or phrase in the text,
without having to move around the document searching for it. Typing C–s will begin an incremental
20
search for whatever characters you type. Emacs will print “I-search:” in the bottom line, and as
you type characters they will appear in this line, and the cursor will move through the text to the
first point where a word or phrase containing those characters appears. For example, move the cursor
to the beginning of your sample text, press C–s, and type “the”. When you type the first letter ’t’,
the cursor will move to the beginning of the word “typing” on the first line, which is where the first
’t’ in the text appears. When you type the ’h’, the cursor jumps to the word “this”, or the first
incidence of the letters “th” in your text, and when you type the letter ’e’ the cursor jumps to the
first occurrence of the word “the” later in the same line. If you press C–s again now, the cursor will
jump to the next occurrence of the word “the”; try it four times and see. Note that both “the” and
“The” are found, irrespective of capitalization. If you press C–s a fifth time a beep will indicate that
the word “the” isn’t found again in your text.
In incremental search mode, typing backspace or delete removes the last character of the word
being searched for, and the cursor will jump backwards to the first occurrence of the new, shorter
word. Pressing return or enter will exit the search mode, leaving the cursor positioned at the text
which was found. Typing C–g will quit the search mode but return the cursor to the starting position.
Often it’s necessary to systematically change all (or many) occurrences of some character string
to another string. For instance, you may need to rename a variable in your program. Finding and
changing each occurrence manually is tedious if the variable appears many times, and it’s easily possible
to miss one or more locations. Emacs allows any word or phrase to be systematically replaced with
another. Typing M–% begins query replace mode, where Emacs will ask you (in the bottom line)
“Query replace:” and wait for you to type a word or phrase and press return or enter. Emacs then
waits for you to type a word or phrase which it will replace the first word or phrase with. Emacs will
then go through the document, from the current cursor position to the end, asking at each occurrence
of the first word or phrase if you want to replace it with the second word or phrase. Press the space bar
to perform the replacement, or the ’n’ key to prevent the replacement, of each occurrence of the word
or phrase to be changed. Pressing C–g exits query replace mode (but doesn’t undo any replacements
performed). As an example, try typing M–% followed by “tell” and “explain to”, to replace both
occurrences of the word “tell” in your document by “explain to”.
To start Emacs’ help system, press C–x C–h. The help system itself has many options and modes,
of which the three most useful to you are described here. To execute these help commands, press the
letter indicated when the main help system window appears:
command-apropos: a
Command-apropos will display information about all commands relevant to any word you enter.
For instance, if you type C–x C–h (to enter the help system) followed by the character a, Emacs will
prompt you at the bottom of the screen to type in a word. As an example, if you type the word “save”
and press enter or return, you will see a window listing all the commands whose names contain the
word “save”. You may have to move into that window (C–o) and move down (C–v to page down) if
there are more lines than can be displayed in the window at once. If you want to run an command
21
(perhaps you want to save your file) but can’t remember the keystroke which invokes it, you may find
it using command-apropos. Beware- you’ll also see a number of commands which aren’t discussed in
this tutorial.
describe-bindings: b
Describe-bindings will list all the commands which can be used in Emacs’ current mode, with the
keystrokes used to execute each command. If you forget which key does what, you can run describe-
bindings (C–x C–h to enter the help system, followed by b) and look for the name of the command you
want to run. Beware- you’ll also see a number of commands which aren’t discussed in this tutorial.
describe-key-briefly: c
Describe–key–briefly will allow you to type in any keystroke, and will display in the bottom or
status line the name of the command which will be executed by pressing those keys. For instance, if
you type C–x C–h (to enter the help system) followed by the character c to select the describe-key-
briefly mode, followed by the keystroke C–e, you’ll see Emacs tells you that C–e runs the command
end-of-line.
22
Line numbers and undo
goto–line F10 e g return number
undo C–
Multiple windows
open new window C–x 2
open or read a different file into the current
C–x C–f
window
move to other window C–x o
make current window the only window C–x 1
Getting help:
enter help system C–x C–h
command-apropos (while in help) a
describe-bindings (while in help) b
describe-key-briefly (while in help) k
10.7 Conclusion
Emacs has many, many more capabilities than those mentioned here. This tutorial has discussed only
the basics necessary for you to be able to create and edit programs as necessary for your course, plus a
very few useful additional features. If you want to learn more about Emacs than was presented above
try any of the following sources of information:
23
1. The Helpdesk in room 1400 of the Computer and Space Sciences building has information on
Emacs. An online version is available at:
http://www.helpdesk.umd.edu/documentation/unix/emacs.shtml
2. An online Emacs tutorial is available. To see the tutorial, run emacs (type emacs at the UNIX
prompt), and when it starts press the Escape key, release it, hit the x, type help–with–tutorial,
and press return (or enter). The words “help-with-tutorial” will appear in the bottom line
of the Emacs screen while you are typing them. Follow the tutorial instructions after that.
3. The libraries and bookstores have books on Emacs, as well as books on UNIX which have sections
or chapters about Emacs, if you think you might need to continue using UNIX and Emacs in
the future.
24