Navigating Files and Directories
Last updated on 2024-09-02 | Edit this page
Overview
Questions
- How can I perform operations on files outside of my working directory?
- What are some navigational shortcuts I can use to make my work more efficient?
Objectives
- Use a single command to navigate multiple steps in your directory structure, including moving backwards (one level up).
- Perform operations on files in directories outside your working directory.
- Work with hidden directories and hidden files.
- Interconvert between absolute and relative paths.
- Employ navigational shortcuts to move around your file system.
Moving around the file system
We’ve learned how to use pwd
to find our current
location within our file system. We’ve also learned how to use
cd
to change locations and ls
to list the
contents of a directory. Now we’re going to learn some additional
commands for moving around within our file system.
Use the commands we’ve learned so far to navigate to the
cb_unix_shell/Dahl
directory, if you’re not already
there.
What if we want to move back up and out of this directory and to our
top level directory? Can we type cd cb_unix_shell
? Try it
and see what happens.
OUTPUT
-bash: cd: cb_unix_shell: No such file or directory
Your computer looked for a directory or file called
cb_unix_shell
within the directory you were already in. It
didn’t know you wanted to look at a directory level above the one you
were located in.
We have a special command to tell the computer to move us back or up one directory level.
Now we can use pwd
to make sure that we are in the
directory we intended to navigate to, and ls
to check that
the contents of the directory are correct.
OUTPUT
/home/unix/jlchang/cb_unix_shell
Note: your output will show your username where you see
jlchang
above.
OUTPUT
Dahl Seuss authors.txt data prodinfo454
From this output, we can see that ..
did indeed take us
back one level in our file system.
You can chain these together like so:
prints the contents of /home/unix
.
First use the man
command to look at the options for
ls
.
The -a
option is short for all
and says
that it causes ls
to “not ignore entries starting with .”
This is the option we want.
OUTPUT
. .. .hidden Dahl Seuss authors.txt data prodinfo454
The name of the hidden directory is .hidden
. We can
navigate to that directory using cd
.
And then list the contents of the directory using
ls
.
OUTPUT
youfoundit.txt
The name of the text file is youfoundit.txt
.
In most commands the flags can be combined together in no particular order to obtain the desired results/output.
ls -Fa
ls -laF
Examining the contents of other directories
By default, the ls
commands lists the contents of the
working directory (i.e. the directory you are in). You can always find
the directory you are in using the pwd
command. However,
you can also give ls
the names of other directories to
view. Navigate to your home directory if you are not already there.
Then enter the command:
OUTPUT
Dahl Seuss authors.txt data prodinfo454
This will list the contents of the cb_unix_shell
directory without you needing to navigate there.
The cd
command works in a similar way.
Try entering:
This will take you to the Seuss
directory without having
to go through the intermediate directory.
Full vs. Relative Paths
The cd
command takes an argument which is a directory
name. Directories can be specified using either a relative path
or a full absolute path. The directories on the computer are
arranged into a hierarchy. The full path tells you where a directory is
in that hierarchy. Navigate to the home directory, then enter the
pwd
command.
You will see:
OUTPUT
/home/unix/jlchang
Note: your output will show your username where you see
jlchang
above.
This is the full name of your home directory. This tells you that you
are in a directory named with your username, which sits inside a
directory called unix
which is found in a directory called
home
which sits inside the very top directory in the
hierarchy. The very top of the hierarchy is a directory called
/
which is usually referred to as the root
directory. So, to summarize: your home directory is a directory in
unix
which is a directory in home
which is a
directory in /
. More on root
and
home
in the next section.
Now enter the following command:
This jumps forward multiple levels to the
Green_Eggs_and_Ham
directory. Now go back to the home
directory.
I can also navigate to the Green_Eggs_and_Ham
directory
using:
You’ll need to substitute <username>
with your
Broad username (without angle brackets).
These two commands have the same effect, they both take us to the
Green_Eggs_and_Ham
directory. The first uses a relative
path, giving only the address from the working directory (in this case,
your home directory). The second uses the absolute path, giving the full
address from the root directory. A full path always starts with a
/
. A relative path does not.
A relative path is like getting directions from someone on the street. They tell you to “go right at the stop sign, and then turn left on Main Street”. That works great if you’re standing there together, but not so well if you’re trying to tell someone how to get there from another country. A full path is like GPS coordinates. It tells you exactly where something is no matter where you are right now.
You can usually use either a full path or a relative path depending on what is most convenient or involves less typing.
Over time, it will become easier for you to keep a mental note of the structure of the directories that you are using and how to quickly navigate amongst them.
Relative path resolution
Using the filesystem diagram below, if pwd
displays
/Users/thing
, what will ls ../backup
display?
../backup: No such file or directory
2012-12-01 2013-01-08 2013-01-27
2012-12-01/ 2013-01-08/ 2013-01-27/
original pnas_final pnas_sub
- No: there is a directory
backup
in/Users
. - No: this is the content of
Users/thing/backup
, but with..
we asked for one level further up. - No: see previous explanation. Also, we did not specify
-F
to display/
at the end of the directory names. - Yes:
../backup
refers to/Users/backup
.
Navigational Shortcuts
The root directory is the highest level directory in your file system
and contains files that are important for your computer to perform its
daily work. While you will be using the root (/
) at the
beginning of your absolute paths, it is important that you avoid working
with data in these higher-level directories, as your commands can
permanently alter files that the operating system needs to function. In
many cases, trying to run commands in root
directories will
require special permissions which are not discussed here, so it’s best
to avoid them and work within your home directory. Dealing with the
home
directory is very common. The tilde character,
~
, is a shortcut for your home directory. In our case, the
root
directory is three levels above our
home
directory, so cd
or cd ~
will take you to /home/unix/<username>
and
cd /
will take you to /
. Navigate to the
cb_unix_shell
directory:
Then enter the command:
OUTPUT
cb_unix_shell cb_unix_shell.tgz
This prints the contents of your home directory, without you needing to type the full path.
The commands cd
, and cd ~
are very useful
for quickly navigating back to your home directory. We will be using the
~
character in later lessons to specify our home
directory.
Key Points
- The
/
,~
, and..
characters represent important navigational shortcuts. - Hidden files and directories start with
.
and can be viewed usingls -a
. - Relative paths specify a location starting from the current location, while absolute paths specify a location from the root of the file system.