## Uppsala Software Factory - Unix for Beginners

Written by:
Gerard J. Kleywegt
Department of Molecular Biology
University of Uppsala
Uppsala - Sweden

With help from Alwyn Jones, Erling Wikman and Arnold Andersson

Adopted for HTML by:

Jeffrey L. Nauss
Department of Chemistry
University of Cincinnati
Cincinnati, Ohio

HTML Version 0.1 @ Apr 4, 1995

## II - Introduction

II-1 * Literature:

• S.G. Kochan & P.H. Wood, "UNIX Shell Programming", Hayden Book Company, Berkeley, 1985
• G. Anderson & P. Anderson, "The UNIX C Shell Field Guide", Prentice-Hall, Englewood Cliffs, 1986
• P.E. Bourne, "UNIX for VMS Users", Digital Press, 1990

II-2 * What is UNIX ?

UNIX is a so-called operating system which nowadays runs on most computer systems. An operating system is merely a computer program through which the user interacts with the computer and its components and peripheral devices (processor, processes, files, disks, terminals, printers, plotters, etc.). Since every computer has one, operating systems are a necessary evil that you have to deal with if you do protein crystallography; on the other hand, knowing your operating system(s) well can make life a lot easier for you.

UNIX was developed on a PDP-7 by Dennis Ritchie and Ken Thompson at Bell Laboratories in the late 1960s; it was first called UNIX in 1970. After 1975, UNIX developed along two separate branches leading to Berkeley (BSD) UNIX and System N UNIX (with N currently being V). Nowadays, System V UNIX is available on most computers but contrary to popular belief, there is no such thing as a "standard" UNIX version. Although the basic commands are available in most UNIX implementations, hardware vendors like to add non-standard options and ditto commands to tailor their UNIX to their machines. Standardisation is, however, being undertaken by the Open Software Foundation (OSF) and, separately, by Unix International; the first proceed, OSF/1, is running on the new DEC Alpha computers.

Since the mid-1980s approximately, UNIX has evolved into the operating system of choice for most machines (probably because it is cheap for a hardware vendor to adopt it), which means that users in a multi-vendor computer environment no longer have to learn a new operating system whenever they get a new computer (now they only have to familiarise themselves with the system-specific extensions).

UNIX does have some strong points: it is fairly portable, flexible (i.e., easy to change, adapt and extend) and contains several powerful utilities. Also, it supports multiple users and multi-tasking. Nevertheless, UNIX is still very much an operating system for computer jocks (programmers); in skilled hands, it is very powerful, but to the novice end-user it is sometimes a nightmare (system-specific extensions, inconsistent syntax). Fortunately, on the modern graphics workstations more and more tools become available which make life easier (in this case, more "Macintosh-like").

II-3 * About this guide.

This guide attempts both to help novice UNIX users to get started and to help more experienced users to get more out of their operating system. It has been written by a reasonably spoiled SGI/IRIX/C-shell user. This means that not all commands and scripts are necessarily identical or even available if you use other machines! Novice users who have used VAX-VMS will be interested in chapter III; more experienced users will probably want to skip sections III and IV.

Any additions, extensions and constructive comments to and about this guide are appreciated! E-mail them to "gerard@xray.bmc.uu.se". Comments and such about the HTML version should be directed to nauss@ucmod2.che.uc.edu

A UNIX saleslady, Lenore,
Enjoys work, but she likes the beach more.
She found a good way
To combine work and play:
She sells C shells by the seashore.

A very intelligent turtle
Found programming UNIX a hurdle
The system, you see,
Ran as slow as did he,
And that's not saying much for the turtle.

Just about every computer on the market today runs Unix, except the Mac (and nobody cares about it). - Bill Joy

Making files is easy under the UNIX operating system. Therefore, users tend to create numerous files using large amounts of file space. It has been said that the only standard thing about all UNIX systems is the message-of-the-day telling users to clean up their files. - System V.2 administrator's guide

## III - UNIX versus VMS

III-1 * Commands:

The following is a list of common VAX/VMS commands and their UNIX counterparts. Use the manual pages for more information regarding the precise syntax, options etc.

___________________________________________________________________________
VMS command		UNIX command	description
___________________________________________________________________________
show default		pwd		show current directory
show system		ps		show current processes
show users		who OR finger	show current users
show symbol *		alias		show symbols/aliases
show dev d		df		show file system
sh queue *		at -l		show batch queues
show process		ps		show my processes
___________________________________________________________________________
set def sys$login cd go to home directory set def [-] cd .. go to parent directory ___________________________________________________________________________ create/dir [.mydir] mkdir mydir create new directory del my.dir; rmdir mydir delete directory copy cp copy delete rm delete file(s) delete/confirm rm -i delete after confirmation dir/size/date/prot ls -FartCos extended directory listing dir [...] ls -R list directory tree dir/size/total du disk usage rename f_1 f_2 mv f_1 f_2 rename/move a file/dir. purge (none) delete older versions set protection chmod change file protection (none) chown change ownership ___________________________________________________________________________ append a b cat a >> b append file a to file b diff a b diff a b list differences search a "str" grep str a find "str" in file(s) edit vi OR jot OR edit emacs OR .. type cat list file contents type/page more OR less list file(s) in portions __________________________________________________________________________ fortran file.for f77 -c file.f compile file link file.obj f77 -o X file.o link run file file execute program @file source file execute command script spawn cmd cmd & spawn a command submit at OR batch submit a job a:=cmd alias a cmd define symbol/alias write sys$output	echo		write to output device
___________________________________________________________________________
recall/all		history		show recent commands
recall cmd		!cmd		execute previous cmd
(none)			set history=100	remember last 100 commands
help cmd		man cmd		give help about cmd
phone			talk		exchange messages
mail			mail OR Mail	electronic mail
show terminal		stty		show terminal settings
set terminal		stty		set terminal characteristics
backup			tar OR bru 	backup file(s)
OR Backup
___________________________________________________________________________

III-2 * Miscellaneous:

One of the most important differences between VMS and UNIX is that UNIX does not allow for different versions of the same file (e.g., on the VAX you may have login.com;1, login.com;2 etc.). This means that you never have to purge your directories, but also that you overwrite a file if you send output to it more than once!

Under VMS you usually have a file LOGIN.COM in your home directory which is executed when you log on to the VAX; under UNIX, these are replaced by .login (executed when you log in) and .cshrc (executed whenever you start a C-shell process).

File names under UNIX are also different; for instance, a file which is called DISK5:[USER.XPLOR]XPLOR.INP;35 on the VAX might be called /disk5/user/xplor/xplor.inp on a UNIX system.

