Beginner Lab 1 - Unix, the Shell, OSS
Facilitator: Samuel Berkun
5 min readTable of contents
Introduction
Welcome to the first lab!
All labs are graded on completeness and effort, so don’t worry too much about getting an exact right answer. (We’ll release staff solutions after the lab is due!)
Labs are also usually due a week from when they are assigned. Remember to ask for help if you need it on Piazza or Discord/Slack!
It may be convenient to submit your answers to Gradescope as you go.
Pro Tips:
- Here are some commands you might find helpful:
cat, cd, emacs, file, grep, less, ls, man, nano, tar, wget, vim
- Google and
man
are your friends!
Shell spelunking
Everything should be done via the shell!
The purpose of this lab is to get you comfortable with using the shell for things you might typically use a GUI for. While these tasks may seem simplistic or limited, you’ll quickly find that the commands have many different options (flags) to perform tasks that are either impossible or incredibly tedious / difficult to complete using traditional methods.
Don’t worry about fully understanding how the commands work just yet- as long as you can gain a sense of familiarity with the tools at hand, we’ll be in good shape to explore them further next week!
-
ssh
intotsunami.ocf.berkeley.edu
using your OCF account, or login at ssh.ocf.berkeley.edu -
Run the following command to download the file we have provided:
wget https://github.com/0xcf/decal-labs/raw/master/b1/b01.tgz
A
.tgz
file is actually a composition of two file formats. Sometimes you’ll see these files as.tar.gz
instead. A common (and old) way of archiving is with magnetic tapes. However, in order to archive the data, it needs to be a single file, and often you want to archive multiple files at once. This is where thetar
command comes in (tar
stands for tape archive). Tar will group (or ungroup) multiple files into a single one.tar
, unless you ask it to, doesn’t compress files itself though. This is where eithergzip
(orbzip2
) comes in.gzip
will compress your file, and so, tar + gzip is often used in conjunction. It looks something like this:file --(tar)--> file.tar --(gzip)--> file.tar.gz
.If you read the
tar
documentation carefully enough, you’ll see that you can give the command an option to compress your files usinggzip
as well, saving you a total of one line of shell command!To unarchive the file we provide you, run the following command:
tar xvzf b01.tgz
. This will provide ab01
directory for you with some files for the rest of this lab.tar
has a reputation for being a bit tricky with its options: -
Go into the
b01
directory. Make sure you’re in there by runningpwd
(Present working directory). What doespwd
give you (conceptually)? -
There’s a hidden file in the
b01
directory. What is the secret? -
A malicious user made its way into my computer and created a message split across all the files in
nonsense/
. What does it say? How did you find the message? (Hint:ls
and/orxargs
will be helpful here. If you want a challenge, try to do this in a single short command- but it’s ok to find it by any means available.) -
Go ahead and delete everything in
nonsense/
with one command. How did you do it? -
There’s a file in
b01
calledbig_data.txt
. It’s 80 megabytes worth of random text. For reference, Leo Tolstoy’s “War and Peace”, the novel with a whopping 57,287 words depicting the French invasion of Russia and the impact of the Napoleonic era on Tsarist society through the stories of five Russian aristocratic families with several chapters solely dedicated to philosophical prose, is only 3.2 megabytes large.For that reason, I don’t recommend using
cat
to print the file. You can try it, but you’ll be sitting there for a while. There’s some text you need to find in there! Go find it without actually opening up the file itself!Two lines above the only URL in the file is a secret solution. What is that solution?
Hints: What makes up a URL (https…)? What is Context Line Control?
-
Try executing
./a_script
. You should get something back that sayspermission denied: ./a_script
. This is because files have three different permissions: read, write, and execute. Which one doesa_script
need? Change the file permissions so that you can run the script. How did you do it? -
Finally, there’s an empty file called
hello_world
in the directory. Write your name in it! How did you do it?
General Questions
Feel free to use Google and work in a terminal (where applicable) to verify your conjectures.
-
What differentiates Linux/OSX from operating systems like Windows?
-
What are some differences between the command line and normal (graphical) usage of an OS?
-
What is the root directory in Linux filesystems? Answer conceptually, as in depth as you would like,
-
ls
has a lot of cool arguments. Try using them to get extra information such as file permissions, owner name, owner group, file size, and late date edited. In addition, I want to be able to see the size and have the files ordered by last date edited, with the oldest files on top. How would I do this? -
Instead of showing the first 10 lines of the file
big_data.txt
, I want to use thehead
command to show the first 4. How would I do that? -
What’s the difference between
cat foo > out.txt
andcat foo >> out.txt
?
Culture Questions
Next are some cultural questions about Linux and Open Source Software.
-
Briefly, what is the difference between permissive and copyleft licenses?
-
Give an example of a permissive license.
-
Give an example of (a) open-source software and (b) free, but closed-source software that you use.