This was blantantly copied from the Linux Programmer's Manual's hier(7)
manual page, which can be found by typing "man 7 hier" on a Linux
If you use Linux, you should really know what directory is meant
for storing what data. If you place data randomly across your filesystem
you will never be able to find it again, due to the incredible amount
of files used on Linux systems.
A typical Linux system has, among others, the following
/ This is the root directory. This is where the
whole tree starts.
/bin This directory contains executable programs which
are needed in single user mode and to bring the
system up or repair it.
/boot Contains static files for the boot loader. This
directory only holds the files which are needed
during the boot process. The map installer and
configuration files should go to /sbin and /etc.
/dev Special or device files, which refer to physical
devices. See mknod(1).
/dos If both MS-DOS and Linux are run on one computer,
this is a typical place to mount a DOS file system.
/etc Contains configuration files which are local to the
machine. Some larger software packages, like X11,
can have their own subdirectories below /etc.
Site-wide configuration files may be placed here or
in /usr/etc. Nevertheless, programs should always
look for these files in /etc and you may have links
for these files to /usr/etc.
When a new user account is created, files from this
directory are usually copied into the user's home
Configuration files for the X11 window system.
/home On machines with home directories for users, these
are usually beneath this directory, directly or
not. The structure of this directory depends on
local admininstration decisions.
/lib This directory should hold those shared libraries
that are necessary to boot the system and to run
the commands in the root filesystem.
/mnt is a mount point for temporarily mounted filesys
/proc This is a mount point for the proc filesystem,
which provides information about running processes
and the kernel. This pseudo-file system is
described in more detail in proc(5).
/sbin Like /bin, this directory holds commands needed to
boot the system, but which are usually not executed
by normal users.
/tmp This directory contains temporary files which may
be deleted with no notice, such as by a regular job
or at system boot up.
/usr This directory is usually mounted from a seperate
partition. It should hold only sharable, read-only
data, so that it can be mounted by various machines
The X-Window system, version 11 release 6.
Binaries which belong to the X-Windows system;
often, there is a symbolic link from the more tra
ditional /usr/bin/X11 to here.
Data files associated with the X-Windows system.
These contain miscellaneous files needed to run X;
Often, there is a symbolic link from /usr/lib/X11
to this directory.
Contains include files needed for compiling pro
grams using the X11 window system. Often, there is
a symbolic link from /usr/inlcude/X11 to this
This is the primary directory for executable pro
grams. Most programs executed by normal users
which are not needed for booting or for repairing
the system and which are not installed locally
should be placed in this directory.
is the traditional place to look for X11 executa
bles; on Linux, it usually is a symbolic link to
This directory holds files containing word lists
for spell checkers.
You may find documentation about the installed
software packages in this directory.
Site-wide configuration files to be shared between
several machines may be stored in this directory.
However, commands should always reference those
files using the /etc directory. Links from files
in /etc should point to the appropriate files in
Include files for the C compiler.
Include files for the C compiler and the X-Windows
system. This is usually a symbolic link to
Include files which declare some assembler func
tions. This used to be a symbolic link to
This contains information which may change from
system release to system release and used to be a
symbolic link to /usr/src/linux/include/linux to
get at operating system specific information.
(Note that one should have include files there that
work correctly with the current libc and in user
space. However, Linux kernel source is not designed
to be used with user programs and does not know
anything about the libc you are using. It is very
likely that things will break if you let
/usr/include/asm and /usr/include/linux point at a
random kernel tree. Debian systems don't do this
and use headers from a known good kernel version,
provided in the libc*-dev package.)
Include files to use with the GNU C++ compiler.
Object libraries, including dynamic libraries, plus
some executables which usually are not invoked
directly. More complicated programs may have whole
The usual place for data files associated with X
programs, and configuration files for the X system
itself. On Linux, it usually is a symbolic link to
contains executables and include files for the GNU
C compiler, gcc(1).
Files for the GNU groff document formatting system.
Files for uucp(1).
Files for timezone information.
This is where programs which are local to the site
Binaries for programs local to the site go there.
Configuration files associated with locally
installed programs go there.
Files associated with locally installed programs go
Info pages associated with locally installed pro
grams go there.
Manpages associated with locally installed programs
Locally installed programs for system admininstra
Source code for locally installed software.
This directories contains program binaries for sys
tem admininstration which are not essentail for the
boot process, for mounting /usr, or for system
This directory contains subdirectories with spe
cific application data, that can be shared among
different architectures of the same OS.
Manpages go in there, into their subdirectories.
These directories contain manual pages which are in
source code form. Systems which use a unique lan
guage and code set for all manual pages may omit
Source files for different parts of the system,
included with some packages for reference purposes.
Don't work here with your own projects, as files
below /usr should be read-only except when
This has always been the traditional place where
kernel sources were unpacked. This was important on
systems that /usr/include/linux was a symlink here.
You should probably use another directory for
building the kernel now.
Obsolete. This should be a link to /var/tmp. This
link is present only for compatibility reasons and
shouldn't be used.
/var This directory contains files which may change in
size, such as spool and log files.
This directory is superseded by /var/log and should
be a symbolic link to /var/log.
This directory is used to save backup copies of
important system files.
These directories contain preformatted manual pages
according to their manpage section.
Lock files are placed in this directory. The nam
ing convention for device lock files is
LCK.. where is the device's name
in the filesystem. The format used is that of HDU
UUCP lock files, i.e. lock files contain a PID as a
10-byte ASCII decimal number, followed by a newline
Miscelanous log files.
This is where vi(1) saves edit sessions so they can
be restored later.
Run-time variable files, like files holding process
identifiers (PIDs) and logged user information
(utmp). Files in this directory are usually
cleared when the system boots.
Spooled (or queued) files for various programs.
Spooled jobs for at(1).
Spooled jobs for cron(1).
Spooled files for printing.
Spooled files for the smail(1) mail delivery pro
Spool directory for the news subsystem.
Spooled files for uucp(1).
Like /tmp, this directory holds temporary files
stored for an unspecified duration.
Back to Linux For Monkeys