The proc filesystem is a crucial function of Linux that you may’t ignore. proc is a pseudo or digital filesystem that gives an interface to kernel information buildings. In different phrases, proc is not an precise filesystem within the real-world sense; moderately, it resides solely in reminiscence and never on a disk. It is mechanically mounted by the system.
Most of its contents are common information and directories, so you need to use most common Linux instruments to navigate the proc filesystem. The examples on this article ought to run the identical on any Linux distribution. My system makes use of:
$ cat /and many others/redhat-release
Red Hat Enterprise Linux Server launch 7.eight (Maipo)
$
$ uname -r
three.10.Zero-1127.el7.x86_64
$
Basic proc utilization
To discover out the place the /proc filesystem resides, run the mount command and seek for proc. Here, you may see that proc is mounted on the /proc listing:
$ mount | grep proc
proc on /proc sort proc (rw,nosuid,nodev,noexec,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc sort autofs (rw,relatime,fd=26,pgrp=1,timeout=Zero,minproto=5,maxproto=5,direct,pipe_ino=9506)
nfsd on /proc/fs/nfsd sort nfsd (rw,relatime)
binfmt_misc on /proc/sys/fs/binfmt_misc sort binfmt_misc (rw,relatime)
$
Move into the /proc listing and discover it. You will see quite a lot of directories with numbers; the numbers are simply course of IDs (PIDs) for the processes which can be executing. The information with names are common information which can be relevant system-wide and never associated to a particular course of:
$ cd /proc/
$ pwd
/proc
$ ls
1 157 22827 33 3413 3618 384 4709 512 5571 66 741 798 88 consoles keys scsi
10 15868 23 3340 3414 362 385 4768 513 5581 6723 742 799 880 cpuinfo key-users self
101 15900 23323 3341 3415 3622 39 4769 514 56 68 7466 eight 891 crypto kmsg slabinfo
1033 16 23370 3342 346 363 392 4770 515 5637 69 747 80 9 gadgets kpagecount softirqs
104 17 23380 3343 3467 364 394 48 516 5652 7 75 800 906 diskstats kpageflags stat
10416 17580 23383 3344 347 365 four 4804 517 57 70 76 8367 928 dma loadavg swaps
105 18 23469 3346 349 37 40 4805 518 58 7071 77 839 96 driver locks sys
106 19 23491 3365 35 374 4094 4807 519 59 71 78 840 98 execdomains mdstat sysrq-trigger
107 2 23524 3366 351 375 4096 482 52 6 7199 783 842 9838 fb meminfo sysvipc
11 20767 23527 3392 352 376 41 483 53 601 72 784 8446 99 filesystems misc timer_list
11412 21 24 3397 3523 377 4180 49 5347 61 73 785 85 993 fs modules timer_stats
12 21014 26 3398 358 378 42 494 5348 62 735 786 86 994 interrupts mounts tty
120 21035 27 34 359 379 428 495 54 624 736 79 869 9970 iomem mtrr uptime
1263 21059 28 3408 36 38 43 508 5421 625 737 793 87 acpi ioports internet model
1265 21083 29 3409 360 380 44 509 5463 63 738 794 870 buddyinfo ipmi pagetypeinfo vmallocinfo
1272 22 30 3410 3602 381 45 51 5464 636 739 795 874 bus irq partitions vmstat
13 22055 31 3411 3603 382 46 510 5500 64 74 796 878 cgroups kallsyms sched_debug zoneinfo
14 22074 32 3412 361 383 47 511 5519 65 740 797 879 cmdline kcore schedstat
$
Begin by exploring some common system-wide information. For instance, /proc/cpuinfo exhibits details about the CPU on the system—particularly, its make, mannequin, variety of cores, velocity, CPU flags, and many others.:
$ cat /proc/cpuinfo
Similarly, /proc/meminfo supplies details about the first reminiscence or RAM on the system. It additionally supplies extra statistics, like how a lot reminiscence is used, free, and so forth:
$ cat /proc/meminfo
To view all of the kernel modules which can be loaded, have a look at the /proc/modules file:
$ cat /proc/modules
To see what all filesystems are supported by your system, have a look at /proc/filesystems:
$ cat /proc/filesystems
Next, have a look at the per-process information; for instance, systemd, which has a PID of 1:
$ ps aux | grep -i systemd | head -1
root 1 Zero.Zero Zero.Zero 195976 9088 ? Ss Mar03 Zero:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
$
Move to the listing named 1 inside /proc and see what’s there. There are many information current, and their names are considerably self-explanatory:
$ cd /proc/1
$ pwd
/proc/1
$$ ls
attr cmdline environ io mem ns pagemap sched stack activity
autogroup comm exe limits mountinfo numa_maps patch_state schedstat stat timers
auxv coredump_filter fd loginuid mounts oom_adj persona sessionid statm uid_map
cgroup cpuset fdinfo map_files mountstats oom_score projid_map setgroups standing wchan
clear_refs cwd gid_map maps internet oom_score_adj root smaps syscall
$
To discover out if these information are current for every of the processes, choose the present shell ID. You can get that data by working echo $$. $$ is a particular variable that saves the present shell’s PID. Go to /proc and cd into the listing with the identical quantity because the PID. The information are virtually similar to those for PID 1 or systemd:
$ echo $$
21059
$
$ cd /proc/21059
$ pwd
/proc/21059
$
$ ls
attr cmdline environ io mem ns pagemap sched stack activity
autogroup comm exe limits mountinfo numa_maps patch_state schedstat stat timers
auxv coredump_filter fd loginuid mounts oom_adj persona sessionid statm uid_map
cgroup cpuset fdinfo map_files mountstats oom_score projid_map setgroups standing wchan
clear_refs cwd gid_map maps internet oom_score_adj root smaps syscall
$
To see what these information include, run a long-running course of. Open a terminal and run the tty command to see which terminal you’re utilizing. Then sort the cat command and hit Enter. This command will sit and wait on your enter:
Open one other terminal and discover the PID of cat utilizing the pgrep command:
Now, discover the very first per-process file, cmdline. This file exhibits how the command line is executed, if any parameters are used, and many others.:
$ cat /proc/24335/cmdline
cat$
Next, have a look at the listing referred to as cwd, which is form of a symbolic hyperlink (symlink) to the listing the place the cat command was executed; on this case, that’s /root:
$ ls -l /proc/24335/cwd
lrwxrwxrwx. 1 root root Zero Mar four 03:35 /proc/24335/cwd -> /root
$
If a binary is executed and a course of is spawned, it opens up just a few information by default. In common, it opens an ordinary in (stdin), customary out (stdout), and an ordinary err (stderr). If you checklist the fd listing below /proc/ adopted by the PID, you may see it returns three symbolic hyperlinks, all pointing to the terminal (pts2) that was used to execute the command:
$ ls -l /proc/24335/fd/
complete Zero
lrwx------. 1 root root 64 Mar four 03:35 Zero -> /dev/pts/2
lrwx------. 1 root root 64 Mar four 03:35 1 -> /dev/pts/2
lrwx------. 1 root root 64 Mar four 03:35 2 -> /dev/pts/2
$
Another essential file is exe, which is a symlink pointing to absolutely the path of the binary that was executed. In this case, it’s the path of the cat command:
$ ls -l /proc/24335/exe
lrwxrwxrwx. 1 root root Zero Mar four 03:35 /proc/24335/exe -> /usr/bin/cat
$
Similarly, when you cat the environ per-process file, you may view all of the atmosphere variables which can be outlined for the cat course of:
$ cat /proc/24335/environ
Important information in proc
The examples above present quite a lot of details about working processes and your system on the whole that may support in debugging and troubleshooting points.
Important per-process information
The following are essential per-process information to search for within the /proc/ filesystem:
- /proc/$pid/cmdline Holds the whole command line for the method
- /proc/$pid/cwd Symbolic hyperlink to the method’ present working listing
- /proc/$pid/environ Contains the preliminary atmosphere that was set when this system began
- /proc/$pid/exe Symbolic hyperlink to the trail of the file that was executed
- /proc/$pid/fd Subdirectory for itemizing information which were opened by the method
- /proc/$pid/io Contains I/O statistics for the method
- /proc/$pid/limits Displays the method useful resource restrict
- /proc/$pid/maps Currently mapped reminiscence areas and entry permissions
- /proc/$pid/stack Trace of perform calls within the course of’ kernel stack
- /proc/$pid/stat Status details about the method
- /proc/$pid/activity/ Directory that accommodates thread data
Important system-wide information
Here is a listing of essential common information (i.e., not particular to any course of):
- /proc/cmdline Arguments handed to the Linux kernel throughout boot time
- /proc/cpuinfo CPU-related data
- /proc/meminfo Memory utilization statistics
- /proc/filesystems Listing of filesystems supported by the kernel
- /proc/modules Kernel modules which can be presently loaded
- /proc/partitions Information about every partition on the system
- /proc/swaps Information about swap area on the system
- /proc/self Directory refers back to the course of accessing the /proc filesystem
- /proc/slabinfo Information about kernel caches
- /proc/sys Various information and sub-directories about kernel variables
Further steps
This overview of the proc filesystem solely touches on the potentialities it presents. For extra data, test proc‘s man web page by getting into the man proc command or accessing the web model of the proc man page.