procfs

The proc filesystem (procfs) is a special filesystem in Unix-like operating systems that presents information about processes and other system information in a hierarchical file-like structure, providing a more convenient and standardized method for dynamically accessing process data held in the kernel than traditional tracing methods or direct access to kernel memory.

Typically

  • it is mapped to a mount point named /proc at boot time.

  • The proc file system acts as an interface to internal data structures in the kernel.

  • It can be used to obtain information about the system and to change certain kernel parameters at runtime (sysctl).

1. The /proc Filesystem

The proc filesystem provides a method of communication between kernel space and user space. For example, the GNU version of the process reporting utility ps uses the proc file system to obtain its data, without using any specialized system calls.

The directory /proc contains (among other things) one subdirectory for each process running on the system, which is named after the process ID (PID).

The link ‘self’ points to the process reading the file system. Each process subdirectory has the entries listed in: ls /proc/<pid>

cat /proc/meminfo


MemTotal:        8174328 kB
MemFree:         6186516 kB
MemAvailable:    7535332 kB
Buffers:          146740 kB
Cached:          1294156 kB
SwapCached:            0 kB
Active:           967184 kB
Inactive:         606252 kB
Active(anon):     135620 kB
Inactive(anon):    85064 kB
Active(file):     831564 kB
Inactive(file):   521188 kB
Unevictable:        3652 kB
Mlocked:            3652 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                68 kB
Writeback:             0 kB
AnonPages:        136188 kB
Mapped:           113344 kB
Shmem:             85724 kB
Slab:             340236 kB
SReclaimable:     302048 kB
SUnreclaim:        38188 kB
KernelStack:        3792 kB
PageTables:         4888 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4087164 kB
Committed_AS:     901432 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:     51200 kB
CmaTotal:              0 kB
CmaFree:               0 kB

...
Table 1. Main entries in /proc
File Content

/proc/cmdline

– Kernel command line information.

/proc/console

– Information about current consoles including tty.

/proc/crypto

- a list of available cryptographic modules

/proc/devices

– Device drivers currently configured for the running kernel.

/proc/diskstats

- giving some information (including device numbers) for each of the logical disk devices

/proc/dma

– Info about current DMA channels.

/proc/fb

– Framebuffer devices.

/proc/filesystems

– Current filesystems supported by the kernel.

/proc/interrupts, /proc/iomem, /proc/ioports and the directory /proc/irq

- giving some self-explanatory details about the devices (physical or logical) using the various system resources

/proc/iomem

– Current system memory map for devices.

/proc/ioports

– Registered port regions for input output communication with device.

/proc/loadavg

– System load average.

/proc/locks

– Files currently locked by kernel.

/proc/meminfo

– Info about system memory (see above example).

/proc/misc

– Miscellaneous drivers registered for miscellaneous major device.

/proc/modules

- one of the most important files in /proc, containing a list of the kernel modules currently loaded . It gives some indication (not always entirely correct) of dependencies.

/proc/mounts

– List of all mounts in use by system.

/proc/mounts

- a symlink to self/mounts which contains a list of the currently mounted devices and their mount points (and which file system is in use and what mount options are in use).

/proc/net

- a directory containing useful information about the network stack, in particular /proc/net/nf_conntrack, which lists existing network connections (particularly useful for tracking routing when iptables FORWARD is used to redirect network connections)

/proc/partitions

– Detailed info about partitions available to the system.

/proc/pci

– Information about every PCI device.

/proc/stat

– Record or various statistics kept from last reboot.

/proc/swap

– Information about swap space.

/proc/scsi

- giving information about any devices connected via a SCSI or RAID controller

/proc/sysvipc

- containing memory-sharing and inter-process communication (IPC) information.

/proc/tty

- containing information about the current terminals; /proc/tty/driver looks to be[original research?] a list of the different types of tty available - each of which is a list of those of each type

/proc/uptime

– Uptime information (in seconds).

/proc/version

– Kernel version, gcc version, and Linux distribution installed.

2. cpu info

cat /proc/cpuinfo

processor	: 0
 vendor_id	: AuthenticAMD
 cpu family	: 16
 model		: 6
 model name	: AMD Athlon(tm) II X2 270 Processor
 stepping	: 3
 microcode	: 0x10000c8
 cpu MHz		: 2000.000
 cache size	: 1024 KB
 ...
 processor	: 1
 vendor_id	: AuthenticAMD
 cpu family	: 16
 model		: 6
 model name	: AMD Athlon(tm) II X2 270 Processor
 stepping	: 3
 microcode	: 0x10000c8
 cpu MHz		: 800.000
 cache size	: 1024 KB