In collaborazione con
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:
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
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
(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:
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
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
oppure se lavorate con KDE, scrivendo nella barra degli indirizzi di konqueror il seguente URL