/proc

Wirtualny system plików udostępniający informacje o jądrze i procesach w postaci plików. Pozwala odczytywać i czasem zmieniać stan działającego systemu.

/proc to wirtualny system plików w Linuksie, który nie istnieje na żadnym dysku — jego zawartość jądro generuje w locie, w pamięci, w momencie gdy ją odczytujesz. Pod tym katalogiem znajdziesz pliki i podkatalogi reprezentujące stan działającego systemu: uruchomione procesy, parametry jądra, informacje o sprzęcie czy obciążeniu. Formalnie nazywa się to procfs i jest montowane w /proc przy starcie systemu.

Pomysł jest prosty i bardzo uniksowy: skoro „wszystko jest plikiem”, to stan systemu też powinno dać się odczytać zwykłym cat. Każdy działający proces dostaje własny katalog /proc/ — masz tam m.in. cmdline (czym proces został uruchomiony), status (zużycie pamięci, stan, właściciel), fd/ (otwarte deskryptory plików) czy environ (zmienne środowiskowe). Obok PID-ów leżą pliki globalne: /proc/cpuinfo, /proc/meminfo, /proc/loadavg czy /proc/mounts.

Do czego to wykorzystasz w praktyce

Większość narzędzi, których używasz na co dzień, pod spodem czyta właśnie z /proc. top, htop, ps czy free nie znają żadnej magii — chodzą po katalogach procesów i parsują te pliki. Możesz zrobić to samo ręcznie:

  • cat /proc/cpuinfo — ile masz rdzeni i jaki to procesor,
  • cat /proc/meminfo — szczegóły o pamięci RAM i swap,
  • cat /proc/$(pgrep -n nginx)/limits — limity konkretnego procesu (np. ile plików może otworzyć).

Gałąź /proc/sys jest ciekawsza, bo część plików możesz zapisywać i tym samym zmieniać zachowanie jądra na żywo. Klasyk to włączenie przekazywania pakietów: echo 1 > /proc/sys/net/ipv4/ip_forward. Bardziej cywilizowanie robi to sysctl (np. sysctl -w net.ipv4.ip_forward=1), który jest po prostu wygodną nakładką na te same pliki.

Na co uważać

Zmiany przez echo w /proc/sysulotne — znikają po restarcie. Żeby przetrwały, wpisz je do /etc/sysctl.conf albo pliku w /etc/sysctl.d/. Drugi mit: nie wszystko sprzętowe jest w /proc — informacje o urządzeniach i sterownikach trafiły z czasem do osobnego /sysfs montowanego w /sys. /proc dziś to głównie procesy i parametry jądra. I jeszcze jedno — rozmiar tych plików zwykle pokazywany jest jako 0, bo powstają dopiero przy odczycie; to normalne, nie błąd.

Pojęcia powiązane: sysfs (/sys), sysctl, kernel space vs user space, PID, deskryptory plików, polecenia ps, top i lsof.