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.
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.
As you can see from Figure 7-4, a Linux pathname consists of the following parts:
-
The root directory, indicated by a forward slash (
/
) character. -
The directory hierarchy, with each directory name separated from the previous one by a forward slash (
/
) character. A/
appears after the last directory name. -
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:
Directory |
Description |
---|---|
|
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 |
|
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 |
|
Contains all device files. Linux treats each device as a special file; all such files are located in the device directory |
|
Contains most system configuration files and the initialization scripts (in the |
|
Conventional location of the home directories of all users. User naba's home directory, for example, is |
|
Contains library files, including the loadable driver modules, needed to boot the system |
|
Directory for lost files. Every disk partition has a |
|
A directory, typically used to mount devices temporarily, such as floppy disks and disk partitions. Also contains the |
|
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 |
|
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.
Subdirectory |
Description |
---|---|
|
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 |
|
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 |
|
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, |
|
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) |
Subdirectory |
Description |
---|---|
|
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 |
|
Contains user mailbox files |
|
Contains variable data for packages stored in |
|
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 |