In Unix, there are many ways to do everything. This document describes one way to do each of the things you need to do the first couple of assignments. Alternatives are mentioned in italics.
Use your WatIAM/Quest user id and password to log in to the lab computers. (If you can't log in, and you're sure that you are using the correct credentials, you should speak with a consultant in the MFCF Help Centre in MC 3017 about your account.) Once you have logged in, you will be presented with a graphical user interface. You will need to access the command line interface to do CS 241 course work.
If you are using a Mac, you can run either "X11" or "Terminal". On Linux machines, look under "Applications" for a program called "Console" or "Terminal" or something similar. On Solaris machines, there will be a number of command line windows or "xterms" already open.
To execute a Unix command in a terminal (command-line window), first select the terminal you want to run the command in. On Solaris, position the mouse cursor over the appropriate window. On Linux, click on the appropriate window. Then simply type the command name and press Enter.
The Unix-based systems in the labs will allow you to access the files on your student account and run various standard Unix commands, but they do not necessarily have all the software you will need to complete your assignments. To do course work, you will need to connect to another system with the SSH (Secure SHell) protocol.
There are a number of hosts available in the student computing environment (see http://www.cs.uwaterloo.ca/cscf/student/hosts), but it is recommended that you use one of the linux.student.cs.uwaterloo.ca computers. Other systems may have different configurations and outdated software, and we cannot guarantee that the CS 241 course tools will work properly on those systems. If you are having issues with any of the programs and tools mentioned in lectures or assignment specifications, make sure you are running them from a linux.student.cs.uwaterloo.ca host before asking for help.
To connect to a host, execute the following command in a command line window:
ssh -Y linux.student.cs.uwaterloo.ca(The "-Y" part is optional. Including it enables "X11 forwarding", which allows you to start graphical windowed programs from the terminal.)
You will be asked for a username and password; enter your WatIAM/Quest credentials. Note that unlike many password prompts, the prompt from the ssh command will not display "*" characters as you type each character of your password, so it might seem like it's not receiving your keyboard input. However, it is receiving input, so if you just type your password correctly and hit Enter then you should be able to log in. Then you should see a command prompt that looks something like this:
linux028:~>Where "linux028" is the name of the machine you are connected to. You can use this command prompt to do work on the remote machine just as you would with a local command line window. The rest of this document will explain some of the basic commands and tools you will need to know to complete CS 241 assignments.
Note: SSH can also be used to access the Unix hosts from any computer with an internet connection. Thus, if you have an SSH client on your home computer, you can use SSH to do your course work from home. Any Unix-based computer (including Macs) will probably already have the ssh command available, so you just need to open the command line and execute ssh -Y linux.student.cs.uwaterloo.ca as above. Windows installations normally do not come with an SSH client, so you will have to install one yourself. PuTTY is a commonly used free SSH client, and can be downloaded from http://www.chiark.greenend.org.uk/~sgtatham/putty/. Another option is to install Cygwin, a Unix-like environment for Windows that has the ssh command available.
linux028:~> date Mon Sep 19 10:56:51 EDT 2011 linux028:~>You can redirect the standard output of a Unix command to a file using > (a 'greater than' sign) followed by a name for the file; for example,
linux028:~> date > myfile linux028:~>places the output of the date command in the file named myfile. The cat command shows the contents of one or more files. The output of cat, like any other command, may be redirected. The three commands below show the contents of myfile, copy the contents of myfile to yourfile, and show the contents of both myfile and yourfile concatenated together (hence the name cat).
linux028:~> cat myfile Mon Sep 19 10:56:51 EDT 2011 linux028:~> cat myfile > yourfile linux028:~> cat myfile yourfile Mon Sep 19 10:56:51 EDT 2011 Mon Sep 19 10:56:51 EDT 2011 linux028:~>cat, like many commands, can take its input from the standard input. The first cat command below takes two lines of input from the keyboard and puts them in the file theirfile. Using the keyboard it is necessary to type the two lines and in addition to indicate the end of input by typing ^D (D with the control key held down). The second cat command shows the contents of the newly created file.
linux028:~> cat > theirfile the quick brown fox jumps over the lazy dog now is the time for all good men to come to the aid of the party ^D linux028:~> cat theirfile the quick brown fox jumps over the lazy dog now is the time for all good men to come to the aid of the party linux028:~>Standard input may also be redirected from a file using < (a 'less than' sign):
linux028:~> cat < myfile Mon Sep 19 10:56:51 EDT 2011 linux028:~>
Note: Be sure to use ^D to indicate the end of input, not ^Z as with Windows. If you use ^Z, you'll suspend the cat command and it will stay suspended until you use the fgcommand to start it up again. These facilities are examples of Unix job control.
linux028:~> ls bin cs241 myfile theirfile yourfile linux028:~> rm theirfile linux028:~> cp myfile zip linux028:~> mv zip zap linux028:~> ls bin cs241 myfile yourfile zap linux028:~>
You will probably want to organize your files into different directories, instead of leaving everything in the default home directory. Each time you enroll in a CS course, a directory for that course is automatically created. You can use the cd command to change to your personal cs241 directory:
linux028:~> cd cs241 linux028:~/cs241>This directory is a convenient place to store all the files you create for the course. You can organize things further by using the mkdir command to make new directories. For example, suppose you want to create a directory to store all the files for the first assignment:
linux028:~/cs241> mkdir A1 linux028:~/cs241> cd A1 linux028:~/cs241/A1>When you're finished working on Assignment 1, you can change back to your home directory. In Unix, .. refers to the directory "above" your current working directory. So simply type cd .. twice:
linux028:~/cs241/A1> cd .. linux028:~/cs241> cd .. linux028:~>Alternatively, ~ refers to the home directory. So from anywhere in the system, you can type cd ~ to return to your home directory.
linux028:~/cs241/A1/P1/solutions/attempt279> cd ~ linux028:~>
freds-computer:~> ls bin cs241 myfile yourfile zap freds-computer:~> scp myfile email@example.com:~/cs241/ firstname.lastname@example.org's password: myfile 100% 185 0.2KB/s 00:00 freds-computer:~> scp email@example.com:~/cs241/myfile ./ firstname.lastname@example.org's password: myfile 100% 185 0.2KB/s 00:00In the first example, you are first copying myfile to Fred's CS account, email@example.com, and placing it in the directory ~/cs241/. In the second example, you are copying myfile from the directory ~/cs241/ on Fred's CS account, to the directory ./. (In Unix, . refers to your current working directory.)
linux028:~> evim myfile &
evim is a dumbed-down version of gvim. gvim a graphical version of the character-based editor vim. vim is an extended version of the standard Unix editor vi. vi has very powerful command and macro facilities, and is the prefered editor of many serious programmers. But those accustomed to Windows-based editors may find it weird. evim removes the weirdness at the expense of being incompatible. gvim is compatible and so requires you hit the i key before inserting text in the file. (If you start gvim and hit i it behaves pretty much the same way as evim until you hit esc. Then if you hit i again it behaves like evim again.)
evim and gvim are graphical programs that run in a separate window from the terminal. Thus, as explained in the SSH section, you will need to include the -Y flag when you run the ssh command to be able to use these windowed programs. If you are having trouble running them, you will have to use an editor that runs in the terminal such as vim, emacs or pico. pico is the simplest of the three to use, but also the least powerful.
linux028:~> mozilla &
Like evim and gvim, mozilla runs in a window, so you will need to enable X11 forwarding by giving the -Y option to ssh. If you don't want to run windowed programs, you can use the terminal programs w3m to browse the web and alpine to read email and news. If you only need to use a web browser to submit assignments, the marmoset_submit script is much easier to use than w3m or mozilla.To read mail and news, click the envelope icon near the bottom left of the Mozilla window. The first time you do this you'll have to answer some questions:
(If "mailservices.uwaterloo.ca" does not work, your email account may be on a different server. You will have to figure out the correct server information on your own. It is most likely somewhere on your department/faculty's website.)
Then you'll get a mail/news window. In this window, click your email address in the left panel. In the right panel, under Accounts click Create a new account. This time:
If you already use another program to read email and news, feel free to continue. Make sure that you do receive and read mail addressed to your UW account! You can browse the web from home, too, but you might have trouble submitting your assignments from home if they are on a UW computer!
linux028:~> source /u/cs241/setup
You must re-enter this command whenever you log out and log in again. You can automate this process by using evim to edit the file named .cshrc You need to insert this line immediately before the second-last endif in the file. If you screw up this file, bad things will happen.
Alternatively, you can use the marmoset_submit command line tool to submit assignments. It is much easier and faster than doing it through a web browser. You need to run the source /u/cs241/setup command before marmoset_submit will be available. A more complete tutorial is here: http://www.student.cs.uwaterloo.ca/~cs241/marmoset_submit/
To use Marmoset, log in using your WatIAM/Quest user id and password. Marmoset displays a table of "Projects" -- each question in each assignment is treated as a separate project. Use the link in the column titled project to view the assignment specification; use the link in the column titled submissions to view the status and grade for any previous submissions you have made for this project; use the link in the column labeled web submission to submit a file for testing. When you click submit a page will open to allow you to type or select the name of your file containing your submission.
Your submission will immediately be run on a set of public tests; these results should be available quite quickly -- you must refresh the view screen to see the scores when they are available.
If your submission succeeds on the public tests you will be invited to submit for release testing; that is, for actual grading. You will be informed as to which of the release tests your program passes, but no details. If you fail some tests you should debug your submission and resubmit. There is no penalty for resubmission, but to encourage you to start early and to discourage you from stabbing in the dark you are restricted to three release tests per project per day.
If you notice any errors in this document, report them to firstname.lastname@example.org.