The /proc directory | Cerca per titolo, autore, parola chiave | ||||||||
The /proc directory Autore: Federico Kereki. La directory Linux /proc è una strana bestia. Non esiste realmente, ma è possibile esplorarla. I suoi file, tutti di lunghezza pari a zero, non sono ne file binari, ne file testuali: nonostante ciò, è possibile aprirli ed esaminarli. Questa directory speciale contiene tutti i dettagli del sistema operatvo Linux sul quale è installata, inclusi il kernel, i processi, i parametri di configurazione. Lo studio della directory /proc offre la possibilità di imparare il funzionamento dei comandi Linux e di eseguire alcuni compiti di amministrazione del sistema. In Linux, tutto viene gestito come se fosse un file, anche le periferiche, che vengono salvate come file nella directory: /dev Sebbene potreste pensare che i file debbano essere o binari o testuali, la directory /proc contiene uno strano tipo di file: i file virtuali, file che possono essere listati, ma che, in realtà, non esistono sul disco fisso: il sistema operativo li crea al volo, non appena tentate di aprirli. Molti di questi file virtuali dichiarano una data di aggiornamento coincidente con la data corrente, proprio per indicare di essere mantenuti costantemente aggiornati. La stessa directory /proc viene creata ad ogni boot del sistema. Per esaminare i file contenuti nella cartella /proc, è necessario avere le credenziali dell'amministratore (root); alcuni dei file, come quelli legati ai processi in esecuzione, sono di proprietà dell'utente che ha lanciato il processo. La gran parte dei file virtuali sono di sola lettura, mentre alcuni sono sovrascrivibili e, in alcuni casi, permettono di modificare i parametri del kernel. La documentazione sul filesystem /proc è distribuita nei vari file sorgente del kernel. Le sottodirectory numerate di /proc corrispondono ai vari processi in esecuzione; un file speciale: self punta al processo corrente. Alcuni file virtuali contengono informazioni relative all'hardware, quali i file: /proc/cpuinfo /proc/meminfo /proc/interrupts Altri contengono informazioni sui file stessi, quali: /proc/filesystems /proc/partitions I file che si trovano in: /proc/sys contengono i parametri di configurazione del kernel. Molte utility accedono alla directory /proc per ottenere le loro informazioni. Per esempio, per sapere quale kernel stiamo utilizzando, possiamo utilizzare il comando: uname -srv oppure leggere (cat) il contenuto del file: /proc/version Un altro esempio: il comando: cat /proc/meminfo produce un output simile al seguente: MemTotal: 483488 kB MemFree: 9348 kB Buffers: 6796 kB Cached: 168292 kB ... che sono i dati restituiti da comandi quali: top free Altre directory interessanti sono: /proc/acpi una directory che contiene i dati della Advanced Configuration and Power Interface (configurazione e gestione energetica). Per sapere, per esempoio, se il vostro computer è connesso all'impianto elettrico (AC power), è sufficiente leggere il contenuto del file: /proc/acpi/ac_adapter/AC/state Il file: /proc/cmdline contiene i parametri passati al kernel in fase di boot del sistema operativo. Il file: /proc/loadavg contiene i dati di utilizzo della CPU, definiti come: "load average", calcolata negli ultimi 1, 5 e 15 minuti, numero di processi pronti all'esecuzione, confrontato con il numero totale dei processi presenti nel sistema, ID dell'ultimo processo eseguito dalla CPU. La definizione di "load average" potrebbe variare da sistema operativo a sistema operativo, ma dovrebbe rappresentare il numero di processi in esecuzione (running), oppure in coda per l'esecuzione (runnable), oppure in attesa (uninterruptible sleep) di un qualche input esterno (per esempio, dati provenienti dal disco fisso). Il file: /proc/stat contiene una serie approfondita di statistiche, mentre il file: /proc/uptime contiene solo due dati: il numero di secondi trascorsi dall'accensione del sistema e il numero di secondi di inattività (idle) dello stesso. Quando il sistema ha più processori, il secondo dato (idle state) può superare il primo (uptime), naturalmente. Il file: /proc/devices contiene l'elenco di tutte le periferiche di cui siano stati caricati i relativi moduli necessari alla loro corretta configurazione, con le periferiche a blocchi divise dalle pariferiche a caratteri, con ciascuna periferica preceduta dal major number. Il file: /proc/ioports contiene i range di indirizzi di memoria riservati alle operazioni di input/output per ciascuna periferica rilevata. Oltre ad altri file di periferica, quali: /proc/dma /proc/filesystems /proc/mounts troviamo una directory contenente tutte le informazioni di rete: /proc/net Descrivere tutti i file presenti in questa directory richiederebbe troppo tempo e spazio. Basti pensare al file: dev che contiene l'elenco delle periferiche di rete, oppure ai file contenenti informazioni su iptable e firewall, oppure statistiche di rete, oppure ancora sul traffico wireless. Tra i file di periferica, naturalmente, molti sono file dedicati alla memoria di sistema (RAM): /proc/meminfo /proc/iomem /proc/kcore Quest'ultimo è un file binario che è l'esatta rappresentazione della vostra RAM, con le dimensioni dell'intera RAM, a cui vengono aggiunti alcuni byte di overhead. Infine, all'interno della direcory /proc, troviamo i file relativi all'hardware di sistema, quali: /proc/interrupts /proc/irq /proc/pci /proc/bus Per quanto riguarda tutte le directory numerate, esse rappresentano ciascuna un singolo processo in esecuzione nel sistema. Quando un processo termina, la sua directory in: /proc scompare automaticamente. All'interno di ciascuna directory, trovate molti file, quali: cmdline che contiene il comando che ha avviato il processo, compresi tutti i parametri inviati; cwd che è un link simbolico (symlink) alla direcory di lavoro del processo; environ che contiene tutte le variabili d'ambiente create per il processo; fd che contiene i file descriptor creati per il processo, così da mostrare quali file o periferiche il processo sta utilizzando; maps statm mem che contengono informazioni sulla memoria utilizzata dal processo; stat status che contengono informazioni sullo stato del processo, con il secondo file molto più esaustivo e comprensibile del primo. L'insieme di questi file offre molte possibilità di interazione, via script, con i vari processi in esecuzione. Per esempio, se volete conoscere i processi zombie presenti nel sistema, potete effettuare una scansione di tutte le directory numerate, andando a leggere il file status di ciascun processo, per vedere se appare la riga "(Z) Zombie" al suo interno. Una volta volevo verificare se un determinato programma fosse in esecuzione: ho fatto una scansione di tutti i file: /cmdline alla ricerca della stringa desiderata (è possibile, certamente, fare la stessa verifica utilizzando il comando: ps ma questo non è il punto. Tra l'altro, ps preleva le informazioni proprio dalla directory /proc). La directory: /proc/sys non offre solo informazioni sul sistema, ma permette anche di impostare o modificare i parametri del kernel, abilitare o disabilitare funzionalità (naturalmente, a vostro rischio e pericolo, visto che l'operazione potrebbe rendere instabile il vostro sistema). Per sapere se un file è di sola lettura o se può essere modificato/configurato, eseguite il comando: ls -ld per verificare se esiste l'attributo "W" (write) a fianco del file di vostro interesse. Per modificare un file, utilizzate il comando: echo Per esempio, per impostare a 10 il valore contenuto in un file, eseguite: echo 10 >/proc/sys/vm/swappiness In questo esempio, abbiamo modificato il valore di swappiness del sistema, valore, compreso tra 0 e 100, che indica al sistema se e quanto affidarsi al meccanismo di swap: i valori più bassi, suggeriscono un minor utilizzo dello spazio di swap. Naturalmente, un minor utilizzo dello spazio di swap richiede una capacità di RAM superiore all'uso corrente. Naturalmente, le modifiche fatte in questo modo sono solo valide per la sessione corrente. Per renderle stabili, dovreste utilizzare: sysctl ed il suo file di configurazione: /etc/sysctl.conf Vediamo una parte del contenuto della directory /sys: /proc/sys/debug /proc/sys/dev /proc/sys/fs /proc/sys/kernel /proc/sys/net Tutte directory da maneggiare con estrema cura, ma che possono essere utili per gestire al meglio il nostro computer. Spendendo un po' di tempo ad imparare le possibilità offerte dalla directory /proc, potremmo configurare al meglio il nostro box Linux.
|
|||||||||
The /proc directory | Disclaimer: questo è un link a contenuti ospitati su server esterni. |