UNIX Concepts and Commands

(from http://www.cs.wpi.edu/~cs545/notes/unix.html)

UNIX is a very powerful operating system. Its industrial strength make it popular among professional computer scientists. However, its inscrutibility challenges new users. UNIX is user-friendly, but not necessary learner-friendly. Here we can only cover the simplest UNIX concepts and commands.

UNIX Concepts

Shell. This is the application that starts when you begin a UNIX session. The commands you type are the inputs to the shell and what you see on the monior are its outputs. Most of the time the shell is totaly transparent, but it is useful to know that alternative shells are available. As you advance, you may want to find out about some of the alternatives.

Working Directory, Home Directory. The computer's file system consists of directories (called "folders" in windowing systems) which contain files and other directories. At any given time, UNIX considers one directory to be your working directory. When you start a UNIX session, your working directory starts out as your home directory, which is abbreviated with a "~" (tilde) followed by your login name. My home directory is ~wittels. Your working directory can be changed to any directory which you are allowed to access. Your home directory can only be changed by a system administrator.

Path. This is the logical location or address of a file inside the computer's file system. It starts with a single directory called "/" and known as the root of the file system. The path to a file is a list of all of the enclosing directories separated by "/" and without spaces. For example, if my home directory is /usr7/wittels and there is a directory, called cs4731, inside my home directory and a file called main.c inside the cs4731 directory, then the path to the file is /usr7/wittels/cs4731/main.c. This is the file's absolute address. A file can also has a relative address which tells how to get to it from the your working directory. Using the above example, if my working directory is /usr7/wittels then the file's relative address is cs4731/main.c. If the working directory is /usr7/wittels/cs4731 then the relative address is main.c. Two abbreviations useful in specifying a relative path are "." (single dot) meaning "my working directory" and ".." (double dots) meaning "the directory that my working directory is in". Thus, from my home directory ~wittels, I can specify the pah to wilson's home directory by the symbolic address ~wilson, the absolute address /usr7/wilson, or the relative address ../wilson.


UNIX Commands

pwd - print working directory. This command printts out the absolute path to your working directory. This is the result when I'm in my home directory:

wpi.WPI.EDU> pwd

ls - list working directory. Print the contents of your working directory. This is the result when I'm in my home directory:

wpi.WPI.EDU> ls
cs4731       public_html

You can also add the option -l to get a "long" listing:

wpi.WPI.EDU> ls -l
total 16
drwxr-xr-x   2 wittels  1174        8192 Jan 16 16:51 cs4731
drwx-----x   3 wittels  1174        8192 Jan 13 16:10 public_html

cd - change working directory. This example shows how the command is used.

wpi.WPI.EDU> pwd
wpi.WPI.EDU> ls
cs4731       public_html
wpi.WPI.EDU> cd cs4731
wpi.WPI.EDU> pwd
wpi.WPI.EDU> cd ..
wpi.WPI.EDU> pwd

cat - concatenate. There are two uses of this command.

cat file1 displays file1 on the screen.

cat > file1 stores everything you type into file1. UNIX stops storing when you type control-d.

more - diplay a file one screenful at a tme. Whereas cat file2 will whip a large file2 across the screen stopping only at the end, more file2 will display it one screenful at a time. Press space to move to the next screenful; press q to stop the display.

cp - copy a file. cp file1 file2 copies the contents from file1 into file2. If file2 did not already exist, it is created. If file2 did exist, its old contents are erased and replaced by the contents of file1. Note that file1 and file2 can be the absolute or relative paths to the files. Note cp can also be used to copy an entire directory and its contents.

mv - move a file. mv is same as cp except that the first file is destroyed. This can also be thought of as a way to rename a file.

rm - remove a file. Delete a file without warning and without hope of recovery. You can use rm to delete a directory (and all of its contents) by using the -r option. If I were to type rm -r ~wittels, it would significantly ruin my day.

mkdir - make directory. Create a directory in your working directory. For example, to make the cs4731 directory I went to my home directory and typed mkdir cs4731.

rmdir - remove directory. But only if the directory is already empty. rmdir cs4731 won't work unless everything inside has already been removed.

man - manual. This command shows you the manual page for a UNIX command. For example, man ls will tell you what the UNIX ls command does and what options are available. The manual pages will be displayed using the more command (space to show the next screen; q to quit). To find out more about this command type, of course, man man.

Fun and Games

Some UNIX features combine great power with great danger. Here are a few.

Safety Features and Confirmation - There aren't any. UNIX assumes you know what you are doing. If you tell it to destroy your entire MQP, UNIX won't ask "are you sure you want to do that?". Nor will it tell you when the destruction is complete. UNIX is efficient; it is generally not possible to recover what you told UNIX to destroy.

Case Sensitivity - UNIX is case sensitive. That means the files wpi.c, WpI.c, wPi.c and WPI.c are all different. This can sometimes cause confusion. For example, if a file is generated in an environment which is case insensitive (eg, DOS), it may not work properly on a UNIX system.

WildCards - pathnames can contain "wildcards" which allow you to specify the path when you only know part of a file's name, when you wnnt to work on more than one file at a time, or when you are too lazy to type the whole name.

"?" means "ignore any single character". For example, rm wil?on.c will remove files wilson.c, wilton.c, and wilxon.c but not willton.c and not wilon.c.

"*" means "ignore any number of characters, including no characters". For example, rm wil*on.c will remove all five of the previous examples. The most dangerious command in UNIX is rm -r *.

There are other wildcard symbols available.

Control-C - This key combination stops almost anything in UNIX. That is useful because some programs, especially when you are trying to get them to work, won't stop by themselves.

Quotes - If you put "quotes" around an address, wild cards are ignored. Thus, you can create file names such as my file.c (note the space) or my*file.c. (note the *). Perhaps you can even find a way to create a path name that includes a quote.