The Linux kernel has two primary functions: to control access to
physical devices on the computer and to schedule when and how
processes interact with these devices. The /proc/ directory — also called
the proc file system —
contains a hierarchy of special files which represent the current
state of the kernel — allowing applications and users to
peer into the kernel's view of the system.
3.1. A Virtual File System
Under Linux, all data are stored as files. Most users are
familiar with the two primary types of files: text and
binary. But the /proc/
directory contains another type of file called a
virtual file. It is for this reason that
/proc/ is often referred
to as a virtual file system.
These virtual files have unique qualities. Most of them are
listed as zero bytes in size and yet when one is viewed, it can
contain a large amount of information. In addition, most of the
time and date settings on virtual files reflect the current
time and date, indicative of the fact they are constantly
updated.
Virtual files such as /proc/interrupts, /proc/meminfo, /proc/mounts, and /proc/partitions provide an
up-to-the-moment glimpse of the system's hardware. Others, like
the /proc/filesystems file
and the /proc/sys/
directory provide system configuration information and
interfaces.
For organizational purposes, files containing information on a
similar topic are grouped into virtual directories and
sub-directories. For instance, /proc/ide/ contains information for
all physical IDE devices. Likewise, process directories
contain information about each running process on the system.
3.1.1. Viewing Virtual Files
By using the cat, more, or less commands on files within the
/proc/ directory, users
can immediately access enormous amounts of information about
the system. For example, to display the type of CPU a
computer has, type cat
/proc/cpuinfo to receive output similar to the
following:
processor : 0
vendor_id : AuthenticAMD
cpu family : 5
model : 9
model name : AMD-K6(tm) 3D+
Processor stepping : 1 cpu
MHz : 400.919
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr mce cx8 pge mmx syscall 3dnow k6_mtrr
bogomips : 799.53
When viewing different virtual files in the /proc/ file system, some of the
information is easily understandable while some is not
human-readable. This is in part why utilities exist to pull
data from virtual files and display it in a useful
way. Examples of these utilities include lspci, apm, free, and top.
Note
Some of the virtual files in the /proc/ directory are readable only
by the root user.
3.1.2. Changing Virtual Files
As a general rule, most virtual files within the /proc/ directory are
read-only. However, some can be used to adjust settings in
the kernel. This is especially true for files in the
/proc/sys/ subdirectory.
To change the value of a virtual file, use the echo command and a greater than
symbol (>) to redirect
the new value to the file. For example, to change the
hostname on the fly, type:
echo www.example.com > /proc/sys/kernel/hostname
Other files act as binary or Boolean switches. Typing
cat
/proc/sys/net/ipv4/ip_forward returns either a
0 or a
1. A
0 indicates
that the kernel is not forwarding network packets. Using the
echo command to change the
value of the ip_forward
file to 1
immediately turns packet forwarding on.
For a listing of some of the kernel configuration files available in the /proc/sys/ subdirectory, refer to Section 3.3.9, “/proc/sys/”.