Next: The root filesystem
Up: Overview of the Directory
Previous: Overview of the Directory
This chapter is loosely based on the Linux filesystem
standard, FSSTND, version 1.2 (see the bibliography,
[Qui95]), which attempts
to set a standard for how the directory tree in a Linux system
is organized. Such a standard has the advantage that
it will be easier to
write or port software for Linux, and to administer Linux
machines, since everything will be in their usual places. There
is no authority behind the standard that forces anyone to comply
with it, but it has got the support of most, if not all, Linux
distributions. It is not a good idea to break with the FSSTND
without very compelling reasons. The FSSTND attempts to follow
Unix tradition and current trends, making Linux systems familiar
to those with experience with other Unix systems, and vice
versa.
This chapter is not as detailed as the FSSTND. A system
administrator should also read the FSSTND for a complete
understanding.
This chapter does not explain all files in detail. The intention
is not to describe every file, but to give an overview of the
system from a filesystem point of view. Further information on
each file is available elsewhere in this manual or the manual
pages.
The full directory tree is intended to be breakable into smaller
parts, each on its own disk or partition, to accomodate to disk
size limits and to ease backup and other system administration.
The major parts are the root, /usr , /var , and
/home filesystems (see figure 2.1).
Each part has a different purpose.
The directory tree has been designed so that it works well in a
network of Linux machines which may share some parts of the
filesystems over a read-only device (e.g., a CD-ROM), or
over the network with NFS.
Figure 2.1: Parts of a Unix directory tree.
Dashed lines indicate partition limits.
The roles of the different parts of the directory tree are
described below.
-
The root filesystem is specific for each machine (it is generally
stored on a local disk, although it could be a ramdisk or network
drive as well) and contains the
files that are necessary for booting the system up, and to bring
it up to such a state that the other filesystems may be mounted.
The contents of the root filesystem will therefore be sufficient
for the single user state. It will also contain tools for
fixing a broken system, and for recovering lost files from backups.
-
The /usr filesystem contains all commands, libraries, manual
pages, and other unchanging files needed during normal operation.
No files in /usr should be specific for any given machine,
nor should they be modified during normal use. This allows the
files to be shared over the network, which can be cost-effective
since it saves disk space (there can easily be hundreds of
megabytes in /usr ), and can make administration easier
(only the master /usr needs to be changed when updating
an application, not each machine separately). Even if the
filesystem is on a local disk, it could be mounted read-only,
to lessen the chance of filesystem corruption during a crash.
-
The /var filesystem contains files that change, such as
spool directories (for mail, news, printers, etc), log files,
formatted manual pages, and temporary files. Traditionally
everything in /var has been somewhere below /usr ,
but that made it impossible to mount /usr read-only.
-
The /home filesystem contains the users' home directories,
i.e., all the real data on the system. Separating home directories
to their own directory tree or filesystem makes backups easier;
the other parts often do not have to be backed up, or at least not
as often (they seldom change). A big /home might have to
be broken on several filesystems, which requires adding an extra
naming level below /home , e.g., /home/students and
/home/staff .
Although the different parts have been called filesystems above,
there is no requirement that they actually be on separate filesystems.
They could easily be kept in a single one if the system is
a small single-user system and the user wants to keep things simple.
The directory tree might also be divided into filesystems differently,
depending on how large the disks are, and how space is allocated
for various purposes.
The important part, though, is that all the standard names
work; even if, say, /var and /usr are actually on the
same partition, the names /usr/lib/libc.a and
/var/adm/messages must work, for example by moving files
below /var into /usr/var , and making /var a symlink
to /usr/var .
The Unix filesystem structure groups files according to purpose,
i.e., all commands are in one place, all data files in another,
documentation in a third, and so on. An alternative would be to
group files files according to the program they belong to, i.e.,
all Emacs files would be in one directory, all TeX in another,
and so on. The problem with the latter approach is that it
makes it difficult to share files (the program directory often
contains both static and shareable and changing and
non-shareable files), and sometimes to even find the files
(e.g., manual pages in a huge number of places, and making the
manual page programs find all of them is a maintenance
nightmare).
Next: The root filesystem
Up: Overview of the Directory
Previous: Overview of the Directory
Lars Wirzenius
Sun May 4 14:08:43 EEST 1997