Lab 0: Intro and Setup

Deadline: Thursday, June 24, 11:59:59 PM PT

Hello! Welcome to CS61C! We're excited to have you on board :D Please pay attention as we demonstrate the safety features of this aircraft.

This lab may be a little long, but please read carefully; it covers many important things that will prepare you for the rest of the course!

Objectives

Each lab will begin with a few objectives; use them to reflect on your learning and guide your thinking! Here are the objectives for this lab:

  • The student will be able to describe and adhere to all course policies.
  • The student will set up accounts for GitHub, Gradescope, Hive machines, Ed, and other course-related services.
  • The student will gain familiarity with Linux and Git commands.

Jargon

A quick clarification on some terms:

  • TA/GSI/uGSI: Teaching Assistant (sometimes called Graduate/Undergraduate Student Instructor).
  • AI: Academic Intern, also part of course staff. You'll see them in OH and sometimes Ed.
    • In this course, AI generally stands for this, and not "artificial intelligence".
  • OH: Office Hours, where you can meet course staff in (virtual) meetings and ask questions.
  • Hive/"Hive machines"/"the Hive": a group of instructional servers. More details later in the lab.
  • CLI: Command Line Interface, or the interface you see in terminals
  • GUI: Graphical User Interface
  • OS: Operating System (commonly macOS, Windows, Linux, FreeBSD, etc.)

Exercise 0: Intro Form

Action Items

  • Please fill out the introduction form to help us understand how to better help you succeed. Your responses will not affect your grade.

Exercise 1: Course Policies

You can view the course policies on the policies page of the course website. You are responsible for understanding and adhering to all policies throughout the course of the semester. Please pay particular attention to the Grading, Labs, and Academic Dishonesty and Cheating sections.

Action Items

Exercise 2: Accessing Services

Unfortunately, assignments in this course do require some (sometimes boring) setup. Let's get that out of the way.

Accessing Services

CS 61C primarily uses a couple services for distributing assignments, receiving work, and grading. There's a brief overview of the important ones in the sections below.