Another major difference is the case-sensitivity of UNIX, in other words: three files called text.dat, TexT.Dat and TEXT.DAT refer to the same file under VMS but to different files under UNIX!

## IV - Basic concepts

IV-1 * Logging in:

In order to be able to use a computer, you have to log in. For this you need a user name, a password and a home directory (all three are provided by the system manager the first time).

Your user name should not contain special characters (such as "/" or "-") and be unique. Your password should be long and hard to guess (i.e., don't use your own name, your cat's name, your phone number, etc). Change your password regularly (use the command passwd)! Passwords are to be taken extremely seriously! If anyone obtains a valid username/password combination, he or she can log on to the system and do a lot of damage (deleting your files, for example, or installing virus programs)!!!

The system file /etc/passwd contains a list of all authorised users with their (encrypted) passwords, user id, group id, home directory and default shell-type. If you cat (type the contents of) this file, you will notice that there are several "special" users, for example, "root" (system manager), "demo" and "ftp".

IV-2 * Commands:

Commands tell the system what to do. Under UNIX they usually consist of lower-case letters. The general syntax is: command [option(s)] [argument(s)]. The arguments are usually files (sometimes other devices, such as a display window or a printer) upon which the command will act. The options modify the way a command works; often they are single letters preceded by a dash ("-"; minus sign); usually several options can be combined and prefixed by a single dash. Please note that some commands mix options and arguments, some use a "+" instead of a "-" or even nothing at all. Also note that sometimes you have to provide "obvious" arguments; for instance, the find command, which looks for specific files in a directory tree, needs the -print option if you want to see the results on your screen ...

