DEV Community

Tahmid Ul Muntakim
Tahmid Ul Muntakim

Posted on

Do You Know /proc at Linux Does Not Contain Real Files?

Do You Know /proc at Linux Does Not Contain Real Files?

The proc file system, often referred to as /proc, is a pseudo file system that provides a dynamic interface to the kernel's data structures. Unlike traditional file systems, /proc doesn't contain real files. Instead, it holds virtual files that are created on-the-fly, reflecting the current state of the system. This file system is created upon system boot and disappears when the system shuts down. By navigating /proc, you can gain deep insights into various kernel components and processes, making it a powerful tool for system administrators.

Navigating the /proc Directory

Within /proc, you'll find numerous subdirectories and files, each offering specific information about the system. Each process running on the system has its own directory in /proc, identified by its process ID (PID). For example, /proc/[PID]/ contains detailed information about a particular process, including its status, command line arguments, and file descriptors.

Some files within /proc are read-only, providing static details like the operating system version or CPU information. Others are writable, allowing you to configure kernel tunables and settings.

Commonly Used Files and Subdirectories

Here are some essential files and subdirectories within /proc:

  • /proc/cpuinfo: Provides detailed information about the CPU, including its model, clock speed, and cache size.
  • /proc/meminfo: Displays details about the system's memory usage, including total, free, and used memory.
  • /proc/swaps: Shows information about the swap space, including its total, free, and used capacity.
  • /proc/mounts: Lists the currently mounted file systems.
  • /proc/self/stat: Provides statistics about the current process, including its process ID, CPU time, memory usage, and more.
  • /proc/sys/: Contains subdirectories with various kernel tunables that can be modified to fine-tune system behavior.

Configuring Kernel Tunables

To modify kernel tunables, you'll typically write to specific files within the /proc/sys/ hierarchy. For example, to adjust the TCP buffer size, you might write to /proc/sys/net/ipv4/tcp_mem:

echo "4096 65536 16777216" > /proc/sys/net/ipv4/tcp_mem
Enter fullscreen mode Exit fullscreen mode

Persistent vs. Temporary Changes

Changes made directly to /proc files are typically temporary and will be lost upon reboot. To make changes persistent, you should use the sysctl tool and configure settings in /etc/sysctl.conf or create custom configuration files in /etc/sysctl.d/:

echo "net.ipv4.tcp_mem = 4096 65536 16777216" >> /etc/sysctl.conf
sysctl -p  # Apply the changes
Enter fullscreen mode Exit fullscreen mode

Modifying Kernel Tunables Persistently

In this blog, I will talk about modifying kernel tunables persistently. The kernel loads tunable settings from configuration files found in the following directories during boot. The kernel tunable configuration files must end with .conf to be loaded automatically.

When modifying kernel tunables, always create a file inside /etc/sysctl.d. Never modify files inside /usr/lib/sysctl.d, as this directory contains configurations set by the vendor in the package distribution.

Steps to Modify Kernel Tunables:

  1. Find the parameter you want to change using the command:
   sysctl -n [parameter_name]
Enter fullscreen mode Exit fullscreen mode

For example, if the current value of the parameter is 30 and you want to change it, use the sysctl command:

   sysctl -w [parameter_name]=[new_value]
Enter fullscreen mode Exit fullscreen mode
  1. Making the Change Permanent: To make the change permanent, create a configuration file in /etc/sysctl.d/ with the .conf extension. The name of the file doesn't matter, but the extension must be .conf. Inside the file, mention the parameter with its desired value:
   echo "[parameter_name] = [new_value]" > /etc/sysctl.d/my_custom.conf
Enter fullscreen mode Exit fullscreen mode
  1. Applying the Configuration Without Reboot: Use the following command to apply the configuration without rebooting:
   sysctl -p /etc/sysctl.d/my_custom.conf
Enter fullscreen mode Exit fullscreen mode

After executing this command, the parameter value will be updated.

  1. Verifying the Change: Re-run the sysctl -n [parameter_name] command to verify the new value.

Now, when the system reboots, it will automatically load the configuration files from the mentioned locations, ensuring the kernel tunables are set according to your custom configuration.

Security Considerations

While /proc provides valuable information, it also exposes sensitive data, such as process details and system configurations. To enhance security, you can restrict access to /proc for non-privileged users. For example, adding the following option to /etc/fstab will hide process information from non-root users:

proc /proc proc defaults,hidepid=2 0 0
Enter fullscreen mode Exit fullscreen mode

Practical Examples

Here are some useful commands for exploring /proc:

  • View CPU information:
  cat /proc/cpuinfo
Enter fullscreen mode Exit fullscreen mode
  • Enable IP forwarding:
  echo 1 > /proc/sys/net/ipv4/ip_forward
Enter fullscreen mode Exit fullscreen mode

Additional Considerations

  • Static vs. Dynamic Kernel Tunables: Some tunables can be modified at runtime (e.g., TCP settings), while others require a kernel rebuild.
  • Impact of Changes: Be cautious when modifying kernel tunables. Changes can have unintended consequences, such as system instability or degraded performance. Always test changes in a controlled environment before applying them to production systems.
  • Persistent Changes: Use sysctl for persistent configurations. Direct modifications to /proc will not survive a reboot.

Conclusion

The proc file system is a versatile tool that offers deep insights into the Linux kernel. By exploring /proc and understanding the available kernel tunables, you can optimize system performance and gain greater control over your environment. However, with great power comes great responsibility—always proceed with caution when making changes, and ensure you understand the potential impact.


Top comments (0)