Unix Reference Guide
Unless you have a Unix machine sitting on your desktop, you're
probably accessing it through telnet or a command-line shell. This
interface may be a little intimidating to new users who are usually a tad
more comfortable with a point-and-click interface. But it's really not as
hard as it looks.
This reference sheet gives you the basic commands you'll need,
focusing especially on file management. You can also learn how to
combine commands and become a real power user.
Reading and printing multiple files
Changing directories, moving around
Using the online manual
Changing permissions on a file or directory
Changing ownership of files and directories
Moving and renaming files
Displaying and setting dates
Creating or changing passwords
Differences between files
Stopping a process and coming back home
Printing the pathname
Searching for files that meet specified conditions
Logging into remote systems
Gathering information about users
Removing files and directories
Searching for lines that match regular expressions
Printing the beginning of a file
Logging in as another user
Printing the end of a file
Communicating with other hosts
Removing printer queue requests
Displaying information about a system
Most Unix commands are fairly simple and only have a handful of
options. The beauty of Unix is that these commands can be combined to do
more complex tasks. You can send the output of one command to another
command for further processing by separating the commands with a pipe (|).
If you want to follow a file as it grows (tail
-f) and search for a regular expression (grep),
you can combine commands to achieve this. If you are searching for files
in a growing error log that contains the word supermonkey you would type
tail -f errorlog | grep ".*supermonkey.*"
This tails the errorlog and then greps for the
regular expression "supermonkey." The . and * are
called meta-characters. The .* in this example matches any
number of any character.
cat allows you to read multiple files and then print them
out. You can combine files by using the > operator and append
files by using >>.
Structure: cat [argument] [specific file]
If you wanted to append three files, you'd do this:
cat silly.html monkey.html baby.html > all
cd (or chdir) stands for "change directory." This
command is key to moving around your file structure.
Structure: cd [name of directory you want to move to]
When changing directories, start with / and then type the
complete file path, like so:
If you want to enter a subdirectory of the directory that you're
currently in, then omit the first /. So if you wanted to stay in
the chimp directory but move to the simian
subdirectory, you'd type:
chmod (which stands for "change mode") changes who can access
a particular file. A "mode" is created by combining the various options
from who, opcode, and permission.
Structure: chmod [option] mode file
If you look at a list of files using the long list format
ls -l, you'll see the permissions, owner, file size, modification
time, and filename. The first column of the list shows who can read,
write, and execute the files or directories - in other words, the
permissions. It basically shows who has permission to do what to a given
file or directory. r stands for "read" and means that you're
allowed to read the file or directory. w stands for "write" and
gives permission to edit or change the file as well as create, move,
rename, or remove a directory. x stands for "execute," which
gives permission to run a file or search a directory.
Every file or directory has four sets of rwx permissions. The
first set represents the user (u), the second set represents the group
(g), the third set represents other (o), and the fourth set represents
all (a). The column will look like this:
Each set of rwx represents user, group, and other
respectively. Only the
owner of a file or a
privileged user may change the permissions on a file.
There are two ways to change permissions on a file or directory,
either numerically or by using lettered commands. Both ways use the
command chmod. To add permissions to a file, you use +,
to remove permissions you use-. Take this file for example:
-rw-r--r-- 1 meghan monkey 476 Oct 14 17:13 simian.html
To allow a group (monkey, in this case) "write" access, you
chmod g+w simian.html
If you wanted to remove "read" ability from "other" you would type:
chmod o-r simian.html
It is also possible to specify permissions using a three-digit
sequence. This is a more efficient way to change permissions (or at least
it requires less typing), so use this method if it doesn't confuse you.
Each type of permission is given an octal value. Read is given the value
of 4, write is given the value of 2, and execute is given the value of 1.
These values are added together for each user category. The permissions
are changed by using a three-digit sequence with the first digit
representing owner permission, the second digit representing group
permission, and the third digit representing other permission. For
example, if you wanted to make simian.html readable, writable,
and executable for the user, readable and writable for the group, and
readable for other, you would type:
chmod 764 simian.html
The first digit means readable and writable for the user (4+2+1), the
second digit means readable and writable for the group (4+2), and the
third digit means readable for other (4).
If you want to change the permissions on a directory tree use the -R
option. chmod -R will recursively change the permissions of
directories and their contents.
Structure: chown [option] newowner files
chown changes who owns a particular file or set of files. New
owner files refer to a user ID number or login name that is usually
located in the /etc/password directory. The owner of a file or
directory can be seen by using the command
ls -l. Only the owner of a file or a privileged user can change the
permissions on a file or directory. The following example changes the
owner of silly_monkey.html to joanne:
chown joanne silly_monkey.html
The cp command copies files or directories from one place to
another. You can copy a set of files to another file, or copy one or more
files under the same name in a directory. If the destination of the file
you want to copy is an existing file, then the existing file is
overwritten. If the destination is an existing directory, then the file
is copied into that directory.
Structure: cp [options] file1 file2
cp [options] files directory
If you wanted to copy the file gorilla.html into the
directory called apes, here's what you would do:
cp gorilla.html /webmonkey/apes/
A handy option to use with cp is -r. This
recursively copies a particular directory and all of its contents to the
specified directory, so you won't have to copy one file at a time.
The date command can be used to display the date or to set a
Structure: date [option] [+format]
date [options] [string]
The first structure shows how date can be used to display the
current date. A certain format can be specified in which the date should
be displayed. Check the Unix
manual for specific formats and options. The second structure allows
you to set the date by supplying a numeric string. Only privileged users
will be able to use this second command structure.
diff displays the lines that differ between two given files.
Structure: diff [options] [directory options] file1 file2
diff can be an extremely valuable tool for both checking
errors and building new pages. If you run a diff between two
files, you'll be shown what differences the files have line by line. The
lines referring to file1 are marked with the < symbol.
The lines referring to file2 are marked by the >
symbol. If the file is a directory, diff will list the file in
the directory that has the same name as file2. If both of the
files are directories, diff will list all the lines differing
between all files that have the same name.
If you have a file that is not working properly, it can be a great
help to check it against a similar file that is working. It will often
quickly alert you to a line of code that's missing.
A handy option to use if you want to generally compare two files
without noting the complex differences between them is the -h
option (h stands for half-hearted). Using -i as an
option will ignore differences in uppercase and lowercase characters
between files, and -b will ignore repeating blanks and line
The exit command allows you to terminate a process that is
currently occurring. For example, if you wanted to leave a remote host
that you were logged onto (see rlogin), you would type exit.
This would return you to your home host.
find searches through directory trees beginning with each
pathname and finds the files that match the specified condition(s). You
must specify at least one pathname and one condition.
Structure: find pathname(s) condition(s)
A wise Unix-master friend once told me, "Never forget that in Unix
find is your friend." He was right. The find command is
useful for searching for particular files, directories, and patterns in
There are several handy conditions you can use to find exactly what
you want. The -name condition will find files whose names match
a specified pattern. The structure for the name condition is:
find pathname -name pattern
The condition -print will print the matching files to the
pathname specified. -print can also be used in conjunction with
other conditions to print the output.
If you wanted to find all the files named favorites.html in
the directory john_hughes, then you'd do this:
find /john_hughes -name favorites.html -print
This looks through the directory john_hughes and finds all
the files in that directory that contain favorites.html, then
prints them to the screen. Your output would look like this:
All meta-characters (!, *, ., etc.) used with -name should be
escaped (place a \ before the character) or quoted.
Meta-characters come in handy when you are searching for a pattern and
only know part of the pattern or need to find several similar patterns.
For example, if you are searching for a file that contains the word
"favorite," then use the meta-character * to represent matching zero or
more of the preceding characters. This will show you all files which
find /john_hughes -name '*favorite*' -print
This looks through the directory john_hughes and finds all
the files in that directory that contain the word "favorite." The output
would look like this:
The -user condition finds files belonging to a particular
user ID or name. For more conditions, use the
online Unix manual.
If you wanted to find all the files in john_hughes that are
owned by the user clarence, you would do this:
find /john_hughes -user clarence
Your output would look something like this:
You can also use find to do recursive operations for commands
that don't have recursive options. For example, if you want to
grep an entire directory tree, you could use find
with grep to do this. If you wanted to find all the index.html
files in the john_hughes directory tree, you would type:
find /john_hughes/ -print |xargs grep '*index.html'
In this example, you are looking through the john_hughes
directory tree for all files named index.
Structure: finger [options] users
finger displays information about various users as well as
information listed in the .plan and .project files in a
user's home directory. You can obtain the information on a particular
user by using login or last names. If you use the latter, the info on all
users with that last name will be printed. Environments that are hooked
up to a network recognize arguments (users) in the form of user@host
or @ host.
The grep command searches a file or files for lines that
match a provided regular expression
("grep" comes from a command meaning to globally search for a
regular expression and then print the found
Structure: grep [options] regular expression [files]
To exit this command, type 0 if lines have matched, 1 if no lines
match, and 2 for errors. This is very useful if you need to match things
in several files. If you wanted to find out which files in our
eighties directory contained the word "totally," you could use
grep to search the directory and match those files with that word.
At the command line you would type:
grep 'totally' /eighties/*
The * used in this example is called a meta-character, and it
represents matching zero or more of the preceding characters. In this
example, it is used to mean "all files and directories in this
directory." So, grep will go into all the files and directories
in eighties and tell you which files contain "totally." Our
output will look like this:
grep: /eighties/john_hughes: Is a directory /eighties/legwarmers.html
This is telling us that john_hughes is a directory within
eighties/ and grep will not search in those files for the
phrase, but that legwarmers.html does contain the phrase
See the find command for information about using
grep in conjunction with find to do recursive operations.
Structure: head [-n] [files]
head prints the first couple of lines of one or multiple
files. -n is used to display the first n lines of a
file(s). The default number of lines is 10. For example, the following
will display the first 15 lines of monkey_list.html.
head -15 monkey_list.html
Structure: kill [options] IDs
kill ends one or more process IDs. In order to do this you
must own the process or be designated a privileged user. To find the
process ID of a certain job use
There are different levels of intensity to the kill command,
and these can be represented either numerically or symbolically. kill
-1 or HUP makes a request to the server to terminate the
process, while kill -9 or kill KILL forces a process to
terminate absolutely. Most polite Unix users will attempt to kill
a process using -1 first before forcing a process to die.
Structure: less [options] [files]
less is similar to
more in that it displays the contents of files on your
screen. Unlike more, less allows backward and forward
movement within the file. It does not read the whole file before
displaying its contents, so with large files less displays
faster then more. Press h for assistance with other
commands or q to quit.
lprm removes printer queue requests.
Structure: lprm /usr/ucb/lprm [optons] [job#] [users]
The lprm command will remove a job or jobs from a printer's
queue. If lprm is used without any arguments, it will delete the
active job if it is owned by the user. If the command is used with -,
then all jobs owned by the user will be removed. To remove a specific
job, use the job number.
If no filenames are given, ls will list files in the current
directory. If one or more files are given, ls will display the
files contained within "name" or list all the files with the same name as
"name." The files can be displayed in a variety of formats.
Structure: ls [options] [names]
ls is a command you'll end up using all the time. It simply
stands for list. If you are in a directory and you want to know what
files and directories are inside that directory, type ls.
Sometimes the list of files is very long and it flies past your screen so
quickly you miss the file you want. A handy
trick to combat this problem (besides enlarging your screen) is to
more after the ls command, like so:
ls | more
The character | (called pipe) is typed by using shift
and the \ key. | more will show as many files as will
fit on your screen, and then display a highlighted "more" at the bottom.
If you want to see the next screen, hit enter (for moving one
line at a time) or the spacebar (to move a screen at a time). | more
can be used anytime you wish to view the output of a command in this way.
A useful option to use with ls command is -l. This
will list the files and directories in long format. This means it will
display the permissions (see
chmod), owners, group, size, date and time the file was last
modified, and the filename.
webmonkey.com:[/eighties]% ls -l
drwxrwxr-x meghan staff 512 Oct 5 09:34 john_hughes
-rwx-rw-r-- meghan staff 4233 Oct 1 10:20 boy_george.html
-rwx-r--r-- meghan staff 4122 Oct 1 12:01 legwarmers.html
There are several other options that can be used to modify the ls
command, and many of these options can be combined. -a will list
all files in a directory, including those files normally hidden. -F
will flag filenames by putting / on directories, @ on
symbolic links, and * on executable files.
The man command can be used to view information in the online
Structure: man [options] [[section] subjects]
man searches for information about a file, command, or
directory and then displays it on your screen. Each command is a subject
in the manual. If no subject is specified, you must give either a keyword
or a file. You can also search for commands that serve a similar purpose.
For example, if you wanted more information about the chmod
command, you should type:
A screen will then appear with information about chmod. Type
q to quit.
Structure: mkdir [options] directory name
mkdir creates a new directory. In order to do this you need
permission to write to the parent directory.
Structure: more [options] [files]
more displays the contents of files on your screen. To have
the next line displayed, hit the return key, otherwise press the
spacebar to bring up the next screen. Press h for assistance
with other commands, n to move to the next file, or q
to quit. See also:
mv moves files and directories. It can also be used to rename
files or directories.
Structure: mv [options] sources target
If you wanted to rename ally_sheedy.html to
molly_ringwald.html, you would do this:
mv ally_sheedy.html molly_ringwald.html
After typing this command, ally_sheedy.html would no longer
exist, but a file called molly_ringwald.html would now exist
with the same contents.
Structure: passwd [options] files
The passwd command creates or changes a user's password. Only
the owner of the password or a privileged user can make these changes.
Structure: ps [options]
The ps command prints information about active processes.
This is especially useful if you need to end an active process using the
kill command. Use ps to find out the process ID number, then
use kill to end the process.
pwd prints the pathname of the current directory. If you
wanted to know the path of the current directory you were in, you'd type
pwd and the output would be something like:
Structure: rlogin [options] host
The rlogin command, which stands for remote login, lets you
connect your local host to a remote host. If you wanted to connect to the
remote host gorilla and you were on webmonkey, you
would do this:
rlogin gorilla password:******
You would then be at gorilla.
rm removes or deletes files from a directory.
Structure: rm [options] files
In order to remove a file, you must have write permission to the
directory where the file is located. When removing a file that you do not
have write permission on, a prompt will come up asking you whether or not
you wish to override the write protection.
The -r option is very handy and very dangerous. -r
can be used to remove a directory and all its contents. If you use the
-i option, you can possibly catch some disastrous mistakes
because it'll ask you to confirm whether you really want to remove a file
before going ahead and doing it.
Structure: rmdir [options] directories
rmdir allows you to remove or delete directories but not
their contents. A directory must be empty in order to remove it using
this command. If you wish to remove a directory and all its contents, you
should use rm -r.
Structure: su [option] [user] [shell_args]
su stands for superuser (a privileged user), and can be used
to log in as another user. If no user is specified and you know the
appropriate password, su can be used to log in as a superuser.
Structure: tail [options] [file]
The tail command will print the last ten lines of a file.
tail is often used with the option -f, which tells tail
not to quit at the end of file and instead follow the file as it grows.
Use ctrl-C to exit this command. This is very useful if you need
to track a file - Production editors often use this command to tail their
error logs. This gives them insight into exactly what an error is while
it's happening so they can fix it quickly.
Structure: telnet [host [port]]
You can communicate with other computers by using the telnet protocol.
The host must be a name or an Internet address. telnet has two
modes: the command mode, which is indicated by the telnet >
prompt, and an input mode which is usually a session where you would log
on to the host system. The default mode is command mode, so if no host is
given it will automatically go into this mode. If you need help while in
the command mode, type ? or help.
Structure: who [options] [file]
The who command prints out information about the most recent
status of the system. If no options are listed, then all of the usernames
currently logged onto the system are displayed. The option am i
will print the name of the current user. The -u option will
display how long the terminal has been idle.