Proc

Testo originale di Davide Bianchi.

Il file system /proc e' un file system creato e mantenuto a run-time dal Kernel di Linux per tenere traccia dei vari processi che stanno funzionando sulla macchina e del loro stato. Tramite /proc si possono ottenere un sacco di informazioni su quello che c'e', come e' configurato e come funziona.

Il file system /proc (d'ora in poi solo /proc), e' un file system creato e mantenuto a run-time dal Kernel di linux per tenere traccia dei vari processi che stanno funzionando sulla macchina e del loro stato. Tramite /proc si possono ottenere un sacco di informazioni su quello che c'e', come e' configurato e come funziona. La cosa piu' interessante relativa a /proc e' che non esiste in realta', /proc legge direttamente dalla memoria del sistema le sue informazioni in "tempo reale".

/proc puo' essere letto da qualunque utente che abbia i corretti permessi di accesso, alcune parti di /proc possono pero' essere lette solamente dal proprietario del processo in questione e (ovviamente) da root.

Sotto linux, vi sono varie utility come lscpi, scanpci etc. che ottengono i loro dati proprio leggendo /proc ed interpretandone le informazioni. Altre utility simili sono ps e top.

La / di un sistema Unix/Linux di solito si presenta cosi':

 ...
 drwxr-xr-x  14 root  root    291 Oct 25 18:47 opt
 dr-xr-xr-x  86 root  root      0 Dec 12  2000 proc <---
 drwx--x--x  16 root  root    841 Nov 20 00:10 root
 drwxr-xr-x   5 root  root   4627 Oct 15 11:42 sbin
 ...

Dato che /proc e' un file system virtuale, esso e' ricreato ogni volta che la macchina viene accesa, quindi la sua data/ora e' sempre aggiornata.

Usare /proc/sys per verificare/modificare i parametri del kernel

/proc/sys contiene molti parametri usati dal kernel di Linux/Unix, utilizzando questa directory, possiamo controllare e modificare alcuni di questi parametri. Per esempio se usiamo

 cat /proc/sys/net/ipv4/ip_forward

otteniamo "0" se l'ip forwarding e' disattivato ed "1" se e' attivato. Ma questa configurazione puo' essere modificata cambiando il contenuto dello stesso file.

Il contenuto di /proc

Il contenuto di /proc e' qualche cosa di simile a:

 $ ls /proc
 1 114 1210 1211 1212 1227 133 137 148 160 161 163 167 168 169
 170 171 172 173 174 186 190 193 194 195 203 206 207 208 209
 210 211 220 221 222 223 224 225 226 227 229 230 234 246 253 279
 296 3 4 5 500 501 6 667 668 669 683 684 685 7 711 712 713 737 763
 764 765 766 773 774 775 782 79 88 92 asound bus cmdline config.gz
 cpuinfo devices dma fb filesystems fs ide interrupts ioports
 kcore kcore_elf kmsg ksyms loadavg locks lvm mdstat meminfo
 memstat misc modules mounts net partitions pci rtc scsi self
 slabinfo stat swaps sys tty uptime version

Le directory "numeriche" sono i singoli processi in esecuzione nella macchina nell'istante in cui abbiamo fatto il nostro ls /proc. Prima di "vedere" il contenuto di ogni singola directory occorre essere root, questo perche' il processo puo' appartenere ad un diverso utente e quindi proibire l'accesso. Una volta ottenuto l'accesso, possiamo vedere il contenuto della directory:

 # ls -la /proc/114
 total 0
 dr-xr-xr-x   3 named    named      0 Nov 30 12:20 .
 dr-xr-xr-x  89 root     root       0 Nov 30  2000 ..
 -r--r--r--   1 root     root       0 Nov 30 12:20 cmdline
 lrwx------   1 root     root       0 Nov 30 12:20 cwd -> /var/named
 -r--------   1 root     root       0 Nov 30 12:20 environ
 lrwx------   1 root     root       0 Nov 30 12:20 exe -> /usr/sbin/named
 dr-x------   2 root     root       0 Nov 30 12:20 fd
 pr--r--r--   1 root     root       0 Nov 30 12:20 maps
 -rw-------   1 root     root       0 Nov 30 12:20 mem
 lrwx------   1 root     root       0 Nov 30 12:20 root -> /
 -r--r--r--   1 root     root       0 Nov 30 12:20 stat
 -r--r--r--   1 root     root       0 Nov 30 12:20 statm
 -r--r--r--   1 root     root       0 Nov 30 12:20 status 

Il contenuto delle varie directory e' praticamente lo stesso, indipendentemente dalla directory che scegliamo. Solo i valori dei singoli parametri cambiano a seconda del processo scelto.

Esaminare un processo

Esaminando i vari "file" contenuti all'interno della sottodirectory di /proc che identifica un processo possiamo scoprire varie cose relative al processo stesso:

 -r--r--r--   1 root     root      0 Nov30 12:20 cmdline

Questo contiene l'intera linea di comando invocata per avviare il processo. Il tutto e' ficcato dentro senza alcuno spazio e senza nessuna formattazione particolare.

 lrwx------   1 root     root      0 Nov 30 12:20 cwd -> /var/named 

questo e' un link simbolico alla directory di lavoro di quel particolare processo.

 -r--------   1 root     root      0 Nov 30 12:20 environ

questo contiene tutte le variabili di ambiente che sono definite per quel particolare processo, nella forma VARIABILE=valore. Come per cmdline, anche queste sono ficcate dentro senza nessuna formattazione ne' spazi tra i vari parametri.

 lrwx------   1 root     root      0 Nov 30 12:20 exe -> /usr/sbin/named

questo e' un link al file eseguibile che e' in esecuzione.

 dr-x------   2 root     root      0 Nov 30 12:20 fd

Questa directory contiene l'elenco dei file descriptors che sono usati dal processo in questione.

 pr--r--r--   1 root     root      0 Nov 30 12:20 maps

Questa pipe contiene la "mappa" delle aree di memoria che sono attualmente "mappate" a file su disco.

 lrwx------   1 root     root      0 Nov 30 12:20 root -> /

Questo link mostra quale e' la directory "root" per quel particolare processo. Un processo potrebbe avere una root che non corrisponde alla "vera" root.

 -r--r--r--   1 root     root      0 Nov 30 12:20 status

Questo file fornisce informazioni relative allo stato del processo, cioe' se e' "dormiente" o se sta' lavorando, il suo PID, UID, PPID ed altre informazioni simili. Queste informazioni sono le stesse che possono essere visualizzate usando ps e top.

Altre informazioni generiche riguardo /proc

/proc/cpuinfo Riporta informazioni sul processore, per esempio il tipo, marca, modello e le varie performance.

/proc/devices Elenca i driver configurati nel kernel corrente

/proc/dma Mostra quali canali DMA sono in uso al momento

/proc/filesystems Mostra i filesystem configurati (supportati) nel kernel

/proc/interrupts Visualizza gli interrupts in uso e quanti e quali sono stati usati.

/proc/ioports Mostra quali porte di i/o sono in uso al momento