If you're unable to access any services or resources due to internet access restrictions, you can download and use the Berkeley campus VPN (see the Berkeley Library VPN info page). If the campus VPN is inaccessible or doesn't work for you, contact us (Ed preferrably, if that's not accessible email cs61c [at] berkeley.edu) and we can try to work something out.

Unfortunately, some services and resources may be inaccessible or blocked in certain regions. As I'm writing this lab:

  • GitHub (AWS + their own infrastructure) is inaccessible in some regions.
  • Google and YouTube are inaccessible in some regions.
  • Gradescope and PrairieLearn are hosted on Amazon Web Services (AWS), which may be partially inaccessible in some regions.
  • OH Queue and OkPy are hosted on Google Cloud Platform (GCP), which may be partially inaccessible in some regions.
  • The 61C website and Ed use Cloudflare, so they may be partially inaccessible in some regions.
  • Hive machines are accessed using the SSH protocol, which may be partially blocked in some environments (e.g. CalVisitor WiFi on campus).

(╯°□°)╯︵ ┻━━━┻

Note: Non-standard Enrollment

If you're enrolled CS 61C normally, you can ignore this blurb.

If you're a concurrent enrollment student, in CS 47C, resolving an incomplete, or in some other non-standard enrollment for CS 61C, you might not be able to access some of the resources below. If that is the case, please fill out this form so we can add you.

CalNet ID (and Berkeley Google accounts)

Most students should have a CalNet ID (and therefore, email ending in @berkeley.edu).

  • If a service allows CalNet ID login, use that whenever possible.
  • If a service prompts you to sign in with Google, log in using your @berkeley.edu email if possible. This is your "Berkeley Google account" (or bConnected account, but nobody says that).
  • If you would like to use an existing account on a service, try to add your Berkeley email, preferrably as the primary email.

Ed

Ed is a discussion forum that we'll be using as the main method of communication for this course. All announcements will be made here, and almost all questions or comments you may have should be posted here (unless we say otherwise).

We've already emailed invites to the 61C Ed course to most enrolled students. If you've recently enrolled, this may be delayed by several hours while the campus systems process your enrollment.

Please read through the Discussion Forum section of our policies. Please remember and follow the Ed Etiquette!

Gradescope

Gradescope is the platform we use for submitting and grading programming assignments.

We've already enrolled students in the 61C Gradescope course. To sign in, visit Gradescope, click Log In, then School Credentials, then CalNet ID.

Warning: Please ensure you set your @berkeley.edu email as your primary email. If not, we might not be able to find your Gradescope account, so you might not get credit for your work!

PrairieLearn

PrairieLearn is the platform we use for homework and quizzes.

Visit PrairieLearn and make sure you can see the 61C Summer 2021 course. If not, try the Add or remove courses button.

GitHub

GitHub is a hosted Git service we use for code distribution.

If you have an existing GitHub account, feel free to use that; repositories created in this course are private, and anything you do for this course shouldn't affect the rest of your GitHub account.

If you don't have a GitHub account or want to make a separate one for schoolwork, sign up at GitHub.

OH Queue

Office Hours (OH) will be scheduled and managed through the OH Queue. Please use your Berkeley Google account when logging in; non-Berkeley Google accounts will not be able to use the OH Queue properly.

Please read the blue info box on the OH Queue page. If you're having issues, let staff know using the ticket chat. Please note that due to the high volume of tickets, each ticket will be limited to 10 minutes of help. If you are unable to get your question answered in those 10 minutes, you may rejoin the queue. This is to help ensure that we can give at least some help to every student.

YouTube & Kaltura

Recordings of discussions and lectures, as well as other video resources, will be uploaded to either YouTube or Kaltura.

Kaltura: Under the bCourses site for this course, there is a Media Gallery page. Kaltura uploads will be visible here.

YouTube: YouTube uploads will be linked on the course website. You will need to be signed into YouTube using your Berkeley Google account to view our YouTube uploads. If you're unable to view a video on YouTube, make sure you're using your Berkeley Google account (click your avatar on the top-right corner and Switch Accounts, or try the YouTube Channel Switcher page).

Note: If you can't view the videos on YouTube, usually:
  • You might be using a personal Google account on YouTube.
  • You might be using your Berkeley Google account, but you have 2 or more YouTube channels on that account.

If you see a "More accounts" button when switching accounts, try that. If not, try the channel switcher (linked above), or try a private browsing/incognito window.

Zoom

We will be holding meetings (lab/project/general OH, lectures, discussions, etc.) through Zoom. When signing in, use the Sign in with SSO option, enter berkeley.zoom.us, and sign in with your CalNet ID.

Note: If you get an error saying "Unable to sign up with your email address" or "Cannot sign up with email address ending with @berkeley.edu", make sure you are using Sign in with SSO and not another method to sign in.

Regularly scheduled meetings (e.g. OH, discussions) will be held in standing Zoom rooms. The links for these can be found in the Zoom Links post on Ed.

Instructional Accounts and Servers (the Hive!)

The "Hive" is a group of servers maintained by the EECS department. Campus is not exactly open right now, but they live in Soda 330 if you ever want to give them a hug! You can intearct with these servers remotely through SSH and the command line (more on that later). We've already installed most of the software we'll be using on the Hive machines, so you can work on most assignments on the Hive if you want! You can find a list of Hive machines at Hivemind (only the names starting with hive).

You will need to sign up for a cs61c instructional account, which you'll use to access the Hive.

Note: If you can't create an account for whatever reason, don't worry! See the Non-standard Enrollment section, and continue without an account for now.

Action Items

  • Sign up for and log into all the services described above.
    • Ed: Make sure you can access the course Ed. If you haven't already, take a moment to review the Ed Etiquette on our policies.
    • GitHub: Make sure you can log into the GitHub account you plan to use for this course.
    • Gradescope: Make sure you can log in and see the Summer 2021 version of the CS 61C course.
    • PrairieLearn: Make sure you can log in and see the Summer 2021 version of the CS 61C course.
    • OH Queue: Make sure you can log in without errors. If you haven't already, take a moment to review the info box on the OH Queue.
    • YouTube/Kaltura: When lecture 1 is uploaded, make sure that you can view the video. If it's not uploaded yet, you can come back to this later.
    • Zoom: Follow the login instructions in the Zoom section above. Make sure you can join the various OH rooms.
    • Instructional Account: If you haven't already, visit WebAccount and create a cs61c instructional account

Exercise 3: Command Line Essentials

If you took CS61A and CS61B, you likely have some experience with a command line interface (CLI) and terminal commands. We'll be using the CLI a lot in this course, so let's take a moment to review some of the basics.

Example commands will be formatted like:

$ command arg1 arg2

Typing that (without the $) in your terminal will run the command. In this case, it just prints "Hello world".

Flags are commonly used to specify program options or alter behavior. They usually begin with one or two dashes, and can optionally take an argument.

$ command --help
$ command -f flag_arg

You may find it helpful to review 61B's list of common CLI commands.

CLI Keyboard Shortcuts

When typing commands or file paths:

  • <tab> will autocomplete the current term
  • <up arrow> and <down arrow> will allow you to refill commands you've used previously without typing them again.
  • <ctrl> + a will move the cursor to the beginning of the current line (helpful for fixing mistakes)
  • <ctrl> + e will move the cursor to the end of the current line (also helpful for fixing mistakes)
  • <ctrl> + r will let you search through your recently used commands

Hello World

echo repeats whatever arguments you give it.

$ echo "Hello World"
$ echo -e "I have done nothing\nbut teleport bread\nfor 3 days."

Working With Files

touch will create a blank file with the file name you provided.

$ touch example.txt

This will create a file named example.txt with nothing inside.

If you'd like to create a file and add text in one go, you can use:

$ echo "Your contents here, inside double quotes" > example.txt

This will create a file with the name example.txt in your current directory. If the file already exists, it will be overwritten. The file will contain Your contents here, inside double quotes but without the double quotes. The > symbol takes one argument which redirects where data printed to stdout is sent. Here, we are redirecting the output of echo to a file named example.txt.

You can also use the echo command by itself, in which case it will print the string to the terminal (without creating a file in the process).

You can view the contents of a file with the cat or less commands.

$ cat example.txt
$ less example.txt

cat print the contents of example.txt to your terminal. less opens a basic viewer which allows you to scroll and search.

You can provide a relative or absolute path to print out non-local files:

$ cat ../other_folder/file.txt
$ cat ~/home_file.txt
$ cat /creeper/awww_man

man - Manual Pages

The manual pages ("man pages") are great UNIX resources that are often underused; while not as versatile as Google, they contain documentation on UNIX components from program usage, language standards and conventions, and more. They also work offline, so they can be handy if you're ever stuck in a North Alaskan woodland cabin in the middle of a snowstorm basking in the dying glow of a ThinkPad which BTW runs Arch Linux.

While your favorite search engine probably also has the answers you're looking for, in this course, we'd still like you to get comfortable with using man, especially for C and UNIX-related questions.

If you want the man page for a single program/command, you can run:

$ man command_name | less

The man page for a program typically contains information about what the program is used for, what certain flags do when you invoke the program with them, and where to go for more information. Since we piped the man page into less, this page is scrollable (use your arrow keys or the space bar). Hit q to exit the man page and get back to your terminal prompt.

$ man echo | less

The above command should bring up the man page for the echo command.

If you want to search the man pages for a command that pertains to a keyword:

$ man -k single_keyword | less

This command will search the manual pages for a command with the keyword single_keyword. Forget how to open files in Vim? You can search for editor and get a list of all editor-related commands on your system.

ssh - "Secure Shell"

For this class, we'll expect you to test most of your projects, homeworks, and labs on the Hive machines. To access the Hive machines remotely, you'll be using the SSH protocol and programs.

Note: If you weren't able to get an instructional account, you can come back here later!

You can find a list of Hive machines at Hivemind. There are 30 of them, named hive1, hive2, ..., hive30. If its name starts with hive, it is a Hive machine. If it doesn't start with hive (sorry ashby), it's not a Hive machine. Using a non-Hive machine may lead to weird setup/runtime errors.

Sometimes, a Hive machine may be down or overloaded. If you're getting "Connection refused" or "Connection timeout" or other connection errors, check Hivemind and pick another machine to use.

Once you have an instructional account, you can SSH into an instructional server with the following command:

$ ssh cs61c-???@hive#.cs.berkeley.edu

Remember to replace cs61c-??? with your instructional account username, and hive# with a Hive machine's name. Your default password is displayed by WebAccount when creating the account, so you might have to reset your password if you forgot it.

Troubleshooting:

  • If nothing happens for a long time: check your internet connection. Some network firewalls, including CalVisitor on campus, block SSH. Try another network (AirBears2 or eduroam if you're on campus).
  • Permission denied, please try again: if you're copy-pasting the password, try typing it out manually.
  • Connection refused or other weird errors: the Hive machine you picked might be down. Try another one
  • Reserved for cs61c staff: try another Hive machine :)

When your connection succeeds, you should be able to interact with and run commands on your chosen Hive machine! To exit this SSH session, simply run:

$ exit

Files on the Hive machines are stored on a network drive, so your account will have the same files on all 30 machines.

Note: If you want to change your instructional account password, you can SSH into the update server:

$ ssh cs61c-???@update.cs.berkeley.edu

Sanity Check

When you're in a SSH session, your prompt should look similar to this (the area inside, but not including, the red box):

If it looks very different (e.g. the prompt is white text instead of red and yellow text), try running /home/ff/cs61c/bin/fix-dotfiles.

$ /home/ff/cs61c/bin/fix-dotfiles

If your prompt still looks very different, contact course staff on Ed.

scp - "Secure Copy"

The scp program is used for copying files between computers using the SSH protocol.

Sometimes, you may want to get individual files or entire folders from the Hive machines onto your local system, or vice versa. You can do this by using scp:

$ scp <source> <destination>

To specify a remote source or destination, use username@host:path. To specify a local destination, just use path. As an example:

$ scp cs61c-???@hive3.cs.berkeley.edu:~/some_folder/example.txt ~/Downloads/

Assuming my username is cs61c-???, the above command would connect to hive3 and copy ~/some_folder/example.txt on my instructional account to ~/Downloads/example.txt on my local machine.

If I wanted to copy the other direction (from my local machine to a Hive machine) I would use:

$ scp ~/Downloads/example.txt cs61c-???@hive7.cs.berkeley.edu:~/some_folder/

scp by default only works with files. To copy folders, you need to tell scp to "recursively" copy the folder and all its contents, which you can do with the -r flag:

$ scp -r cs61c-???@hive7.cs.berkeley.edu:~/some_folder ~/Downloads/

Warning: Running scp on the Hive machines (e.g. when you're in a SSH session) is usually not desired behavior. Running scp example.txt cs61c-???@hive14.cs.berkeley.edu:~/example.txt on a Hive machine will copy example.txt to... the same place. You probably want to run it in a local terminal session!

Vim Basics

vim is a text editor included on the Hive machines and many UNIX-based distributions.

Note: We'll be using Vim in most of our examples and documentation, but we have no hard requirement on which text editor you use; you're welcome to pick whatever you're comfortable with, but you should know how to use at least one terminal-based text editor.

To open a file from your current directory, pass the file name to Vim:

$ vim filename

To open a file from another directory, use a relative or absolute path:

$ vim ../other_folder/filename

Some useful Vim commands:

CommandExplanation
<escape>:qCloses (quits) Vim without saving
<escape>:wqCloses Vim after saving
<escape>:wSaves your file
<escape>:q!Force-quit Vim (for when you've made changes but do not wish to save them)
<escape>iInsert mode, allows you to type into the file
<escape>/catsSearches your file for the nearest occurrence of the string "cats". Press n to go to the next occurrence or N to go to the previous
<escape>:set nuShows line numbers within your file

Note: these commands are preceded by <escape> because you'll need to press the escape key on your keyboard to switch you out of your current mode. For example, if I'm inserting (typing) into a file and want to save, I'd have to hit <escape> to get out of insert mode, then type :w to save my file. If you aren't in a mode (i.e. you've just opened your file) you don't need to hit escape first, but it won't hurt :)

For more on Vim, one of our summer 2020 tutors (thanks Yijie!) wrote a great Vim for CS61C guide!

Action Items

SSH into any Hive machine. Then:

  • If there is a prompt asking you to enter some information:
    • Last name (family name)
    • First name (given name) and any middle name(s)
    • Student ID
    • Email address: please use your Berkeley email
    • Code name: just pick something random. Ignore the "posting grades" bit, we use Gradescope for grades and not this system
  • If there was a prompt, run check-register, and verify that your name, email, and student ID are correct. If anything is incorrect, run re-register.
    • The first email address shown must be your primary email on your Gradescope account.
  • If there wasn't a prompt, follow the previous bullet point anyway.
  • If you're getting tired of reading, try taking a short break (Minesweeper, anyone?)

Exercise 4: Setting Up Programs

We're going to be using a couple programs and tools, outlined below:

  • CLI (command line interface)
    • git for distributing and managing code
    • python3 3.6+ for running various scripts
    • gcc 7+ for compiling C programs
    • java 9+ for RISC-V simulation (Venus) and circuit simulation (Logisim)
  • GUI (graphical user interface)
    • A browser
    • A terminal program
    • Java 9+ for visual circuit simulation, and other interactive simulations

CLI: the Hive machines provide a Linux environment with all CLI tools already pre-installed and set up. We strongly recommend that you use the Hive for assignments that use CLI tools to avoid annoying setup issues (especially on Windows). If you must work locally, note that we may not be able to help with local setup issues.

GUI: You will have to run GUI programs locally (screen forwarding over SSH is difficult and buggy). However, there are less complexities and potential issues with the GUI programs than with the CLI programs.

OS-specific Setup

The following sub-sections contain information and tips for specific OSes. Pay attention to the OS name; commands for one OS may break things on another OS!

As noted above, please remember that we strongly recommend that you do most of your work on the Hive machines. The staff may not be able to help you troubleshoot issues if you choose to use another machine.

Debian/Ubuntu Linux

Debian 10+ and Ubuntu 18.04+ have the required programs in the default APT repositories. The following command will install them automatically:

$ sudo apt update
$ sudo apt install build-essential cgdb curl default-jre git python3 python3-pip valgrind

The built-in terminal can be used for CLI programs.

macOS

The built-in Terminal app can be used for CLI programs.

Recommended installation:

  • Open the Terminal app
  • Install the Xcode Command Line Tools:
    $ xcode-select --install
    
  • If you do not have Python 3.6+ installed (python3 --version should say 3.6 or higher):
  • If you do not have Java 9+ installed (java -version should say 1.9 or higher):
    • Install the Homebrew package manager
    • Install OpenJDK (Java) 16:
      $ brew install openjdk
      $ sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
      

Windows

This one is a bit tricky. Developing in C on Windows works better in Windows Subsystem for Linux (WSL), but GUI support in WSL is spotty. WSL by default has its own set of accounts and files, separate from your Windows user data.

Recommended installation:

  • Install Windows Subsystem for Linux (WSL)
    • WSL 1 or 2 works, but we have observed less issues with WSL 2
    • We recommend Ubuntu 18.04, since that is the OS on the Hive machines so the experience will be similar
    • This should install a terminal called Ubuntu Bash or similar. Note that Ubuntu Bash and Git Bash are very different!
  • Inside WSL (open Ubuntu Bash) and run the following:
    $ sudo apt update
    $ sudo apt upgrade
    $ sudo apt dist-upgrade
    
  • Still in WSL (Ubuntu Bash), install the CLI programs:
    $ sudo apt install build-essential cgdb default-jre gdb git python3 python3-pip valgrind
    
  • Now, outside WSL (in regular Windows), download and install the latest version of Python 3 (64-bit)
    • Make sure to select the "Add Python 3.x to PATH" option
  • Still outside WSL, download and install Git Bash
    • Make sure to select the "Use Windows' default console window" option instead of "Use MinTTY"
  • Still outside WSL, download and install Microsoft OpenJDK
    • You can skip this if you have an existing install of Java 9+

Tips:

  • With the recommended installation, Ubuntu Bash is a terminal that runs inside WSL, and Git Bash is a terminal that runs outside WSL. Assignments involving gcc or RISC-V should be done in WSL, and assignments involving Logisim should be done outside WSL.
  • By default, you can access your Windows files from WSL, but not vice versa (e.g. C:\Users\Herobrine\Documents\cs61c on Windows is /mnt/c/Users/Herobrine/Documents/cs61c in WSL). We recommend that you work in a Windows user directory (like Documents from the example) so you can swap between WSL and Windows.
  • On Windows (not WSL), Python 3 may not be installed as python3. Try the following commands -- if you find a command that returns Python 3 (not Python 2), use that instead of python3 for the rest of this lab and in future assignments:
    $ python3 -V
    $ python -V
    $ py -V
    

Other OSes

If you're having trouble, try reaching out on Ed or visit OH, but please note that staff has limited experience with these.

Action Items

  • To test your GUI environment, download Logisim here. Open a terminal in your GUI environment, cd to the download location, and run the JAR:
    $ java -jar logisim-evolution.jar # replace the filename with the one you downloaded
    
    If the Logisim GUI interface pops up, you're all set! We won't be using it further, so you can close Logisim after checking that it works.
  • To test your CLI environment, open a terminal in your CLI environment and run the following:
    $ git --version
    $ python3 --version
    $ gcc --version
    $ java -version
    
    Make sure none of the commands throw errors!

Exercise 5: Fun with Git

In this exercise, you'll get your labs Git repository ("repo"), use Vim, and work with a variety of Git commands. By the end of it, you should feel comfortable using SSH, editing files, pulling/committing/pushing, and resolving merge conflicts. If you'd like to review your Git commands before beginning, you can check out this guide.

Getting Your Lab Repo

Visit Galloc. Log in, connect your GitHub account, and start the lab assignment. A GitHub repo will be created for you; this will be your personal repo for any lab work you do throughout the semester.

Configuring Git

Before we start, let's tell Git who you are. This information will be used to sign and log your commits. You may not need to do this if you've set up Git before, but if you're on the Hive machines it's likely a step you'll need to take.

First, run the following commands on your local machine (make sure to change the name and email to match your information):

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

If you have an instructional account, SSH into a Hive machine, and run the same commands.

Cloning Your Repo

Git has the concept of "local" and "remote" repositories. A local repo is located wherever your terminal session is; if you're in a SSH session, the local repo is a folder on a Hive machine; if your terminal session on your local machine, the local repo is located on your local machine's filesystem. A remote repo (e.g. GitHub repo) is typically hosted on the Internet.

You have a lab repository on GitHub, but not locally (it would be a little worrying if a website could automatically access your local files). To get a local copy of this repository, you can use git clone, which will create a local repository based on information from a remote repo.

If you have an instructional account, SSH into a Hive machine. On the Hive clone the repository into a folder called labs:

$ git clone GITHUB_REPOSITORY_URL labs
Note: Make sure you replace GITHUB_REPOSITORY_URL with the actual URL!

If you don't have an instructional account, that's fine! Clone the repository into a folder called labs_hive. For the rest of this exercise, any reference to your repository on the Hive is referring to this repository.

$ git clone GITHUB_REPOSITORY_URL labs_hive

Exploring Your Repo

cd into this new folder. List all hidden files (ls -a). Do you see a hidden file/folder?

There is indeed a folder called .git. Its presence indicates that the current folder (folder containing .git) holds a Git repository.

Take a look at your repo's current remotes and status:

$ git remote -v
$ git status

git clone has already worked a bit of magic here; there's a remote called origin, and its URL points to your labs repo on GitHub! You're on a local branch called main, which is "tracking" origin/main (the main branch on the origin remote).

Note: GitHub now uses main as the default branch name, not master

Throughout the semester, course staff may make updates to starter code to fix bugs or release new labs. To receive these updates, you'll need to add another remote.

$ git remote add starter https://github.com/61c-teach/su21-lab-starter.git

If you ever want to pull updated starter code, you'd execute the following command:

$ git pull starter main

Try it out now! Since you just started lab, there might not be any updates to pull yet.

Finding Commands

Warning: please read carefully. Skipping a step may cause errors that will require you to redo the exercise.

The files for this exercise are located in the lab00 folder in your lab repository.

The main goal of this exercise is to get you familiar with manpages, Git, and other programs, but not to stress you out over finding commands. If you're stuck trying to find a command, write your best-effort guess, and the autograder will give hints if the command isn't what we're expecting.

  1. Open first_set.txt. This file contains descriptions of UNIX commands. Use the man pages to figure out which command they refer to (if you're stuck, you can try searching the internet). Make sure to include any necessary flags. Once you've found them, write the commands, one per line, in the provided answers.txt file.

    answers.txt should look similar to (including the numbers):

    1. first_set_command_1
    2. first_set_command_2
    3. first_set_command_3

    Save, add, and commit your changes with the commit message "Answered first set". Push this commit to your GitHub repo.

  2. Now, let's practice using scp by copying the repository to your local computer.

    • If you have an instructional account, exit the SSH session by running exit. You should be back to your local terminal prompt. Use scp to copy the entire labs folder from the Hive to your local machine (refer to Exercise 3 for a refresher on scp). Hint: what does the -r flag do?
    • If you don't have an instructional account, copy the entire labs_hive folder to a separate labs folder.

    Once you've copied the entire folder, cd into this folder and open your answers file.

  3. Above your previous answers, add commands (and relevant flags, if needed) that fit this second set of descriptions:

    • Move files from one directory to another
    • Change a file's permissions
    • Show the absolute path of the directory you're currently in

    answers.txt should look similar to (including the numbers):

    1. second_set_command_1
    2. second_set_command_2
    3. second_set_command_3
    4. first_set_command_1
    5. first_set_command_2
    6. first_set_command_3

    Save your changes, but do not commit or push them.

  4. Go back to your repo on the Hive. Above your previous answers, add the command (and relevant flags, if needed) that fits this description:

    • Show file permissions for normal and hidden files in a directory

    answers.txt should look similar to (including the prefix numbers):

    1. third_set_command_1
    2. first_set_command_1
    3. first_set_command_2
    4. first_set_command_3

    Save, add, commit, and push these changes with the commit message "Answered third set".

  5. Go back to your repo on your local machine. Add, commit, and push your changes with the commit message "Answered second set".

    You should get an error message from Git. What does this message mean? How do you resolve it? When resolving this issue, avoid using the rebase command or flags.

    After resolving the issue, you should have all your answers in answers.txt on your local machine. answers.txt should match the following (including the prefix numbers):

    1. third_set_command_1 (show file permissions for normal and hidden files in a directory)
    2. second_set_command_1 (move files from one directory to another)
    3. second_set_command_2 (change a file's permissions)
    4. second_set_command_3 (show the absolute path of the directory you're currently in)
    5. first_set_command_1 (looks through the names of files and folders (recursively) for a keyword)
    6. first_set_command_2 (displays real-time information about processes running on the system)
    7. first_set_command_3 (find the difference between two files (4-letter command))

    Commit and push your changes.

  6. Still on your local machine, cd into the lab00 folder if you're not there already. If your system uses non-default commands (e.g. python instead of python3), open gen-debug.sh and edit the commands as appropriate. Then, run the following command:

    $ bash gen-debug.sh
    

    This creates a file called debug.txt that records a bit of debugging information for the autograder. Add, commit, and push this file.

Info: Lab Submission

To submit your work, push your work to your lab repository on GitHub.

Every lab will have autograded exercise(s). To submit to the autograder, you'll need to push your work to your lab repository on GitHub. Then go to the corresponding assignment on Gradescope (Lab00: Intro and Setup for this lab), select your lab repository, and submit. After a short wait, the page should show your autograder score for the lab.

Remember, to get credit for a lab, make sure you have finished all the exercises and passed all the autograder tests by 11:59:59 PM PT!

Checklist

You made it! That was quite a bit of reading and head-scratching, but you're now somewhat more familiar with the tools you'll be using for the rest of the semester. Worth it!

Please check that you (and your partner, if you have one) have:

  • Completed the course policies quiz from Exercise 1.
  • Registered for the services from Exercise 2.
  • Registered and checked your information on the Hive in Exercise 3.
  • Installed the tools from Exercise 4.
  • Completed Exercise 5 (matching the description near the end).
  • Passed the Lab Autograder for this lab

Appendix

These are some tools you may find helpful, but are by no means required for this course :)

Text Editor vs. IDE

CS61C doesn't endorse any particular text editor or IDE. Many people get by in this course using a text editor with no frills (think: Vim/Emacs/Nano). We'll expect you to know how to use at least one CLI-based text editor, since you'll be dealing with the command line a lot.

For your own work, you may find it nice to have CLion from JetBrains if you're used to working in IntelliJ from CS61B. Note though that we won't be providing any course-official support, so setting it up and maintaining it are up to you.

The majority of students do their work in a local editor (Sublime, Atom, VSCode) and use Git to copy their files from their local machine to the Hive. Some students also set up Cyberduck, Filezilla, VSCode Remote SSH, or other SFTP programs to make editing remote files easier. Again, we can't provide course-official support for every program under the sun, but you're welcome to do what works best for you.

Tired of typing up an entire SSH command and password? 15 minutes could save you 15% of the time you spend on the comamnd line! Follow the instructions here to set up SSH keys for GitHub and Hive machines.