Pathnames locate a file (or directory, or any other object) in the UNIX
filesystem.
As you read this article, refer to
Figure 1.4
.
It's a diagram of a (very) small part of a UNIX filesystem.
Whenever you are using UNIX, you have a current directory
. By
default, UNIX looks for any files or directories that you mention
within the current directory. That is, if you don't give an absolute
pathname (starting from the root, /
), UNIX tries to look up files
relative
to the current directory. When you first log in, your
current directory is your
home directory (1.20
)
,
which the system
administrator will assign to you. It typically has a name like
/usr/mike
or /home/mike
. You can change your current
directory by giving the cd
command, followed by the name of a
new directory (for example, cd /usr/bin
). You can find out your
current directory by giving the pwd
("print working directory") command.
If your current directory is /home/mike
, and
you give the command cat textfile
, you are asking UNIX to locate the
file textfile
within the directory /home/mike
. This is
equivalent to the absolute path /home/mike/textfile
. If you give the
command cat notes/textfile
, you are asking UNIX to locate the file
textfile
within the directory notes
, within
the current directory /home/mike
.
A number of abbreviations help you to form relative pathnames more
conveniently. You can use the abbreviation .
(dot) to refer to
the current working directory. You can use ..
(dot dot) to
refer to the parent of the current working directory. For example, if
your current directory is /home/mike
, ./textfile
is the
same as textfile
, which is the same as /home/mike/textfile
.
The relative path ../gina/textfile
is the same as
/home/gina/textfile
; ..
moves up one level from
/home/mike
(to /home
), and then searches for the directory
gina
and the file textfile
.
In the C shell, ksh
and bash
, you can use the
abbreviation ~
(tilde) to refer
to your home directory.
~
name
refers to the home directory of the user name
.
See article
14.11
.
Here's a summary of the rules that UNIX uses to interpret paths:
- If the pathname begins with
/
It is an absolute path, starting from the root.
- If the pathname begins with
~
or with
~
name
The C shell, ksh
and bash
turn it into an absolute pathname
starting at your home directory (~
), or at the home directory of the
user name
(~
name
).
- If the pathname does not begin with a
/
The pathname is relative to the current directory.
Two relative special cases use entries that are in every UNIX directory:
If the pathname begins with ./
- the path is relative to the current directory; for example,
./textfile
.
If the pathname begins with ../
- the path is relative to the parent of the current directory. For
example, if your current directory is /home/mike/work
,
then ../src
means /home/mike/src
.
Article 18.2
explains where .
and ..
come from.
NOTE:
The .
and ..
may appear at any point within a path. They
mean "the current directory at this point in the path" and "the
parent of the current directory at this point in the path."
You commonly see paths starting with ../../
(or more) to refer
to the grandparent or great-grandparent of the current directory.
However, they
can appear at other places in a pathname as well.
For example, /usr/ucb/./bin
is the same as /usr/ucb/bin
; and
/usr/ucb/bin/../lib
is the same as /usr/ucb/lib
.
Placing .
or ..
in the middle of a path may be helpful in
building paths within shell scripts, but I have never seen them used
in any other useful way.