Articoli Manifesto Tools Links Canali Libri Contatti ?
Linux

Il filesystem virtuale /proc

Abstract
How To sulle potenzialità offerte da /proc.
In questa breve guida vedremo come si possono ottenere informazioni importanti sul nostro sistema sfruttando il file system virtuale /proc (presente in tutte le distribuzioni Linux).
Data di stesura: 12/01/2004
Data di pubblicazione: 14/06/2004
Ultima modifica: 04/04/2006
di Nicola Fioretti Discuti sul forum   Stampa

In collaborazione con Altinum LUG

Che cos'è /proc

Come già saprete il cuore di un sistema operativo Linux è il kernel. Il compito del kernel infatti è quello di dialogare con l' hardware di cui disponete sulla vostra macchina, di controllare e organizzare lo stato dei processi e di gestire tutte quelle operazioni di basso livello necessarie al funzionamento di un sistema operativo.

Molte volte, per necessità o per semplice curiosità, è utile controllare fattori come lo stato delle periferiche hardware, lo stato della memoria, del processore, dei dischi e via dicendo...

Come avrete notato nel corso della vostra esplorazione del filesystem di Linux, esiste una "directory" chiamata /proc che contiene una serie di file e sottodirectory dai nomi un po' bizzarri e alquanto insoliti.

Innanzitutto è bene dire che /proc non è una vera e propria directory, anche se a prima vista lo sembrerebbe e se vogliamo dirla tutta non è neanche vero che esista fisicamente sul vostro hard disk. Quando parliamo di /proc dobbiamo sapere che ci troviamo di fronte ad un così detto filesystem virtuale, cioè un filesystem che viene creato dinamicamente dal sistema stesso.

Cosa troviamo all'interno di /proc ?

All'interno di /proc troviamo tutte le informazione di cui abbiamo bisogno e molto probabilmente molte di più di quelle di cui abbiamo realmente bisogno.

I file contenuti in /proc ci consentono di tenere sotto controllo tutti i parametri di sistema e le periferiche hardware del nostro sistema.

Se ad esempio vogliamo ottenere delle informazioni sul nostro processore non dobbiamo far altro che digitare:

cat /proc/cpuinfo

ed otterete un output molto simile a questo:

processor       : 0
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
model           : 6
model name      : AMD Athlon(tm) XP 1600+
stepping        : 2
cpu Mhz         : 1395.595
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov
pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow
bogomips        : 2785.28

Ovviamente è possibile utilizzare la ridirezione dell'output per salvare le informazioni ottenute su un file di testo, in questo caso dovrete digitare:

cat /proc/cpuinfo > file_destinazione

Un altro esempio interessante potrebbe essere il comando

cat /proc/meminfo

che vi mostrerà tutte le informazioni sulla vostra memoria, come riportato nell'esempio di output qui riportato:

        total:    used:    free:  shared: buffers:  cached:
Mem:  527851520 242237440 285614080    0 10072064 160202752
Swap: 509956096 0 509956096
MemTotal:       515480 kB
MemFree:        278920 kB
MemShared:           0 kB
Buffers:          9836 kB
Cached:         156448 kB
SwapCached:          0 kB
Active:          72924 kB
Inactive:       146928 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       515480 kB
LowFree:        278920 kB
SwapTotal:      498004 kB
SwapFree:       498004 kB

Se avete ancora provato a digitare il comando free noterete la somiglianza dell'output che le due diverse procedure vi mostrano. Infatti tutti i comandi come free e simili, non fanno altro che andare a leggere le informazioni contenute all'interno di /proc e riproporvele magari modificando leggermente la formattazione del testo e qualche altro piccolo accorgimento per rendere il tutto più snello e pratico a livello presentazione dei dati ottenuti.

