Very often, while working on a Linux project, we’d like information about the system we’re working on: both at a global scope and a local (process) scope.
Have we not wondered: is there a quick way to query which kernel version am using, what interrupts are enabled & hit, what my processor(s) are, details about kernel subsystems, memory usage, file, network, IPC usage, etc etc. Linux’s proc filesystem makes this easy.
So what exactly is the proc filesystem all about?
Essentially, some quick salient points about the proc filesystem:
- it’s a RAM-based filesystem (think ramdisk; yup, it’s volatile)
- it’s a kernel feature, not userspace – proc is a filesystem supported by the Linux kernel VFS
- it serves two primary purposes
- proc serves as a “view” deep into the kernel internals; we can see details about hardware and software subsystems that userspace otherwise would have no access to (no syscalls)
- certain “files” under proc, typically anchored under /proc/sys, can be written into: these basically are the “tuning knobs” of the Linux kernel. Sysads, developers, apps, etc exploit this feature
- proc is mounted on start-up under /proc
- a quick peek under /proc will show you several “files” and “folders”. These are pseudo-entries in the sense that they exist only in RAM while power is applied. The “folders” that are numbers are in fact the PID of each process that’s alive when you typed ‘ls’! it’s a snapshot of the system at that moment in time..
- in fact, the name “proc” suggests “process”
At this point, and if you’re not really familiar with this stuff, I’d urge you to peek around /proc on your Linux box, cat-ting stuff as you go. (Also, lest i forget, it’s better to run as root (sudo /bin/bash) so that we don’t get annoying ‘permission denied’ messages). Of course, be careful when you run as root!!!
For example, to get one started off: