- Demonstrate How to Navigate with
bash
- Identify our "home directory"
- Identify my logged-in username with
whoami
- Identify the "current working directory" with
pwd
("print working directory") - Navigate up one directory in the file system
- Change directories using
cd
Using the CLI (command line interface) might seem like a big challenge to first- time users who are afraid of making mistakes that could break their computers or ruin their files. Fear not! We'll step you through it.
The command-line interfaces, or "shells", used on OSX, Linux, and the "Windows
Subsystem for Linux (WSL)," are called bash
. We'll document how to use the
bash
CLI in this module.
To review: bash
is a text-based interpreter that provides a command-line
interface for controlling your computer (or operating system).
ASIDE: Bash is actually an acronym which stands for Bourne-Again SHell. As the word "again" suggests, there are other shells, some of which came before
bash
. There are also shells that have come along sincebash
. Nevertheless most programmers usebash
or something very similar.
A great place to start learning about the CLI is by using it to do a task you're already familiar with: looking to see what's inside folders like your directories and desktop. Programmers call this activity: navigating. In the CLI we imagine that we're "traveling" to different places. We'll use metaphors like "go into the folder" or "go up one folder" or "visit the location at such-and-such path."
As you learn to navigate with the shell and get to used to it, you'll see that it's friendlier than it might seem at first. In no time, you'll be looking like this typing-machine from "Ghost in the Shell:"
Whenever you open a terminal session (new window, new terminal tab, launching the program for the first time after a reboot), you will be placed in (remember our "travel" metaphor!) your home directory. Directory names on Unix systems are written like:
/parentdirectory/subdirectory/another/subdirectory/
We call a bit of text meant to communicate location on a file system a path.
Paths use /
to show levels of "nesting."
For example, a user's home directory is often written like: /Users/username
or
/home/username
. The /
on the far left of the path name means the very top of
the file system "tree." The /
directory is also called the "root" directory.
It contains all the "top-level directories" that can contain sub-directories
(...which can contain sub-directories, which can contain sub-directories, on and
on).
NOTE: When navigating through a directory, it often helps if we picture the file structure like a tree. With this visualization, we can refer to "moving up" or "moving down" between directory levels, and keep better track of not only where our files are but where we are among our files. Here's an example:
Let's take a second to look at some typical home directories:
/Users/username
This means the "root" contains a directory called Users
and Users
contains
username
. Paths like this are typical for Mac OSX.
/home/username
This means the "root" contains a directory called home
and home
contains
username
. Paths like this are typical for Linux.
Obviously, our names (well, most of our names) are not username
. Instead we
log into our systems as Byron Poodle
or Nancy the Cat
. How can we find out
what our logged-in-user name is?
Let's ask the shell to tell us who it thinks we are. We'll use whoami
to do
just this in the next section.
Let's start simply. Let's ask the computer who I am logged in as:
$ whoami
The whoami
command lets you see which user account you're logged in to from
the CLI. This might seem obvious, especially if you're logged in on your
personal computer. But Unix machines have multiple accounts by default (though
you may not have seen them yet).
My system says I am kellyegreene
. Based on what we learned about home
directories, what do you think my home directory path is? In the next section,
we'll ask the shell to tell us what our home directory's path is.
$ pwd
Note: Any time you see the $
character, you shouldn't type it in. This
is just a standard way to represent a bash prompt. Yours may or may not be a
$
.
You should see some output describing the directory you are currently in. It's
probably something like /Users/byron_the_poodle
.
The pwd
command stands for "print working directory". As you
"navigate" your file system, you might get lost. Just like wandering in a big
city, you can look for street signs to find out where you are. The pwd
command
acts like those street signs. You'll never be lost again!
We've just used pwd
to demonstrate that when we open a bash
session the
operating system automatically "puts" us in our home directory. Let's now do
some real "navigation." In the next section we'll learn to move "up" one
containing directory.
Try typing this in the command line:
$ cd ..
$ pwd
You "moved up" one level of nesting, so you should now see that you are one
level up from where you were and one level closer to the "root" directory.
In your terminal see this by using pwd
:
/Users
The cd
command stands for "change directory".
The ..
is a shortcut for the directory above the working directory. The
bash
shell provides a series of "shortcuts" for some commonly-used file system
paths. ..
means "this directory's containing folder. These shortcuts look
strange but they're designed to be short and therefore easy to type and
therefore fast and, as we've hinted, the CLI is all about speed.
So in this command example we said: change directory to the parent folder
. You
can do this all the way back up to the /
directory.
Let's use cd
to get back to our home directory.
The bash
shell provides default shortcut for your home directory: ~
. Use cd ..
to go "up" a few directories (why not all the way to the root?).
Then, when you run this command:
$ cd ~
$ pwd
You'll see you're back in your home directory. Use pwd
to verify!
SHORTCUT By the way, if you enter
cd
with no argument, you'll be taken to your home directory.
Another shortcut, that might seem not too useful at first, is .
meaning "the
current directory I'm in.
If you try this command:
$ cd .
$ pwd
You should see you are still in the same directory where you wrote the command.
Instead of using shortcuts like ..
, .
, or ~
, you can give a
path to cd
and it will "take" you there.
Try cd /Applications
or even cd /
. You can run a pwd
in these directories
and see that you've "navigated into" them. Try cd alksdjfalksdjfalskdjf
. What
error does bash
give you? Is that what you expected? We'll discuss more
about the types of paths you can give bash
in the next section.
The path supplied to the cd
command can be either absolute or relative
paths. An absolute path is a path that always gets you to the same folder. You
can recognize them because they start with /
. For example
/Users/kellyegreene
, is an absolute path.
A relative path is a path relative to the working directory you're "in" at
the time you write the command. They start
with the name of a directory or a file. For example kellyegreene/Documents
, is
a relative path.
If I were in my home directory /Users/kellyegreene
and said cd mixtapes/the-masked-rapper-vol-1
, it would work! If I were in
/Users/annoyingbrother
and said cd mixtapes/the-masked-rapper-vol-1
, bash
would return an error because that sub-directory doesn't exist there (because
I, Kellye Greene, am the Masked Rapper, while my brother can't rhyme).
Absolute paths and relative paths might sound confusing in CLI universe, but we intuitively understand this difference in our day-to-day lives. We usually call this difference context.
If someone asks if you want to go get a slice of pizza for lunch they're probably thinking of somewhere close to where you're currently located – somewhere close relatively speaking. They're expecting you to say something like:
"Oh yeah, let's go West on 18th street, cross 6th Avenue and go to the place on the corner."
What would surprise the heck out of them would be if you gave them absolute coordinates; and it would be even more surprising if that location were far away. How might they react if you said:
"Oh yeah, let's go to 41.890221 and -87.633904!"
Latitude and longitude give absolute directions based on the Equator and Prime Meridian. They're not commonly used by humans to make decisions on where to get lunch (even if they point, in fact, to one of our favorite pizzerias in Chicago).
So far we've been finding out where we are in the file system "tree," how about we find out what's in these directories (besides other directories)? We'll cover that in our next lesson.
As you type in commands in the shell, you can use "tab completion." Tab
completion allows the shell to be smart and to try and guess what command you
want to run when you hit the tab. If there's only one logical way to complete
your command, bash
will fill in the rest for you, or will show you the
possibilities and you can add more letters until you can tab-complete your
command.
For example let's say we have the following directory structure with two sub- directories:
flatiron_school/
flatiron_building/
If I type $ cd f
and then hit tab, it will fill in everything up until the
conflict so I'll see $ cd flatiron_
. If I then add the s
and hit tab it
will fill in $ cd flatiron_school
and I can hit enter.
As we keep exploring and working with the command line, we will start to unlock and understand its full potential! Adopting the terminal can allow us to become more productive users.