You may type several commands in a row, provided you separate them with semi-colons (";"). If you need to continue a command on the next line, use the backslash character ("\") at the end of the first line, etc.

IV-3 * Getting help:

The help command under UNIX is called man (for "manual"); it has the syntax man command_name. Another useful command: apropos anything (lists all commands which contain the string "anything" in their manual header).

IV-4 * Control characters:

If you make mistakes while you type a command you may use:

- CTRL-h or BACKSPACE to erase the last character

- CTRL-w to erase the last word

- CTRL-u to erase the whole line

You may change these definitions in your .login file (e.g., to define CTRL-f as the erase-character keystroke, you would enter stty erase ^F).

Other useful control characters are:

- CTRL-s to suspend output to the terminal

- CTRL-q to resume output

- CTRL-o to discard output to the terminal

- CTRL-z to suspend the current process (type fg, for "foreground" to resume it)

- CTRL-c to kill the current process

- CTRL-d to log out

IV-5 * Editors:

There are four types of editors under UNIX:

1. line editors (obsolete): ed, ex
2. full-screen editors (soon obsolete ?): vi, emacs
3. window-based editors (Macintosh-like): jot, zip, xedit
4. stream editors (will edit files for you using a command script): awk, sed
Note that jot and zip only run on SGIs; xedit is available on most machines running X-windows; emacs is not available on all machines; sed and awk are very powerful tools (they make a lot of "jiffy" programs obsolete)!

IV-6 * I/O streams:

There are three I/O streams associated with UNIX (see table). Under normal circumstances, standard input is expected from the keyboard and both standard output and standard error are associated with the terminal screen. As under VMS, input and (error) output can easily be redirected; in addition, under UNIX it is possible to "pipe" the output from one command or program straight into another one (this will be discussed later).

I/O stream	VMS-equivalent	C unit	Fortran unit	default
stdin		sys$input 0 5 keyboard stdout sys$output	1		6	terminal
stderr		sys$error 2 6 terminal  IV-7 * File system: UNIX organises information into files. Files are more than just collections of characters sitting on disks; in general, a file is a sequence of bytes of raw data. Files may therefore be executable programs, text files, data files, but also directory files, physical devices and communication channels (there even exists a "non-file": /dev/null - whenever you want output to go down the drain, redirect it to this "file"). Files are organised hierarchically in a so-called directory tree; at the top is the "root directory" / (a single slash). On a system disk, this directory typically contains subdirectories such as bin (UNIX commands), etc (system files), tmp, lib (libraries) and usr. The usr directory in turn contains the home directories of the users of the machines (and their subdirectories). The home directory usually has the same name as the username; it is the user's initial working directory when he or she logs in. IV-8 * Pathnames: The complete name of a directory (or file) is called its pathname. To see the complete pathname of your current directory, use pwd (print working directory); this will display for example: /nfs/taj/bubba if your username is "bubba" and you work in Alwyn's group. A pathname which begins with a slash (i.e., one which is defined starting in the root directory) is called an absolute pathname. You may also use relative pathnames; they are given relative to your current directory. For example, a file "xplor.inp" in Bubba's subdirectory "xplor" may be referred to as xplor/xplor.inp when Bubba is in his home directory. Another user in his home directory on the same disk might use: ../bubba/xplor/xplor.inp (the ".." refers to the parent directory) and users on other disks might use either /nfs/taj/bubba/xplor/xplor.inp or ~bubba/xplor/xplor.inp; the "~bubba" means: Bubba's home directory. Bubba himself could also use ~/xplor/xplor.inp (a single "~" refers to one's own home directory). Filenames may contain up to 256 characters; they are case-sensitive, so "test" and "TEST" are two different files! Try to avoid special characters (such as: / \ |  " ?$ # ; ~ - ! @ % & etc.), except for periods and underscores.

IV-9 * Listing directory contents:

The ls (list) command lists the contents of a directory; the options you provide determine how much information is displayed (my favourite on SGIs is: ls -FartCos). A typical entry in a directory listing may look as follows:

-rwxr-xr--  1 bubba   17632  Apr  1  23:59  xplode*

The first character indicates the file type; it may be: "-" ordinary file, "d" directory, "b" block device, "c" character device, "l" symbolic link or "s" socket. The next nine characters show the permissions (in three groups of three) of the user, other users in the same group and anyone else (in that order): "r" means read permission, "w" write permission and "x" (sometimes "s") execute permission, whereas a "-" means that the corresponding permission has not been granted. The number (1) is the number of names that are linked to the file (default is 1, if the file is linked to other files this number will be higher). This is followed by the username of the owner of the file (bubba) and the size of the file in bytes (17632). The date and time when the file was last modified are also listed as is the actual name of the file (xplode). The "*" after the file line is produced by the -F option of the ls command and indicates that this is an executable file (program or script); the -F option will also put a "/" after directory files and an "@" after linked files.

IV-10 * Meta-characters:

You may use several meta-characters (wildcards) in filenames:

1. "*" - matches any number of characters; e.g., ls */*.f will list all Fortran source files in the current directory and all of its sub-directories.
2. "?" - matches any single character; e.g., ls file?.f will list file0.f, file1.f, file2.f etc., but not file10.f, filexyz.f and so on.
3. "[]" - within the brackets you may put a list of ASCII characters which are considered to match, or a range of characters separated by a dash; e.g., ls file[135].f will list file1.f, file3.f and file5.f, but not file2.f etc.; ls [A-Z1-4]*.f will list all Fortran files whose name begin either with an uppercase letter or with 1, 2, 3 or 4.
These meta-characters may be used with nearly all UNIX commands, not just with ls!

IV-11 * Simple file manipulation:

You may copy a file with the command: cp oldfile newfile; this will make an exact duplicate of oldfile; if newfile existed it will be overwritten (the -i option prevents this), otherwise it will be created. If you want to copy a file to another directory, the second argument should be the name of the target directory (i.e., not of the new file!): cp xplor.out ../notes will copy the file xplor.out to the sister directory "notes". If you want to copy a file from another directory to your current directory, use either the absolute pathname of your current directory or simply a dot (".", this always means "current directory"): cp ../notes/xplor.out . If you want to copy a directory structure, use cp -r dir1 dir2.

A file can be removed with the command: rm myfile. If you want be prompted and asked if you really, really want to remove a file, use the -i option: rm -i file?.f etc.

If you want to move or rename a file, use the command: mv oldfilename newfilename; this is equivalent to: cp oldfilename newfilename ; rm oldfilename. Use the -i option to prevent files from being overwritten.

To create a new directory, use: mkdir newdir.

To change directories, use the cd command; examples: cd xplor/old, cd ~billybob/mail, cd ../../joey etc.

A directory which contains files can be removed completely in two ways: rm mydir/* ; rmdir mydir or rm -r mydir. There is one difference, however: the second method recursively deletes all sub-directories and their files as well!

IV-12 * Linking files:

A hard link allows you to assign multiple names to a single file (usually both files have to be on the same disk). It establishes another pathname to an existing file. For example, if you want to be able to edit a file "lab_notes" in all of your directories, you could create it in your home directory and later make links from all your subdirectories (you may give the linked files different names if you like). Now, whenever you edit any of the linked files the changes are made to all the files "lab_notes" since in reality they all correspond to one single file somewhere on the disk. The syntax is: ln existing_file link_file (note: if you swap the arguments you will effectively delete the existing_file!!!).

A better way of linking is through so-called soft links; these can be made across disks and even to disks attached to computers which are physically quite far apart (so you could link a file in Stockholm to one in Uppsala). The link file really only contains a text string (the pathname of the file to which it is linked); this string is substituted whenever the name of the linked file appears in a pathname. A familiar example: ln -s /nfs/taj/alwyn/o/data odat (note the "-s" which makes this a soft link and please note the order of the arguments: existing file first !). Another useful example (if you use the scratch disk a lot): ln -s /nfs/scratch/bubba scr (now it will seem as if /nfs/scratch/bubba is a sub-directory called scr of your current directory).

IV-13 * Changing file permissions:

File permissions (read, write, execute permission) can be altered with the chmod command. This can be used in two different ways. The easiest one has the syntax: chmod who operator permission filename(s), where:

- who = u (user), g (group), o (others) or a (all three classes)

- operator = + (add), - (remove) or = (assign permission(s))

- permission = r (read) and/or w (write) and/or x (execute)

Examples: chmod g=rx file1, chmod a+x file2, chmod o-wx file3 etc.

The second syntax involves octal protection indicators: chmod permission_bits filename(s). The "permission_bits" is a set of three digits between 0 and 7, one for u, g and o. Read permission has been assigned the value 4, write permission 2, execute permission 1 and no permission 0; the appropriate permission_bits are found by adding the values of the granted permissions, for example: chmod 755 xplor.exe will give the owner rwx-permission (4+2+1=7) and all other users rx-permission (4+1=5).

Note that directories are only accessible if you have read and execute permission; the same is true for script files and program executables. Also note that you may prevent a file from being overwritten or deleted by giving yourself no write permission. If you want to change the ownership of a file, use the chown command.

IV-14 * Manipulating text files:

The following commands are often used for manipulating text files:

cat filename
type the contents of the file on the screen
more filename
ditto, but paginated (type a SPACE to see the next page or a "q" to quit; some versions of UNIX offer the command less as well with which you can go back and forth in a file)
head filename
print the first 10 lines of a file (use: head -5 filename to see just the first five lines, etc.)
tail filename
print the last 10 line of a file; you may use the option -5 or -123 similar to head; if you use the option -f, the process goes into an endless loop printing everything that is added to the file to your screen (use this to monitor your XPLOR jobs, for example; terminate with CTRL-c)
grep string filename
list all occurrences of "string" in file "filename"; use the -i option to ignore uppercase-lowercase differences
wc filename
print the number of lines, words and characters in a file
cmp file1 file2
tells you whether or not two files are identical
diff file1 file2
finds differences between two files (on SGIs use /usr/sbin/gdiff; this is a window-mouse-based implementation of diff); use the -s or -r option to compare two directories
sort filename
sorts a file alphabetically or numerically; if you provide several filenames, the files will be merged and then sorted
lp -Pprinter filename
print a file on the printer (in our lab: "printer" would be "nec" or "model2" etc.); use the commands lpstat to list current print jobs and lprm to remove them; use in conjunction with pr to get a nice listing including a header, the filename and page numbers, e.g.: pr -h "Source" -l80 prog.f | lpr -P2up
IV-15 * I/O redirection:

Often it is handy to redirect the output of a command or program to a file (or a printer or ...). The syntax to do this is: command > outfile. This will overwrite "outfile" if it existed already, unless you put the statement noclobber in your .cshrc file (then you may only overwrite files by using ">!" instead of ">"). If you want to append the output to an existing file, use ">>". Example: to append file2 to file 1, use: cat file2 >> file1. If you also want to redirect the standard error output to the same file, use ">&" or ">>&".

To redirect standard input from a file, use: command < inputfile, for instance: xplor < xplor.inp. Alternatively, you may use "<< string" to indicate that everything that follows on standard input until the line which contains only "string" is to be used as input. For example:

4d_ono crap.o << end-of-input
yes (use display)
@lsq.omacro
stop
end-of-input

Of course, you may use combinations of input and output redirection: xplor < trafun.com >>& all_trans.out and so on.

Another way of I/O redirection is the use of "pipes": a pipe causes the standard output of one command to be transferred into the standard input of another command. The syntax is: command1 | command2; for example, to find out how many users are logged in, type who | wc -l; to get a sorted list of logged in users, type who | sort, or who | sort | more. A more useful example: to count the number of amino acids in a PDB file, use: grep " CA " file.pdb | wc -l; to list the CA-atoms of all alanyl residues, use: grep ALA file.pdb | grep " CA ". If you also want to pipe the standard error output, use "|&" instead of "|".

IV-16 * History facility:

The csh-command history lists previously issued commands (use "-8" to get just the previous eight commands); the number of commands that is saved can be set as follows: set history=100 (you may want to put this into your .cshrc file).

If you mistyped a command, you may use: ^wrong^correct to correct the typo and execute the command; for example, if you typed: who|sort|moer, type ^er^re next and the correct command who|sort|more is executed.

To re-execute a previous command, use "!": !! repeats the previous command, !142 repeats command number 142 (in the list produced by history), !l repeats the most recent command beginning with the letter "l", !-4 goes back four commands and !?s? repeats the most recent command that contained the letter "s". You may also extend previous commands, for example if the previous command was ls -l, you may type !! -a /usr | more which will result in the execution of ls -l -a /usr | more !

You may also "recycle" parts of previous command lines (for instance, long file names). The C-shell divides each command in separate "words" delimited by spaces or tabs. For example, if command number 5 in the history list was ls -al file1 file2 file3, then the command plus its options are called :0, the first file name is :1 or ^, the second file name :2 and the last file name :3 or $, while all files collectively may be referred to by *. The following table gives some of the possible history references for this command: You type: What is executed: !5 ls -al file1 file2 file3 more !5:2-3 more file2 file3 cat !5:$		cat file3
more !5^		more file1
lpr !5:2		lpr file2
lpr !5*			lpr file1 file2 file3

You may also modify previous commands, for example: !!:s^old^new; if the previous command was ls -l *.old, the new command will be ls -l *.new. To verify that the edited command is correct, type :p immediately after the event identifier: !!:p:s^old^new; if it is correct, type !! to execute it.

IV-17 * Aliases:

The csh-command alias lists all defined aliases. The command also allows you to rename or abbreviate commands, for example: alias rm rm -i' will mean that every time you type rm you actually execute rm -i. Should you at some stage want to use the original rm command without the -i option, then you have the following options: unalias rm removes the alias, /bin/rm executes the rm program itself without any option, \rm does the same.

An alias may contain more than one command, for example: alias status date ; who | sort'.

If you want to create aliases for commands which require an argument (usually, a filename), use \!* (there is actually some perverted logic behind this ...) at the position of the argument: alias ala grep ALA \!* | grep CA | wc -l'; now if you type ala file.pdb the result will be the number of alanyl residues in that file.

IV-18 * Job control:

A command may be executed in either the foreground or the background. Foreground jobs may read from and write to the terminal and the shell will wait until a command is finished before prompting the user for a new command. Background jobs may never read from the terminal (they will be stopped if they try to) but they may write to it (this can be switched off by stty tostop); the shell prompts for a new command without waiting for the command to complete.

In order to execute a command in the background put an ampersand (&) after the command: xplor < x.in >& x.out &. The job will receive a background job number ([1], [2] etc.) and a process ID. When it is completed, a message like "[2] Done xplor < x.in >& x.out" will be displayed on your terminal. A job which was started in the foreground can be stopped with CTRL-z and then be continued in either the background (command bg) or the foreground (fg).

The command jobs gives you a list of background jobs initiated at your terminal. If there are more than one, the one labelled "+" will be started if you type fg; if you want to start another one in the foreground, type %3 (to start job number 3). To stop a job running in the background, use stop %5; to terminate it completely, use kill %2.

To get information about your (and other people's) processes, use the ps command (for example, if you want to know if anybody else is already running XPLOR on an SGI before submitting your own XPLOR job, type: ps -ef | grep -i xplor).

The kill command can also be used to terminate or interrupt processes by referring to their PID (process id; these are listed by the ps command), for example: kill -9 1734, kill -STOP 182, kill -CONT 182, etc.

If you start a job in the background and you plan to log out before it is finished, submit it with the nohup command (no hang-up): nohup xplor.com &; if you don't do this, all your processes, including your XPLOR job, will be killed when you log out !

Use nice and renice to run background jobs with lower priority (so your big calculations are not in the way of interactive users).

## V - Example files

V-1 * .login:

I recommend that you keep it to an absolute minimum. I prefer to keep all my settings in the .cshrc file.

umask 022
eval tset -s -Q
stty line 1 erase '^H' kill '^U' intr '^C' echoe

V-2 * .cshrc:

The following are fragments of my .cshrc file; note that this particular one is tailored to SGI's IRIX.

#
set path = (. .. ~ ~/bin /usr/bsd /bin /usr/bin /usr/bin/X11 /usr/sbin
/usr/demos /usr/demos/bin /usr/etc /usr/local/bin /usr/bin/dn /usr/ucb
/nfs/taj/alwyn/o/bin /usr/people/alwyn/a/bin /nfs/vega/people/alwyn/a/bin
/nfs/public/IRIX/bin /usr/new /user/bin /user2/bin)
#
limit coredumpsize 0
source /nfs/public/IRIX/ccp4/include/ccp4.setup >& /dev/null
set autologout=240
set ignoreeof
set history=100
set savehist=250
set filec
set fignore = (.o .a .old .f.old .f.older .f.oldest)
set notify
set time=5
set prompt = " > "
alias newsh 'wsh -s40x80 -f Screen.15 -t"new shell"'
alias ftp   'ftp -i'
alias diff  'diff -lsbwit'
alias comp  'compress -v'
alias unco  'uncompress -v'
alias note  'cat ~/stuff/notes | grep \!*'
alias down 'cd \!*'
alias up 'cd ../'
alias left 'cd ../\!* '
alias home 'cd'
alias dir    ls
alias dsd    'ls -laF \!* | sort'
alias dsds   'ls \!* | grep "date | cut -c5-10"'
alias ls     '\ls -FartCos'
alias l      '\ls -Cal'
alias lc     '\ls -C'
alias lss    '\ls -FartCos \!* | sort'
alias fint 'find * -print | grep \!*'
alias sus    'who -a'
alias sss    'ps -ef | sort'
alias time  '/bin/time'
alias h     'history'
alias h5    'history | tail -5'
alias hg    'history | grep \!*'
alias hg5   'history | grep \!* | tail -5'
alias grep  'grep -i'
alias count 'grep -c'
alias help  man
alias ta    'tail -100'
alias he    'head -100'
alias lo    logout
alias du    'du -rk'
alias grand '\du -sk *'
alias df    'df -k'
alias s     source
alias rm 'rm -i'
alias dorm '\rm'
alias del 'rm'
# disp alien will set the environment variable DISPLAY to
alien.bmc.uu.se
alias disp 'set x=\!* ;setenv DISPLAY $x.bmc.uu.se:0;setenv|grep -i display' # a quick way to set your terminal to VT100 alias vt100 'setenv TERM vt100 ; setenv | grep -i term' # Fortran compilation for SGI, ESV, ALPHA/OSF1 alias f77sgi '/bin/time f77 -Olimit 3000 -v -check_bounds -u -w0 -c' alias f77esv '/bin/time f77 -Olimit 3000 -v -check_bounds -u -c' alias f77al '/bin/time f77 -Olimit 3000 -C -O -u -v -c' # head AND tail a file alias ht 'set x=\!* ; echo head$x ; head $x ;echo tail$x ; tail
$x' alias xterm 'xterm -sb' alias show 'ps -ef | grep$user | grep -i \!*'

V-3 * Other files:

Some other files in your home directory might be:

.logout
csh-script which is executed when you log out
.signature
your name and address, for example; will be appended to every mail you send
.plan and .project
used by the finger command
In addition, there may be window-manager specific files such as .chestrc, .4Dwm, .Xdefaults, and/or .sgisession.

## VI - Example scripts

The following script files can be copied from /nfs/public/shell. For more information on shell-specific constructs (if, while, foreach, -e, -f, $#argv etc.), consult the manual pages for the csh command. VI-1 * compressor: This script can be used to automatically find and compress large map files (or it can easily be changed to find and act on other files). Consult the manual pages of the find command for an explanation of all possible options. # compressor ... gerard kleywegt @ 920318 # find /.. => search there (/ => entire file system) # -name .. => specify file names (-o is "OR-function") # -size ..c => specifies minimum file size in bytes # -type f => only look for files (i.e., not links or directories) # -atime +2 => only use files which haven't been accessed in two days # -exec .. => command to be executed for each "hit" (compress -v or ls) set echo find /nfs/taj $$-name '*.map' -o -name '*.o'$$ -size +20000c -type f -atime +2 -exec compress -v {} \; unset echo VI-2 * split: This script will, in a given directory, copy all Fortran files (.f) to a subdirectory called fsplit (must exist), do an fsplit and remove the original sources (beware of filename duplications !). Note the uses of the set command. # split - gj kleywegt @ 920311 if (-e fsplit) then set sources=*.f set numfiles=$#sources
echo Split $numfiles sources if ($numfiles == 0) then
echo ERROR - no .f files in this directory ...
exit -1
endif
foreach file ($sources) echo ... splitting$file ...
cp $file fsplit fsplit fsplit/$file
\rm fsplit/$file end exit 0 endif echo ERROR - no subdirectory called "fsplit" here ... exit -2 VI-3 * repeat: This script will execute a given command repeatedly at regular time intervals (using the sleep command). # repeat - gj kleywegt @ 911025 if ($#argv < 2) then
echo usage: repeat sleep_seconds command arg1 arg2 arg3 ... arg7
exit
endif
set echo
while ($#argv > 1)$2 $3$4 $5$6 $7$8 $9 echo "... I am going to sleep a little ..." sleep$1
end
exit

VI-4 * police:

This script will check every ten minutes whether there are processes which have consumed more than 60 minutes of CPU-time and still do not have the highest nice-value; if there are any (and if they're not owned by root), they will be reniced. This version of the script can only be executed by root.

# police - gj kleywegt - renice long-running non-root processes regularly
# activate with: nohup /nfs/taj/police >& /dev/null &
while (2 > 1)
set allproc=ps -ef | cut -c9-15 | sort
foreach proc ($allproc) if ($proc == "PID") then
else
set root=ps -lf -p $proc | grep root | wc -l if ($root == 0) then
set nice=ps -lf -p $proc | grep$proc | cut -c33-34
set cput=ps -lf -p $proc | grep$proc | cut -c74-76
if ($cput > 60) then if ($nice < 39) then
/etc/renice +19 $proc endif endif endif endif end sleep 600 end VI-5 * forall: Some UNIX commands (such as tail and lpr) do not allow for wildcards in the filename specifications. In order to circumvent this problem, the following script takes a file description containing multiple arguments or wildcards and a command and will execute the command for each of the files. Examples: forall '*.f' tail -20 and forall '*.ps' lpr -Pqms. # forall file_id command - gj kleywegt @ 920803/920917 if ($#argv < 2) then
echo
echo "usage: forall file_id command [arg1 ... arg6]"
echo
exit 1
endif
set sour=$1 set comm="$2 $3$4 $5$6 $7$8"
echo "===> FORALL (" $sour ") DO "$comm
foreach file ($sour) echo$comm $file$comm $file end echo "Done ..." exit 0 VI-6 * sln: This script is a safe soft-linker. In order to prevent you from accidentally erasing files by swapping the arguments to ln -s, it checks if the first file actually exists. If you put this script in your private /bin directory, you should put the following in your .cshrc file: alias ln 'echo USE ~/bin/sln INSTEAD OF ln'. # sln - a SAFE soft linker - Gerard Kleijwegt @ 920812 if ($#argv < 2) then
echo
echo "usage: sln existing_file link_file"
echo
exit 1
endif
set exist=$1 set linkf=$2
echo "sln - existing file : " $exist echo " - link file : "$linkf
if (-f $exist) then \ls -FartCos$exist
if (-f $linkf) then \ls -FartCos$linkf
echo "WARNING - link file exists - overwrite (Y/N) ???"
set answer=$< if ($answer == "y") then
\ln -s $exist$linkf
\ls -FartCos $linkf endif else \ln -s$exist $linkf \ls -FartCos$linkf
endif
else
echo "ERROR - file does not exist"
if (-f $linkf) then \ls -FartCos$linkf
echo " - but the link file DOES ..."
echo " - maybe you swapped the arguments ???"
echo " - if so, try : sln " $linkf$exist
endif
endif

VI-7 * dirtar:

If you want to archive or ftp a whole directory (tree), this is most efficiently done by first using tar to archive all files into one archive file, compressing the resulting archive file and deleting the original directory (tree). This script does the work for you.

# dirtar - gj kleijwegt @ 920803/921029
if ($#argv < 1) then echo echo "usage: dirtar dir_name" echo exit 1 endif set dirnam=$1
echo ... tarring $1 ... tar cvqqqf -$1 > $1.dirtar \ls -FartCos$1.dirtar
echo ... compressing $1.dirtar ... compress -v$1.dirtar
\rm -r $1 \ls -FartCos$1.dirtar.Z
exit 0

VI-8 * tardir:

This script takes an output file from the previous script and restores the original directory (tree).

# tardir - gj kleijwegt @ 920803/921029
if ($#argv < 1) then echo echo "usage: tardir dir_name" echo exit 1 endif set dirnam=$1
echo ... uncompressing $1 ... \ls -FartCos$1.dirtar.Z
uncompress -v $1.dirtar.Z echo ... untarring$1 ...
\ls -FartCos $1.dirtar tar xovpf$1.dirtar
\rm $1.dirtar \ls -FartCos$1
exit 0

## VII - Miscellaneous

VII-1 * ftp:

File-transfer protocol; can be used to copy files from one computer (e.g. a VAX) to another. Use something like: ftp -i xray.bmc.uu.se if you want to copy files from XRAY to an SGI or ESV. If you copy from one UNIX machine to another, you may also use rcp (remote copy) or uucp (UNIX-to-UNIX copy).

VII-2 * rlogin/telnet:

If you want to log on to another computer (e.g. a VAX or another UNIX machine), use either rlogin (remote login; will not execute the .login file if you go to a UNIX machine) or telnet, followed by the name of the host computer.

VII-3 * make:

If you have many or large programs to maintain, make is an excellent utility for you. The idea is that you define a dependency-tree (the executable depends on the object files and libraries; each object file depends on a Fortran file plus one or more include files, etc.) in a "makefile". If you have edited one subroutine file, all you have to do is type make executable_name, and only that subroutine will be compiled and all object files and libraries will be linked together.

VII-4 * tar:

If you want to copy files to tape, you may use the tar command (tape archiver). To copy files to tape, use something like tar cv ~bubba >& ~bubba/tarlist; to restore files, use tar xovp (filename).

VII-5 * more commands:

file filenames : list the types of the filenames

date : print current time and date

banner text_up_to_10_chars : prints large text on stdout

factor integer : print prime factors of an integer

fold -75 file > newfile : fold long lines

last -5 gerard : print last 5 sessions of user "gerard"

strip file : strip an executable of unused routines

touch file : "touches" a file; changes date-last-changed

alloc : show allocated memory

limit (-h) : show limits (memory etc.)

egrep/fgrep : different versions of grep

fsplit file : split Fortran file into one file per routine

f77 options files : compile and link a Fortran file

cc options files : compile and link a C file

ar : archive and library maintenance

clear : clear terminal screen

finger username : list information about a user

od file : octal, decimal, hex, ASCII file dump

cal : print calendar

cron : execute commands at a specified date/time

mail/Mail : send and read mail

sort : sort or merge files

stty : set or list terminal characteristics

talk : talk to another user (like phone on the VAX)

time : time a command

which/whereis : locate a program or script

paste : list two or more file side-by-side

setenv : set environmental variables

printenv : list environmental variables

df : show disk usage

dd : file conversion

VII-6 * Files versus processes:

Files contain static information such as operating system commands (script files), Fortran or C instructions (program files), arbitrary text or data. Processes do the actual work; in general they execute programs (for example, a UNIX command or a program of your own or a CCP4 program). Each process has an "environment" which it inherits from its parent process. Whenever a sub-process is started, the parent process waits until it is finished, unless the sub-process is run in a batch queue or spawned.

In addition, UNIX provides command line interpreters (comparable to VAX/DCL) which are called shells. You will probably use the standard C-shell (csh), but there are others (e.g., the Bourne shell and the Korn shell). Each type of shell offers an additional set of commands.

An example may help to clarify these concepts: suppose that you are in directory /home/user/xplor and you want run XPLOR with an input file called xplor.inp. You then have the following options:

1. type "xplor < xplor.inp": a sub-process will be created which inherits the characteristics of the parent (i.e., your terminal session), XPLOR will be run (in the directory /home/user/xplor) and when it is finished, control will be returned to your terminal.
2. type "xplor < xplor.inp &": this does the same, except that the process will now be spawned; in other words, the XPLOR process will be run as a separate process and you will be able to continue to work in your terminal session while XPLOR is running.
3. create a file xplor.com which contains the line "xplor < xplor.inp", change its protection to make it executable (chmod) and execute it by typing "xplor.com"; the effect will be the same as in (1)
4. now type "xplor.com &"; the effect will be the same as in (2)
5. modify the file xplor.com to read "xplor < xplor.inp &"; in this case, it doesn't matter whether or not you execute or spawn the file, in both cases control will be returned to the terminal almost immediately
6. modify xplor.com so that it contains the lines:

# script for running xplor
xplor < xplor.inp &

If you execute this "script" you will find that it doesn't work. This is because the "#" on the first line means that you want the child process to run in a separate C-shell, with its own environment (directories etc.). This means that the process will start in your home directory (/home/user), execute the .cshrc file (this can be avoided by starting the script file with "#!/bin/csh -f" instead of with "#") and then try to run XPLOR. This will fail since the file xplor.inp does not exist in your home directory. In order to get the script to work, you have to insert a line "cd xplor" between the two lines.

7. source the modified script file; now the same will happen as in (6), except that any statements executed in the sub-shell will also affect your own shell. Hence, if you have cd and set statements in the script, they will put you in a different directory and (re)define certain symbols ! This is the reason why, if you have altered your .cshrc file, you should always source the new .cshrc file, rather than execute it.

VII-7 *sed generating files with instructions for all files of a certain kind: for example, get all files named m24_cav*.o, put the string 'draw ' in front of each of them and put them in a file: \ls -c m24_cav*.o | sed -e s/"m"/"draw m"/g > odraw.mac. The resulting file can be executed by O immediately.

VII-8 *sed sed stream editor; for example: sed -e s/random/rannew/g conezd.com > new.com or (using a script file) sed -f sed.script test.f > new.f.

VII-9 *X-windows programs X-windows programs (on SGIs at least): xedit - text editor; xfig - "MacDraw/MacPaint" (use f2ps to get PostScript); xwd - window dump (redisplay with xwud); xman - man pages; xmag - magnify a part of the screen; xfd - font display; xload - show cpu load; xcalc - calculator; xclock - guess what; xterm - terminal window; xcalendar - calendar & time management

VII-10 * use cut to grab certain columns or fields of a stream, for example: tty | cut -c1-9 gives: "/dev/ttyq"

call flush (iunit)
flushes buffer of output unit IUNIT
call fdate (str24)
returns date and time
et = etime (real(2))
real(1)=elapsed user time,
real(2)=elapsed system time,
etime(..)=sum of these two
dt = dtime (real(2))
ditto, but increments since last call to dtime
call getenv (nam,val)
returns value of env var NAM in VAL (both str*)
call getlog (str*)
returns user's login name
call idate (imon,iday,iyear)
call itime (real(3))
array contains hrs,min,sec
i = mclock()
returns time accounting info
call perror (str*)
print str* and last detected error's message to stderr
call gerror (str*)
get last detected error's message
i = ierrno()
return number of last error
call qsort (...)
see man page
call sleep (nsecs)
suspend process for nsecs seconds
i = alarm(nsecs,extproc)
call external procedure after nsecs seconds
call system(str*)
execute str* as a sh-command
time, ctime, stime, ltime, gmtime
see man pages
str* = ttynam(iunit)
returns name of tty (or blanks)
logi = isatty(iunit)
true if iunit is a tty

narg = iargc ()
call getarg (iarg, str*)

pointer (iptr, arr)
dimension arr(1)
integer malloc,nbytes
...
nbytes = 4*nvars
iptr = malloc(nbytes)
...
call free(iptr)

VII-14 *saving disk space: use compress (and uncompress) to reduce the amount of disk space occupied by large, infrequently used files. The new file will have ".Z" appended to its name. Use zcat to look at the contents of compressed text files without uncompressing them.

VII-15 *units: use the units command to convert between different units, e.g. kg to/from lbs.

VII-16 *w and who: the commands w and who tell you who is logged in on your machine

VII-17 *factor: to find the factorisation of an integer number, use the factor command. This is very useful when you are trying to find grids for CCP4 programs ! CCP4 does not allow you to have grids which contain a factor > 19; so 134 is invalid since 134 = 2 * 67 and 67 > 19; 132 (2*2*3*11) and 136 (2*2*2*17) would both be okay

VII-18 * some more commands:

bc
arbitrary-precision arithmetic language
nl
adds line numbers; handy in combination with cat/zcat/more, e.g.: nl myfile | more
tr
translate or delete characters; useful for changing a file from UPPER- to lowercase, for example: cat infile | tr '[A-Z]' '[a-z]' > outfile
spell
check a file for spelling errors
xedit
quick-and-dirty editor (gets its own window), for example (from O): O > \$ xedit map_macro &
limit
put the following line in your .cshrc file in order to avoid multi-megabyte core dumps: limit coredumpsize 0
uuencode/uudecode
if you want to send BINARY files by E-mail, uuencode them: uuencode binary_file coded_file > coded_file
banner
echo a text of up to 10 characters to the screen in BIG letters

## VIII - Index of Unix commands


alias		abbreviate common commands	IV-17,V-2
alloc		list allocated memory		VII-5
apropos		help on available commands	IV-3
ar		archive files			VII-5
awk		editor, stream-based		IV-5

banner		list text in big letters	VII-5,VII-18
bc		calculator with arbitrary 	VII-18
precision
bg		put job in background		IV-18

cal		list calendar			VII-5
cat		list file contents		IV-14,IV-15,V-2
cc		compile/link C program		VII-5
cd		change directory		IV-11,V-2,VII-6
chmod		change file protection		IV-13
chown		change file ownership		IV-13
clear		clear terminal screen		VII-5
cmp		compare files			IV-14
compress	compress files			V-2,VI-1,VI-6,VI-7,VII-14
cp		copy files			IV-11,VI-2
cron		execute commands regularly	VII-5
cut		extract columns from files	V-2,VII-10

date		list date and time		IV-17,V-2
dd		convert files			VII-5
df		list file-system usage		V-2,VII-5
diff		list differences between files	IV-14,V-2
du		list disk usage			V-2

echo		list to terminal		V-2,VI-2,VI-3,VI-5,
VI-6,VI-7,VI-8
ed		editor, line-based		IV-5
egrep		version of grep			VII-5
emacs		editor, full-screen		IV-5
ex		editor, line-based		IV-5
exit		exit from a command script	VI-2,VI-3,VI-4,VI-5,
VI-7,VI-8

f77		compile/link Fortran program	V-2,VII-5
factor		list prime factors of a number 	VII-5,VII-17
fg		put job in foreground		IV-18
fgrep		version of grep			VII-5
file		list type of files		VII-5
find		find files			IV-2,V-2,VI-1
finger		list user information		V-3,VII-5
fold		list file and fold long lines  	VII-5
fsplit		split Fortran source file      	VI-2,VII-5
ftp		copy files from/to other 	V-2,VII-1
machines

grep		find/count string in files	IV-14,IV-15,IV-17,
IV-18,V-2

head		list file header		IV-14,V-2
history		list recent commands		IV-16,V-2

jobs		list jobs			IV-18
jot		editor, window-based		IV-5

kill		interrupt/terminate job		IV-18
last		list last sessions of a user	VII-5
less		list file contents, paginated  	IV-14
limit		list/set hardware limits       	V-2,VII-18
ln		link files			IV-12,VI-5
logout		stop a session			V-2
lpq		list print jobs			IV-14
lpr		print files			IV-14,VI-5
lprm		remove print job		IV-14
ls		list files			IV-9,IV-10,IV-16,V-2,VI-5,
VI-6,VI-7,VI-8,VII-7

Mail		mail facility			VII-5
mail		mail facility			VII-5
make		manage dependent files		VII-3
man		help with a command		IV-3,V-2
mkdir		create directory		IV-11
more		list file contents, paginated	IV-14,IV-15,IV-16
mv		move/rename files		IV-11

nice		execute command with lower 	IV-18
priority
nl		add line numbers		VII-18
nohup		execute command in background	IV-18
od		list dump of any file		VII-5

passwd		change password			IV-1
paste		list two files side by side    	VII-5
pr		list file nicely		IV-14,IV-17
printenv	list values of environment 	VII-5
variables
ps		list processes			IV-18,V-2
pwd		list present work directory	IV-8

rcp		copy files from/to other 	VII-1
machines
renice		change priority of a command	IV-18,VI-4
rlogin		log in on other machine		VII-2
rm		remove files			IV-11,IV-17,V-2,VI-2,
VI-6,VI-7,VI-8
rmdir		remove directories		IV-11

sed		editor, stream-based		IV-5,VII-7,VII-8
set		define value for a variable    	V-2,VI-2,VI-3,VI-4,VI-5,
VI-6,VI-7,VI-8,VII-6
setenv		set environment variable	V-2,VII-5
sleep		wait N seconds			VI-3
sort		sort files			IV-14,IV-15,IV-16,IV-17,
V-2,VII-5
source		execute script			V-2,VII-6
spell		check spelling			VII-18
stop		interrupt job			IV-18
strip		strip executable		VII-5
stty		set/list terminal 		IV-4,IV-18,V-1,VII-5
characteristics

tail		list file footer		IV-14,V-2,VI-5
talk		talk to other user		VII-5
tar		archive files			VI-6,VI-7,VI-8,VII-4
telnet		log in on other machine		VII-2
time		time a command			V-2,VII-5
touch		change access date of files    	VII-5
tr		translate/delete characters    	VII-18
tty		list terminal			VII-10

unalias		remove an alias			IV-17
uncompress	decompress files		V-2,VI-8,VII-14
units		convert unit systems		VII-15
unset		remove a variable		VI-1
uucp		copy files from/to other 	VII-1
machines
uudecode	convert ASCII file back 	VII-18
to binary
uuencode	convert binary files to ASCII  	VII-18

vi		editor, full-screen		IV-5

w		list current users		VII-16
wc		count lines, words, bytes      	IV-14,IV-15,IV-17
in files
whereis		list filename of program/script	VII-5
which		list filename of program/script	VII-5
who		list current users		IV-15,IV-16,V-2,VII-16

xcalc		calculator			VII-9
xcalendar	calendar and time manager	VII-9
xclock		clock				VII-9
xedit		editor, window-based		IV-5,VII-9,VII-18
xfd		show available fonts		VII-9
xfig		draw pictures			VII-9
xload		show CPU load			VII-9
xman		help				VII-9
xterm		terminal window			V-2,VII-9

zcat		list contents of 		VII-14
compressed text file
zip		editor, window-based		IV-5


## IX - Inverted index of Unix commands

abbreviate common commands	alias		IV-17,V-2
add line numbers		nl		VII-18
archive files			ar		VII-5
archive files			tar		VI-6,VI-7,VI-8,VII-4

calculator			xcalc		VII-9
calculator with arbitrary 	bc		VII-18
precision
calendar and time manager      	xcalendar	VII-9
change access date of files    	touch		VII-5
change directory		cd		IV-11,V-2,VII-6
change file ownership		chown		IV-13
change file protection		chmod		IV-13
change password			passwd		IV-1
change priority of a command   	renice		IV-18,VI-4
check spelling			spell		VII-18
clear terminal screen		clear		VII-5
clock				xclock		VII-9
compare files			cmp		IV-14
compile/link C program		cc		VII-5
compile/link Fortran program   	f77		V-2,VII-5
compress files			compress	V-2,VI-1,VI-6,VI-7,VII-14
convert ASCII file back 	uudecode	VII-18
to binary
convert binary files 		uuencode	VII-18
to ASCII
convert files			dd		VII-5
convert unit systems		units		VII-15
copy files			cp		IV-11,VI-2
copy files from/to other 	ftp		V-2,VII-1
machines
copy files from/to other 	rcp		VII-1
machines
copy files from/to other 	uucp		VII-1
machines
count lines, words, and		wc		IV-14,IV-15,IV-17
bytes in files
create directory		mkdir		IV-11

decompress files		uncompress	V-2,VI-8,VII-14
define value for 		set		V-2,VI-2,VI-3,VI-4,VI-5,VI-6,
a variable				VI-7,VI-8,VII-6

draw pictures			xfig		VII-9

editor, full-screen		emacs		IV-5
editor, full-screen		vi		IV-5
editor, line-based		ed		IV-5
editor, line-based		ex		IV-5
editor, stream-based		awk		IV-5
editor, stream-based		sed		IV-5,VII-7,VII-8
editor, window-based		jot		IV-5
editor, window-based		xedit		IV-5,VII-9,VII-18
editor, window-based		zip		IV-5
execute command 		nohup		IV-18
in background
execute command with 		nice		IV-18
lower priority
execute commands regularly	cron		VII-5
execute script			source		V-2,VII-6
exit from a command script	exit		VI-2,VI-3,VI-4,VI-5,VI-7,VI-8
extract columns from files     	cut		V-2,VII-10

find files			find		IV-2,V-2,VI-1
find/count string in files     	grep		IV-14,IV-15,IV-17,IV-18,V-2

help				xman		VII-9
help on available commands     	apropos		IV-3
help with a command		man		IV-3,V-2

interrupt job			stop		IV-18
interrupt/terminate job		kill		IV-18

link files			ln		IV-12,VI-5
list allocated memory		alloc		VII-5
list calendar			cal		VII-5
list contents of a 		zcat		VII-14
compressed text file
list current users		w		VII-16
list current users		who		IV-15,IV-16,V-2,VII-16
list date and time		date		IV-17,V-2
list differences between files	diff		IV-14,V-2
list disk usage			du		V-2
list dump of any file		od		VII-5
list file and fold long lines  	fold		VII-5
list file contents		cat		IV-14,IV-15,V-2
list file contents, paginated  	less		IV-14
list file contents, paginated  	more		IV-14,IV-15,IV-16
list file footer		tail		IV-14,V-2,VI-5
list file header		head		IV-14,V-2
list file nicely		pr		IV-14,IV-17
list file-system usage		df		V-2,VII-5
list filename of program/script	whereis		VII-5
list filename of program/script	which		VII-5
list files			ls		IV-9,IV-10,IV-16,V-2,VI-5,
VI-6,VI-7,VI-8,VII-7
list jobs			jobs		IV-18
list last sessions of a user   	last		VII-5
list present work directory    	pwd		IV-8
list prime factors of a number 	factor		VII-5,VII-17
list print jobs			lpq		IV-14
list processes			ps		IV-18,V-2
list recent commands		history		IV-16,V-2
list terminal			tty		VII-10
list text in big letters       	banner		VII-5,VII-18
list to terminal		echo		V-2,VI-2,VI-3,VI-5,VI-6,
VI-7,VI-8
list two files side by side	paste		VII-5
list type of files		file		VII-5
list user information		finger		V-3,VII-5
list values of environment 	printenv	VII-5
variables
list/set hardware limits       	limit		V-2,VII-18
log in on other machine		rlogin		VII-2
log in on other machine		telnet		VII-2

mail facility			Mail		VII-5
mail facility			mail		VII-5
manage dependent files		make		VII-3
move/rename files		mv		IV-11

print files			lpr		IV-14,VI-5
put job in background		bg		IV-18
put job in foreground		fg		IV-18

remove a variable		unset		VI-1
remove an alias			unalias		IV-17
remove directories		rmdir		IV-11
remove files			rm		IV-11,IV-17,V-2,VI-2,VI-6,
VI-7,VI-8
remove print job		lprm		IV-14

set environment variable	setenv		V-2,VII-5
set/list terminal 		stty		IV-4,IV-18,V-1,VII-5
characteristics
show CPU load			xload		VII-9
show available fonts		xfd		VII-9
sort files			sort		IV-14,IV-15,IV-16,IV-17,
V-2,VII-5
split Fortran source file      	fsplit		VI-2,VII-5
stop a session			logout		V-2
strip executable		strip		VII-5

talk to other user		talk		VII-5
terminal window			xterm		V-2,VII-9
time a command			time		V-2,VII-5
translate/delete characters    	tr		VII-18

version of grep			egrep		VII-5
version of grep			fgrep		VII-5

wait N seconds			sleep		VI-3



Latest update at 12 February, 1998.