1.16. Making Pathnames
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.
Figure 1-4. Part of a Unix filesystem tree
Whenever you are using Unix, you have a current
directory. By default, Unix looks for any mentioned files
or directories within the current directory. That is, if you
don't give an absolute
pathname (Section 1.14) (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 (Section 1.15),
which the system administrator will assign to you. It typically has a
name like /u/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.
You can use
either the abbreviation ~ (tilde) or the
environment variables $HOME or
$LOGDIR, to refer to your home directory. In most
shells, ~name refers to
the home directory of the user name. See Section 31.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
-
Most shells 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,
e.g., ./textfile, though this can also execute
the file if it is given executable file permissions.
-
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.
Section 10.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.
--ML and JP
 |  |  | 1.15. Your Home Directory |  | 1.17. File Access Permissions |
Copyright © 2003 O'Reilly & Associates. All rights reserved.
|
|