Understanding the Linux File System

Understanding the Linux File System

Like any other operating system, Linux organizes information in files and directories. The files, in turn, are contained in directories (a directory is a special file that can contain other files and directories). A directory can contain other directories, giving rise to a hierarchical structure. This hierarchical organization of files is called the file system.

The Linux file system provides a unified model of all storage in the system. The file system has a single root directory, indicated by a forward slash (/). Then there is a hierarchy of files and directories. Parts of the file system can reside in different physical media, such as hard disk, floppy disk, and CD-ROM. Figure 7-3 illustrates the concept of the Linux file system and how it spans multiple physical devices.

Click To expand
Figure 7-3: The Linux File System Provides a Unified View of Storage That May Span Multiple Drives.

If you are familiar with MS-DOS or Windows, notice that there is no concept of a drive letter in UNIX. You can have long filenames (up to 256 characters), and filenames are case sensitive. Often, UNIX filenames have multiple extensions, such as sample.tar.Z. Some UNIX filenames include the following: index.html, Makefile, kernel-enterprise-2.4.18-3.i686.rpm, .bash_profile, and httpd_src.tar.gz.

To locate a file, you need more than just the file's name; you also need information about the directory hierarchy. The term pathname refers to the complete specification necessary to locate a file-the complete hierarchy of directories leading to the file-and the filename. Figure 7-4 shows a typical Linux pathname for a file.

Click To expand
Figure 7-4: A Typical Linux Pathname.

As you can see from Figure 7-4, a Linux pathname consists of the following parts:

  1. The root directory, indicated by a forward slash (/) character.

  2. The directory hierarchy, with each directory name separated from the previous one by a forward slash (/) character. A / appears after the last directory name.

  3. The filename, with a name and one or more optional extensions.

Many directories have specific purposes. If you know the purpose of specific directories, finding your way around Linux directories is easier. Another benefit of knowing the typical use of directories is that you can guess where to look for specific types of files when you face a new situation. Table 7-2 briefly describes the directories in a Linux system:

Table 7-2: Linux System Directories




Root directory that forms the base of the file system. All files and directories are contained logically in the root directory, regardless of their physical locations.


Contains the executable programs that are part of the Linux operating system. Many Linux commands, such as cat, cp, ls, more, and tar, are located in /bin.


Contains the Linux kernel and other files the LILO and GRUB boot managers need (the kernel and other files can be anywhere, but it is customary to place them in the /boot directory).


Contains all device files. Linux treats each device as a special file; all such files are located in the device directory /dev.


Contains most system configuration files and the initialization scripts (in the /etc/rc.d subdirectory)


Conventional location of the home directories of all users. User naba's home directory, for example, is /home/naba.


Contains library files, including the loadable driver modules, needed to boot the system


Directory for lost files. Every disk partition has a lost+found directory.


A directory, typically used to mount devices temporarily, such as floppy disks and disk partitions. Also contains the /mnt/floppy directory for mounting floppy disks and the /mnt/cdrom directory for mounting the CD-ROM drive. (Of course, you can mount the CD-ROM drive on another directory as well.)


A special directory that contains information about various aspects of the Linux system


The home directory for the root user


Contains executable files representing commands typically used for system-administration tasks. Commands such as mount, halt, umount, and shutdown reside in the /sbin directory.


Temporary directory that any user can use as a scratch directory, meaning that the contents of this directory are considered unimportant and usually are deleted every time the system boots


Contains the subdirectories for many important programs, such as the X Window System, and the online manual


Contains various system files (such as logs), as well as directories for holding other information, such as files for the Web server and anonymous FTP server

The /usr and /var directories also contains a host of useful subdirectories. Table 7-3 lists a few of the important subdirectories in /usr. Table 7-4 shows a similar breakdown for the /var directory.

Table 7-3: Important /usr Subdirectories




Contains the XFree86 (X Window System) software


Contains executable files for many more Linux commands, including utility programs commonly available in Linux, but is not part of the core Linux operating system


Contains some Linux games such as Chromium, and Maelstrom


Contains the header files (files with names ending in .h) for the C and C++ programming languages; also includes the X11 header files in the /usr/include/X11 directory and the kernel header files in the /usr/include/linux directory


Contains the libraries for C and C++ programming languages; also contains many other libraries, such as database libraries, graphical toolkit libraries, and so on


Contains local files. The /usr/local/bin directory, for example, is supposed to be the location for any executable program developed on your system.


Contains many administrative commands, such as commands for electronic mail and networking


Contains shared data, such as default configuration files and images for many applications. For example, /usr/share/gnome contains various shared files for the GNOME desktop; and /usr/share/doc has the documentation files for many Linux applications (such as the Bash shell, mtools, and the GIMP image processing program).


Contains the online manual (which you can read by using the man command)


Contains the source code for the Linux kernel (the core operating system)

Table 7-4: Important /var Subdirectories




Storage area for cached data for a applications


Contains information relating to the current state of applications


Contains lock files to ensure that a resource is used by one application only


Contains log files organized into subdirectories. The syslogd server stores its log files in /var/log and the exact content of the files depend on the syslogd configuration file: /etc/syslog.conf. For example, /var/log/messages is the main system log file, /var/log/secure contains log messages from secure services such as sshd and xinetd, and /var/log/maillog contains the log of mail messages.


Contains user mailbox files


Contains variable data for packages stored in /opt directory


Contains data describing the system since it was booted


Contains data that's waiting for some kind of processing


Contains temporary files preserved between system reboots


Contains Network Information Service (NIS) database files