Un esempio dell'output ottenuto lanciando il comando free è riportato qui sotto. Come potete notare l'output sopra riportato e quello seguente sono molto simili in termini di contenuti (ovviamente l'output di /proc/meminfo è molto più completo e dettagliato).

             total       used       free     shared    buffers     cached
Mem:        515480     266952     248528          0      12140     174288
-/+ buffers/cache:      80524     434956
Swap:       498004          0     498004

Ottenere informazioni sulle periferiche hardware

Il filesystem proc permette di tenere sotto controllo le periferiche installate sulla macchina (utile particolarmente nel caso riscontraste dei problemi di vario genere). Uno dei file sicuramente più utili a tale scopo è ioports che ci permette di visualizzare la lista dei range di porte di I/O che vengono utilizzate dalle periferiche di sistema. L'analisi di questo file può tornare utile in caso di conflitti tra periferiche.

Un altro file degno di attenzione è il file interrupts che è in grado di mostrarvi gli interrupt utilizzati dalle periferiche del sistema, riportando il numero di volte che ognuno di essi è stato invocato dall'ultimo avvio del sistema.

Ottenere informazioni sui dischi

Le informazioni riguardanti i dischi rigidi e le periferiche IDE, installate nel sistema, sono contenute all'interno della directory /proc/ide. All'interno di tale directory troviamo un file che contiene tutte le informazioni sullo stato delle periferiche IDE. Questo file non ha un nome fisso, ma cambia a seconda del chipset utilizzato dalla vostra macchina. La mia macchina ad esempio possiede un chipset VIA e quindi tale file si chiamerà di conseguenza via

Lanciando il comando

cat /proc/ide/<nome_chipset>

ovvero

cat /proc/ide/via

(nel mio caso), otterrete un output molto simile a questo:

----------VIA BusMastering IDE Configuration----------------
Driver Version:                     3.37
South Bridge:                       VIA vt82c686b
Revision:                           ISA 0x40 IDE 0x6
Highest DMA rate:                   UDMA100
BM-DMA base:                        0xd000
PCI clock:                          33.3MHz
Master Read Cycle IRDY:             0ws
Master Write Cycle IRDY:            0ws
BM IDE Status Register Read Retry:  yes
Max DRDY Pulse Width:               No limit
-----------------------Primary IDE-------Secondary IDE------
Read DMA FIFO flush:          yes                 yes
End Sector FIFO flush:         no                  no
Prefetch Buffer:              yes                 yes
Post Write Buffer:            yes                  no
Enabled:                      yes                 yes
Simplex only:                  no                  no
Cable Type:                   80w                 40w
-------------------drive0----drive1----drive2----drive3-----
Transfer Mode:       UDMA       DMA      UDMA       PIO
Address Setup:       30ns      30ns      30ns     120ns
Cmd Active:          90ns      90ns      90ns      90ns
Cmd Recovery:        30ns      30ns      30ns      30ns
Data Active:         90ns      90ns      90ns     330ns
Data Recovery:       30ns      30ns      30ns     270ns
Cycle Time:          20ns     120ns      60ns     600ns
Transfer Rate:   99.9MB/s  16.6MB/s  33.3MB/s   3.3MB/s

Come potete notare l'output sopra riportato ci fornisce delle informazioni sullo stato dei dischi rigidi e indicando, che almeno nel mio caso, il mio hard disk (indicato con drive0) supporta l'ultra DMA (UDMA) dando così la possibilità di trasferire fino ad un massimo di 99,9 Mb/s.

Se vogliamo però ottenere informazioni più dettagliate sullo stato di uno specifico dispositivo IDE, troviamo delle sottodirectory (sotto /proc/ide) per ogni canale IDE, chiamate ide0, ide1 ecc. , dove ide0 sta per il primo canale IDE e ide1 per il secondo.

A sua volta sotto ognuna di queste sottodirectory (che sono /proc/ide/ideX) è presente un ulteriore sottodirectory relativa ad ogni singolo dispositivo all'interno della quale ci sono informazioni riguardanti il singolo dispositivo in questione.

Vediamo quali file sono contenuti in tali directory (/proc/ide/ide0/hda ad esempio):

  • model: Contiene informazioni sul modello del dispositivo
  • capacity: Contiene informazioni sulla sua capacità (espressa in blocchi da 512 byte)

Ad esempio l' hard disk montato sulla mia macchina ha capacità pari a 40Gb e un semplice

cat /proc/ide/ide0/hda/capacity

mi ritorna il seguente output:

78177792

Ottenere informazioni sui processi

/proc però non contiene solamente informazioni sull' hardware e le varie periferiche ma al contrario è in grado di fornire informazioni anche sui processi (programma in esecuzione) attivi. All'interno di /proc esistono infatti delle sottodirectory il cui nome è un numero. Ogni directory contiene le informazioni su un processo ed esattamente sul processo il cui PID (Process ID -Numero univoco che identifica un processo in esecuzione in ambienti Linux) è uguale al nome della directory stessa.

È interessante notare come il proprietario di ognuna di queste directory è di fatto l'utente che ha lanciato tale processo.

Ad esempio possiamo visualizzare lo stato di uno dei processi, prendendolo a caso tra quelli presenti. La mia scelta è ricaduta sulla directory /proc/902 e visualizzo lo stato del processo il cui PID è uguale a 902 grazie a questo comando

cat /proc/920/status
Name:soffice.bin
State:S (sleeping)
Tgid:902
Pid:902
PPid:897
TracerPid:0
Uid:1000 1000 1000 1000
Gid:100 100 100 100
FDSize:256
Groups:100 4 6 10 11 101 102
VmSize: 120132 kB
VmLck: 0 kB
VmRSS: 64848 kB
VmData: 24816 kB
VmStk: 44 kB
VmExe: 340 kB
VmLib: 73448 kB
SigPnd:0000000000000000
SigBlk:0000000080000000
SigIgn:8000000000001000
SigCgt:00000003fbc064f7
CapInh:0000000000000000
CapPrm:0000000000000000
CapEff:0000000000000000

L'output ottenuto e sopra riportato mostra lo stato del processo preso in considerazione e mostrando una serie di informazioni che ne ritraggono i vari aspetti.

In ognuna di queste directory sono contenute altre informazioni interessanti, il consiglio è quello di darci un occhiata.

Concludiamo ...

In questa brevissima guida abbiamo esplorato quello che è il filesystem virtuale /proc.

Ovviamente il filesystem virtuale /proc offre molte più informazioni di quelle che sono state introdotte all'interno di questa breve guida e proprio per questo vi suggerisco di leggervi la manpage di proc, ottenibile lanciando da shell

man proc

oppure se lavorate con KDE, scrivendo nella barra degli indirizzi di konqueror il seguente URL

man:proc

Informazioni sull'autore

Nicola Fioretti, Altinum Linux Project

È possibile consultare l'elenco degli articoli scritti da Nicola Fioretti.

Altri articoli sul tema Linux.

Discuti sul forum   Stampa

Cosa ne pensi di questo articolo?

Discussioni

Questo articolo o l'argomento ti ha interessato? Parliamone.