Sta je to /proc?

Proc je virtuelni file sistem koji je mountiran u /proc direktorij te sadrzi poddirektorije i fajlove u kojima se nalaze informacije o samom operativnom sistemu, kao sto su pokrenuti procesi, te hardveru. Proc folder i fajlovi nisu snimljeni na disku nego se nalaze u RAM memoriji. Interesantno je da velicina fajlova i direktorija u /proc iznosi 0. Ovo omogucuje VHS (Virtual File System) sto znaci da fajl ne sadrzi informacije sve do trenutka kada mu korisnik pristupi. U tom trenutku sadrzaj se dinamicki ucita iz kernela i napuni sadrzajem. Ovo mozemo lako provjeriti koristeci komandu file koja analizira fajlove te ispise infrmacije o tipu fajla.

Primjer za datoteku iz /proc:

file /proc/meminfo 
/proc/meminfo: empty

Primjer iznad jasno govori da je datoteka prazna. Medjutim, kada pokusamo pristupiti samom sadrzaju fajla komanda ce biti uspjesna:

cat /proc/meminfo 

Proc mozemo smatrati kao interfejs prema razlicitim informacija koje se nalaze u kernelu. Neke informacije takodjer mozemo mijanjti dok je racunar upaljen - sysctl.

Dodatne informacije se nalaze na man stranici kojoj mozemo pristupiti pomocu sljedece komande.

man proc

Pregled informacija o procesima

Pokrenuti proces ima jedinstveni PID ili Proces ID odnosno jedinstveni broj koji je snimljen u /proc direktoriju. Prvi proces koji se boota jer init process i kao prvi ima dodijeljen broj 1. Ako zelimo da vidimo informacije o initu kao sto je status procesa pokrecemo sljedecu komandu.

cat /proc/1/status

Pregled /proc fajlva koji otkrivaju dodatne informaicije o zadanim procesima.

Napmena: U primjerima ispod potrebno je PID zamijeniti sa stvarnim brojem procesa.

  • cat /proc/PID/status - vraca status procesa te ostale korisne informacija kao ko je pokrenuo process te zauzece memorije.
  • cat /proc/PID/cmdline - komanda koje je pokrenula porces
  • ls /proc/PID/cwd - simbolicki link do current working directory
  • cat /proc/PID/environ - sadrzi environment varijable koje formiraju okruzenje pod kojim je pokrenut proces
  • ls /proc/PID/exe - simbolicki link do samog programa, ako jos postoji na disku
  • ls -l /proc/PID/fd - direktorij koji sadrzi simbolicke linkove do svih file descriptora koje je otvorio proces kao sto su fajlovi, mrezni socketi itd.
  • ls /proc/PID/fdinfo - direktorij sadrzi dodatne informacije o file descriptors
  • cat /proc/PID/maps - datoteka koja sadrzi informacije o mapiranim fajlovima i blokovima kao sto su heap i stack
  • ls /proc/PID/root - simbolicki link do / odnosno root putanje onako kako ga vidi taj proces. Za vecinu procesa to ce biti / putanja osim ako se process ne pokrene preko chroot programa ili change root cime proces mozemo zavarati da je putanja do root foldra negdje drugo.
  • ls /proc/PID/task - direktorij koji sadrzi hard linkove do taskova koji su pokrenuti od strane ovog procesa - parent proces.

Mountiranje proc-a

U ovom dijelu cemo opisati gdje se nalazi defaultna sistemska okacija za proc te kako proc mountirati u direktorij po zelji.

Defaultna mount lokacija

Proc se automatski mounta prilikom bootanja sistema na lokaciju /proc pomocu zapisa koji se nalazi u konfiguracijskom fajlu /etc/fstab. Sadrzaj te datoteke mozemo jednostavno izlistati pomocu grep komande.

grep proc /etc/fstab

Mountanje u proc u direktorij po zelji

Proc iz RAMA mozemo mountati u bilo koji direktorij na hard disku. To cinimo na sljedeci nacin.

  • Napravite direktorij u koji cemo mountati proc
 mkdir /mnt/proc
  • Izvrisite mount proc-a iz RAMA u /mnt/proc
mount -t proc none /mnt/proc
  • Sadrzaj /mnt/proc direktorija sada cemo provjeriti sa komandom ls te porediti sa defaultnim proc direktorijem
ls /mnt/proc
ls /proc
  • Nakon zavrsene vjezbe potrebno je uraditi unmount
unmount /mnt/proc

Primjeri

* Kako saznati informacije o procesoru?

cat /proc/cpuinfo

* Kako saznati informacije o RAM memoriji?

cat /proc/meminfo

* Kako saznati koliko dugo je sistem upaljen?

cat /proc/uptime

Prvi broj je zbroj sekundi od zadnjeg restarta, drugi broj u sekundama govori koliko dugo je sistem idle.

* Kako saznati koji kernel se boota i sa kojim parametrima?

cat /proc/cmdline

* Kako saznati verziju kernela?

cat /proc/version

* Kako saznati listu particija?

cat /proc/partitions 

* Kako saznati informacije o swap particiji?

cat /proc/swaps