|Linux Filesystem Hierarchy:
||Chapter 1. Linux
/usr usually contains by far the largest share of data on a
system. Hence, this is one of the most important directories in the
system as it contains all the user binaries, their documentation,
libraries, header files, etc.... X and its supporting libraries can
be found here. User programs like telnet, ftp, etc.... are also
placed here. In the original Unix implementations, /usr was where
the home directories of the users were placed (that is to say,
/usr/someone was then the directory now known as /home/someone). In
current Unices, /usr is where user-land programs and data (as
opposed to 'system land' programs and data) are. The name hasn't
changed, but it's meaning has narrowed and lengthened from
"everything user related" to "user usable programs and data". As
such, some people may now refer to this directory as meaning 'User
System Resources' and not 'user' as was originally intended.
/usr is shareable, read-only data. That means that /usr should
be shareable between various FHS-compliant hosts and must not be written to.
Any information that is host-specific or varies with time is stored elsewhere.
Large software packages must not use a direct subdirectory under the /usr
Another large subdirectory structure begins here, containing
libraries, executables, docs, fonts and much more concerning the X
Window System. Its inclusion here is somewhat inconsistent and so
is the difference between '/usr' and '/usr/X11R6' directories. One
would assume that programs that run on X only have their files in
the '/usr/X11R6' hierarchy, while the others use '/usr'.
Regrettably, it isn't so. KDE and GNOME put their files in the
'/usr' hierarchy, whereas the window manager Window Maker uses
'/usr/X11R6'. Documentation files for X11R6 are not in
'/usr/X11R6/doc', but primarily in '/usr/X11R6/lib/X11/doc'. This
mess is due to the fact that in contrast to other operating
systems, the graphical desktop isn't an integral part of the
system. Linux is still primarily used on servers, where graphical
systems don't make sense.
This hierarchy is reserved for the X Window System, version 11
release 6, and related files. To simplify matters and make XFree86
more compatible with the X Window System on other systems, the
following symbolic links must be present if /usr/X11R6 exists:
/usr/bin/X11 -> /usr/X11R6/bin
/usr/lib/X11 -> /usr/X11R6/lib/X11
/usr/include/X11 -> /usr/X11R6/include/X11
In general, software must not be installed or managed via the
above symbolic links. They are intended for utilization by users
only. The difficulty is related to the release version of the X
Window System - in transitional periods, it is impossible to know
what release of X11 is in use.
XFree86 system binaries. These are necessary for the
initialisation, configuration and running of the X windowing
system. X, xf86config, xauth, xmodmap and even xpenguin are located
XFree86 system header files. There are required for the
compilation of some applications that utilise the X toolkit.
XFree86 system libraries.
XFree86 system modules. These are the modules that X loads upon
startup. Without these modules video4linux, DRI and GLX extensions
and drivers for certain input devices would cease to function.
XFree86 system fonts. Fonts that are utilised by 'xfs' (the X
Font Server) and programs of that ilk.
This directory contains the vast majority of binaries on your
system. Executables in this directory vary widely. For instance vi,
gcc, gnome-session and mozilla and are all found here.
The central documentation directory. Documentation is actually
located in /usr/share/doc and linked from here.
Theoretically, that's another directory for configuration files.
Virtually unused now.
Once upon a time, this directory contained network games files.
Rarely used now.
The directory for 'header files', needed for compiling user
space source code.
Application specific header files.
This directory used to contain the files for the info
documentation system. Now they are in '/usr/share/info'.
This directory contains program libraries. Libraries are
collections of frequently used program routines.
The original idea behind '/usr/local' was to have a separate
('local') '/usr' directory on every machine besides '/usr', which
might be just mounted read-only from somewhere else. It copies the
structure of '/usr'. These days, '/usr/local' is widely regarded as
a good place in which to keep self-compiled or third-party
programs. The /usr/local hierarchy is for use by the system
administrator when installing software locally. It needs to be safe
from being overwritten when the system software is updated. It may
be used for programs and data that are shareable amongst a group of
hosts, but not found in /usr. Locally installed software must be
placed within /usr/local rather than /usr unless it is being
installed to replace or upgrade software in /usr.
It once held the man pages. It has been moved to
This directory contains programs for administering a system,
meant to be run by 'root'. Like '/sbin', it's not part of a user's
$PATH. Examples of included binaries here are chroot, useradd,
in.tftpd and pppconfig.
This directory contains 'shareable', architecture-independent
files (docs, icons, fonts etc). Note, however, that '/usr/share' is
generally not intended to be shared by different operating systems
or by different releases of the same operating system. Any program
or package which contains or requires data that doesn't need to be
modified should store that data in '/usr/share' (or
'/usr/local/share', if installed locally). It is recommended that a
subdirectory be used in /usr/share for this purpose."
Location of package specific documentation files. These
directories often contain useful information that might not be in
the man pages. They may also contain templates and configuration
files for certain utilities making configuration that much
Location of 'info' pages. This style of documentation seems to
be largely ignored now. Manual pages are in far greater favour.
Manual pages. They are organised into 8 sections, which are
man1: User programs
Manual pages that describe publicly accessible commands are contained
in this chapter. Most program documentation that a user will need to
use is located here.
man2: System calls
This section describes all of the system calls (requests for the kernel
to perform operations).
man3: Library functions and subroutines
Section 3 describes program library routines that are not direct calls
to kernel services. This and chapter 2 are only really of interest to
man4: Special files
Section 4 describes the special files, related driver functions, and
networking support available in the system. Typically, this includes
the device files found in /dev and the kernel interface to networking
man5: File formats
The formats for many data files are documented in the section 5. This
includes various include files, program output files, and system files.
This chapter documents games, demos, and generally trivial programs.
Different people have various notions about how essential this is.
man7: Miscellaneous Manual pages that are difficult to classify are
designated as being section 7. The troff and other text processing
macro packages are found here.
man8: System administration Programs used by system administrators
for system operation and maintenance are documented here. Some of
these programs are also occasionally useful for normal users.
The 'linux' sub-directory holds the Linux kernel sources,
header-files and documentation.
RPM provides a substructure for building RPMs from SRPMs.
Organisation of this branch is fairly logical with packages being
organised according to a package's architecture.
A temporary store for RPM binary files that are being built from
- /usr/src/RPM/RPMS/athlon, /usr/src/RPM/RPMS/i386,
These directories contain architecture dependant RPM source
This directory contains the source TAR files, patches, and icon
files for software to be packaged.
RPM SPEC files. A SPEC file is a file that contains information
as well as scripts that are necessary to build a package.
Contains the source RPM files which result from a build.
Contains the source code for the Linux kernel.
The last kernel source configuration. This file is normally
created through the 'make config', 'make menuconfig' or 'make
xconfig' steps during kernel compilation.
- /usr/src/linux/.depend, /usr/src/linux/.hdepend
'make dep' checks the dependencies of the selections you made
when you created your .config file. It ensures that the required
files can be found and it builds a list that is to be used during
compilation. Should this process be successful these two files are
A partial credits-file of people that have contributed to the
Linux project. It is sorted by name and formatted to allow easy
grepping and beautification by scripts. The fields are: name (N),
email (E), web-address (W), PGP key ID and fingerprint (P),
description (D), and snail-mail address (S).
List of maintainers and details on how to submit kernel
Contains data necessary for compilation of a working kernel. It
allows developers and end-users to compile a kernel with a few
simple steps (ie. make dep, make clean, make bzImage, make modules,
make modules_install) and also not have to worry about re-compiling
everything from scratch if parts of it have already been done so
and are up to date.
These are the release notes for Linux version 2.4. Read them
carefully, as they tell you what this is all about, explain how to
install the kernel, and what to do if something goes wrong.
A suggested procedure for reporting Linux bugs. You aren't
obliged to use the bug reporting format, it is provided as a guide
to the kind of information that can be useful to developers - no
This file contains rules which are shared between multiple
Contains documentation that may be necessary in order to
re-compile a kernel. However, it also provides quite a lot of
information about your Linux system in general as well. For those
who wish to seek further information on the contents of this
directory you may consult the /usr/src/linux/Documentation/00-INDEX
file. Further, more detailed documentation may be found in
/usr/src/linux/Documentation/Docbook. Of course, the contents of
this directory is written in Docbook but may be converted to pdf,
ps or html using the make targets of 'pdfdocs', 'psdocs' and
User space temporary files. This directory is not found on
modern distributions at all and was most likely created as a
consequence of Linux's UNIX heritage.