Библиотека сайта rus-linux.net
The Linux System Administrator's Guide: Version 0.7 | ||
---|---|---|
Prev | Chapter 4. Overview of the Directory Tree | Next |
4.1. Background
This chapter is loosely based on the Filesystems Hierarchy Standard (FHS) [1] version 2.1, which attempts to set a standard for how the directory tree in a Linux [2] system is organised. 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 should be in standardised places. There is no authority behind the standard that forces anyone to comply with it, but it has gained the support of many Linux distributions. It is not a good idea to break with the FHS without very compelling reasons. The FHS 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 FHS. A system administrator should also read the full FHS 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 in the Linux manual pages.
The full directory tree is intended to be breakable into
smaller parts, each capable of being on its own disk or partition,
to accommodate to disk size limits and to ease backup and other
system administration tasks. The major parts are the root
(/
), /usr
,
/var
, and /home
filesystems (see Figure 4-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.
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, increasingly multiple gigabytes in/usr
). It can make administration easier (only the master/usr
needs to be changed when updating an application, not each machine separately) to have /usr network mounted. 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 as they seldom change. A big/home
might have to be broken across several filesystems, which requires adding an extra naming level below/home
, for example/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/log/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 sharable and changing and non-sharable 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).
Notes
[1] | |
[2] | Or any Unix like system. For example the BSD derivatives. |