4.13.2 La directory /proc

La directory /proc è il mount-point di un filesystem particolare, proc, che è un filesystem virtuale, nel senso che non occupa spazio dulla memoria di massa, il quale permette di presentare sottoforma di file e directory alcuni parametri del sistema. In questo modo è possibile gestire tali parametri direttamente dalla shell. Il filesystem viene montato all’avvio del sistema poiché nel file /etc/fstab è presente una riga analoga a

 
none /proc proc defaults 0 0  
Il contenuto dei file contenuti all’interno di /proc ed in tutte le sue sottodirectory, viene aggiornato in tempo reale dal kernel e viene generalmente utilizzato dai programmi che hanno bisogno di conoscere lo stato del sistema. I comandi come ps o top36, che visualizzano i processi presenti sul sistema con i loro relativi stati, attingono le informazioni da /proc, come anche i comandi lspci, scanpci, pnpdump che visualizzano le caratteristiche delle periferiche PCI o ISA riconosciute dal sistema.

Poiché /proc è un filesystem virtuale residente in memoria centrale (RAM), tutte le volte che il sistema viene avviato, questo viene creato con la caratteristica che la dimensione dei file e directory in esso presenti è sempre 0 e la data relativa alla loro ultima modifica è quella corrente.

All’interno di /proc sono contenute varie directory, alcune delle quali hanno un nome costituito soltanto da caratteri numerici come risulta dall’esempio di seguito riportato

[root@Zeus ~]# ls /proc
1     1158  1182  408  700  8            filesystems  meminfo     sys
1084  1160  1184  425  731  822          fs           misc        sysvipc
1126  1164  1185  480  740  823          ide          modules     tty
1129  1166  12    5    744  877          interrupts   mounts      uptime
1131  1167  1215  520  753  apm          iomem        mtrr        version
1133  1169  1241  6    762  bus          ioports      net
1136  1170  1244  615  771  cmdline      irq          partitions
1139  1171  1293  647  772  cpuinfo      kcore        pci
1144  1172  159   67   773  devices      kmsg         self
1147  1174  2     671  774  dma          ksyms        slabinfo
1149  1176  3     681  775  driver       loadavg      speakup
1151  1178  4     691  776  execdomains  locks        stat
1156  1180  404   7    777  fb           mdstat       swaps
Ognuna di tali directory rappresenta un processo in esecuzione sul sistema ed il suo nome è l’identificatore univoco del processo, o PID (Process IDentifier)37. Al suo interno vi sono i seguenti oggetti Ad esempio, il contenuto della directory /proc/408 è riportato di seguito

[root@Zeus ~]# ls -l /proc/408
total 0
-r--r--r--    1 root     root            0 Mar 27 22:42 cmdline
lrwxrwxrwx    1 root     root            0 Mar 27 22:42 cwd -> /
-r--------    1 root     root            0 Mar 27 22:42 environ
lrwxrwxrwx    1 root     root            0 Mar 27 22:42 exe -> /sbin/klogd
dr-x------    2 root     root            0 Mar 27 22:42 fd
-r--r--r--    1 root     root            0 Mar 27 22:42 maps
-rw-------    1 root     root            0 Mar 27 22:42 mem
-r--r--r--    1 root     root            0 Mar 27 22:42 mounts
                                                                        
                                                                        
lrwxrwxrwx    1 root     root            0 Mar 27 22:42 root -> /
-r--r--r--    1 root     root            0 Mar 27 22:42 stat
-r--r--r--    1 root     root            0 Mar 27 22:42 statm
-r--r--r--    1 root     root            0 Mar 27 22:42 status
Gli altri file presenti nella directory /proc contengono informazioni di varia natura, tra le quali le principali sono quelle riportate di seguito La directory /proc/sys contiene vari parametri del sistema operativo;

La directory /proc/bus contiene le informazioni relative ai bus riconosciuti dal sistema. Al suo interno si trovano le directory pci e usb che contengono rispettivamente le informazioni relative ai bus PCI e USB. Ad esempio, nel file /proc/bus/usb/devices è contenuto qualcosa di simile a quanto riportato di seguito

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB OHCI Root Hub
S:  SerialNumber=c8049000
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255ms
che indica la presenza di un controller USB (S:  Product=USB OHCI Root Hub), compatibile con la versione USB 1.1 (D:  Ver= 1.10). Al momento dell’inserimento di un dispositivo USB il conentuto di tale file cambierà, riportando anche le caratteristiche del dispositivo riconosciuto.

[da completare ...]