Very often, a file is required to be in two different
directories at the same time. Think for example of a
configuration file that is required by two different software
packages that are looking for the file in different directories.
The file could simply be copied, but to have to replicate changes in more
than one place would create an administrative nightmare.
Also consider a document that must be present in
many directories, but which would be easier to update at one point.
The way two (or more) files can have the same data is with links.
touch myfile ln -s myfile myfile2 ls -al cat > myfile a few lines of text ^D cat myfile cat myfile2
Notice that the
ls -al listing has the letter
l on the far left next to
myfile2, and the
usual
- next to
myfile. This indicates that
the file is a soft link (also known as a symbolic
link or symlink) to some other file.
A symbolic link contains no data of its own, only a
reference to another file. It can even contain a reference to
a directory. In either case, programs operating on the link
will actually see the file or directory it points to.
Try
5
mkdir mydir ln -s mydir mydir2 ls -al . touch ./mydir/file1 touch ./mydir2/file2 ls -al ./mydir ls -al ./mydir2
The directory
mydir2 is a symbolic link to
mydir2
and appears as though it is a replica of the original. Once
again the directory
mydir2 does not consume additional
disk space--a program that reads from the link is unaware
that it is seeing into a different directory.
Symbolic links can also be copied and retain their value:
cp mydir2 / ls -al / cd /mydir2
You have now copied the link to the root directory. However, the
link points to a relative path
mydir in the same
directory as the link. Since there is no
mydir here, an
error is raised.
Try
rm -f mydir2 /mydir2 ln -s `pwd`/mydir mydir2 ls -al
Now you will see
mydir2 has an absolute path. You can try
cp mydir2 / ls -al / cd /mydir2
and notice that it now works.
One of the common uses of symbolic links is to make
mounted (see Section 19.4) file systems
accessible from a different directory. For instance, you may
have a large directory that has to be split over several
physical disks. For clarity, you can mount the disks as
/disk1,
/disk2, etc., and then link the various
subdirectories in a way that makes efficient use of the space
you have.
Another example is the linking of
/dev/cdrom to, say,
/dev/hdc so that programs accessing the device
file
/dev/cdrom (see Chapter 18)
actually access the correct IDE drive.
UNIX allows the data of a file to have more than one name in
separate places in the same file system. Such a file with more
than one name for the same data is called a hard-linked
file and is similar to a symbolic link. Try
touch mydata ln mydata mydataB ls -al
The files
mydata and
mydataB are
indistinguishable. They share the same data, and have a
2 in second column of the
ls -al listing. This
means that they are hard-linked twice (that there are
two names for this file).
The reason why hard links are sometimes used in preference to
symbolic links is that some programs are not fooled by a
symbolic link: If you have, say, a script that uses
cp
to copy a file, it will copy the symbolic link instead of the
file it points to. [
cp actually has an option to override
this behavior.] A hard link, however, will always be seen as a
real file.
On the other hand, hard links cannot be made between files on different
file systems nor can they be made between directories.