Unix directory structure

In computer science, and particularly in Unix-like operating systems, the Unix directory structure is a convention for a hierarchical organization of computer files. The first fully general hierarchical file system was that of Multics (late 1960s). Around 1980 a very similar directory structure was included by Microsoft in its Disk Operating System (DOS).

There are attempts at creating an "official" standard Unix filesystem layout, such as the "Filesystem Hierarchy Standard." Also as part of the "Linux Standards Base" a common filesystem layout is defined, to encourage interoperability among different Linux distributions.

The Unix directory is a tree-like structure, usually drawn as an inverted tree, with at the top a single directory, the root, from which subdirectories branch out. Each subdirectory in turn can be the origin of a set of subdirectories. See the figure for a very schematic illustration.

What follows is a generalized overview of common locations of files in a Unix system:
 * / (root) -- The / notes the "root" of the filesystem, where the entire system is contained. Unlike Microsoft Windows, where each drive has its own root directory named by a letter, such as C:\ or F:\, Unix holds the entire system in this single top-level directory, including each device and document. Thus, it is commonly said that in Unix, "everything is a file." Note that Unix uses the forward slash ( / ) rather than the backslash ( \ ) commonly used in Windows.


 * /bin -- Stands for "binaries"; Contains some fundamental utilities needed by a system administrator. But also user commands as cp (file copy), rm (file delete), ls (list files in directory), etc. As a failsafe, these were placed in a separate directory so that they could be placed on a separate disk or disk partition in case the main drive failed.


 * /etc -- Contains configuration files and some system databases.


 * /dev -- short for devices. Contains file representations of every peripheral device attached to the system.


 * /dev/null -- Also known as the "bit bucket" or "black hole", this virtual file discards all contents written to it. This is typically used to throw away unwanted data streams, such as log files.


 * /dev/random -- This is a virtual file which contains random numbers (subject to the limitations of Random Number Generators in Computing). It uses system noise to generate random numbers and blocks if not enough entropy in the noise is available. Random is commonly used more by programs that absolutely need high quality random data (such as SSH to generate an encryption key).


 * /dev/urandom -- Same as /dev/random, except it always returns random numbers, even if there is not enough entropy in the system noise available. In the latter case, pseudorandom numbers are generated, which are based on an algorithm, depending on the type of Unix system.


 * /home -- contains the home directories for the users. On some Unices, this is under /usr/home


 * /mnt -- This is the default location to mount external devices like hard disk drives, pen drives etc.


 * /lib -- This is the depository of all integral UNIX system libraries.


 * /root -- the home directory for the superuser root.


 * /tmp -- a place for temporary files. Many Unices clear this directory upon start up.


 * /usr -- originally the directory holding user home directories, its use has changed, and it now holds executables, libraries, and shared resources that are not system critical: X11, KDE, PERL, LaTeX etc. (The name "Unix System Resources" is a post hoc backronym.)


 * /usr/bin -- This directory stores the executables that live in /usr.


 * /usr/include -- /usr/include stores the development headers used throughout the system.


 * /usr/lib -- The required libraries for executables within /usr or elsewhere for that matter, live here.


 * /var -- short for "variable." A place for files that may change often, such as the storage to a database, the contents of a database, log files (usually stored in /var/log), email stored on a server, etc.


 * /var/log/ -- Storage for the system log files.


 * /var/mail/ -- the place where all the incoming mails are stored. The user can access his/her own mail only unless he/she has admin rights.


 * /var/spool/ -- contains print jobs, mail spools and various other tasks that have been queued, waiting for some related task to finish.