Linux Filesystem Hierarchy: Versione 0.65 | ||
---|---|---|
Indietro | Capitolo 1. La gerarchia del filesystem Linux | Avanti |
/proc è una directory molto speciale poiché è anche un filesystem virtuale. A volte viene indicato come un sistema di pseudo-file per l'informazione sui processi. Non contiene file "reali" ma informazioni sul sistema mentre è in esecuzione (per esempio memoria di sistema, dispositivi montati, configurazione dell'hardware, etc.). Per questa ragione può essere considerato come un centro di controllo e di informazioni per il kernel. Infatti, diverse utilità di sistema sono delle semplici chiamate a file contenuti in questa directory; per esempio, il comando "lsmod" è lo stesso di "cat /proc/modules" mentre "lspci" è equivalente a "cat /proc/pci". Modificando i file contenuti in questa directory si possono anche leggere o modificare i parametri del kernel (sysctl) mentre il sistema è in esecuzione.
La cosa che più caratterizza i file di questa directory è il fatto che tutti hanno dimensione 0, ad eccezione di kcore, mtrr e self. Una lista del contenuto della directory appare simile a questa:
total 525256 dr-xr-xr-x 3 root root 0 Jan 19 15:00 1 dr-xr-xr-x 3 daemon root 0 Jan 19 15:00 109 dr-xr-xr-x 3 root root 0 Jan 19 15:00 170 dr-xr-xr-x 3 root root 0 Jan 19 15:00 173 dr-xr-xr-x 3 root root 0 Jan 19 15:00 178 dr-xr-xr-x 3 root root 0 Jan 19 15:00 2 dr-xr-xr-x 3 root root 0 Jan 19 15:00 3 dr-xr-xr-x 3 root root 0 Jan 19 15:00 4 dr-xr-xr-x 3 root root 0 Jan 19 15:00 421 dr-xr-xr-x 3 root root 0 Jan 19 15:00 425 dr-xr-xr-x 3 root root 0 Jan 19 15:00 433 dr-xr-xr-x 3 root root 0 Jan 19 15:00 439 dr-xr-xr-x 3 root root 0 Jan 19 15:00 444 dr-xr-xr-x 3 daemon daemon 0 Jan 19 15:00 446 dr-xr-xr-x 3 root root 0 Jan 19 15:00 449 dr-xr-xr-x 3 root root 0 Jan 19 15:00 453 dr-xr-xr-x 3 root root 0 Jan 19 15:00 456 dr-xr-xr-x 3 root root 0 Jan 19 15:00 458 dr-xr-xr-x 3 root root 0 Jan 19 15:00 462 dr-xr-xr-x 3 root root 0 Jan 19 15:00 463 dr-xr-xr-x 3 root root 0 Jan 19 15:00 464 dr-xr-xr-x 3 root root 0 Jan 19 15:00 465 dr-xr-xr-x 3 root root 0 Jan 19 15:00 466 dr-xr-xr-x 3 root root 0 Jan 19 15:00 467 dr-xr-xr-x 3 gdm gdm 0 Jan 19 15:00 472 dr-xr-xr-x 3 root root 0 Jan 19 15:00 483 dr-xr-xr-x 3 root root 0 Jan 19 15:00 5 dr-xr-xr-x 3 root root 0 Jan 19 15:00 6 dr-xr-xr-x 3 root root 0 Jan 19 15:00 7 dr-xr-xr-x 3 root root 0 Jan 19 15:00 8 -r--r--r-- 1 root root 0 Jan 19 15:00 apm dr-xr-xr-x 3 root root 0 Jan 19 15:00 bus -r--r--r-- 1 root root 0 Jan 19 15:00 cmdline -r--r--r-- 1 root root 0 Jan 19 15:00 cpuinfo -r--r--r-- 1 root root 0 Jan 19 15:00 devices -r--r--r-- 1 root root 0 Jan 19 15:00 dma dr-xr-xr-x 3 root root 0 Jan 19 15:00 driver -r--r--r-- 1 root root 0 Jan 19 15:00 execdomains -r--r--r-- 1 root root 0 Jan 19 15:00 fb -r--r--r-- 1 root root 0 Jan 19 15:00 filesystems dr-xr-xr-x 2 root root 0 Jan 19 15:00 fs dr-xr-xr-x 4 root root 0 Jan 19 15:00 ide -r--r--r-- 1 root root 0 Jan 19 15:00 interrupts -r--r--r-- 1 root root 0 Jan 19 15:00 iomem -r--r--r-- 1 root root 0 Jan 19 15:00 ioports dr-xr-xr-x 18 root root 0 Jan 19 15:00 irq -r-------- 1 root root 536809472 Jan 19 15:00 kcore -r-------- 1 root root 0 Jan 19 14:58 kmsg -r--r--r-- 1 root root 0 Jan 19 15:00 ksyms -r--r--r-- 1 root root 0 Jan 19 15:00 loadavg -r--r--r-- 1 root root 0 Jan 19 15:00 locks -r--r--r-- 1 root root 0 Jan 19 15:00 mdstat -r--r--r-- 1 root root 0 Jan 19 15:00 meminfo -r--r--r-- 1 root root 0 Jan 19 15:00 misc -r--r--r-- 1 root root 0 Jan 19 15:00 modules -r--r--r-- 1 root root 0 Jan 19 15:00 mounts -rw-r--r-- 1 root root 137 Jan 19 14:59 mtrr dr-xr-xr-x 3 root root 0 Jan 19 15:00 net dr-xr-xr-x 2 root root 0 Jan 19 15:00 nv -r--r--r-- 1 root root 0 Jan 19 15:00 partitions -r--r--r-- 1 root root 0 Jan 19 15:00 pci dr-xr-xr-x 4 root root 0 Jan 19 15:00 scsi lrwxrwxrwx 1 root root 64 Jan 19 14:58 self -> 483 -rw-r--r-- 1 root root 0 Jan 19 15:00 slabinfo -r--r--r-- 1 root root 0 Jan 19 15:00 stat -r--r--r-- 1 root root 0 Jan 19 15:00 swaps dr-xr-xr-x 10 root root 0 Jan 19 15:00 sys dr-xr-xr-x 2 root root 0 Jan 19 15:00 sysvipc dr-xr-xr-x 4 root root 0 Jan 19 15:00 tty -r--r--r-- 1 root root 0 Jan 19 15:00 uptime -r--r--r-- 1 root root 0 Jan 19 15:00 version
Ognuna delle directory numerate corrisponde a un ID di processo effettivo. Guardando la tabella dei processi si possono trovare le corrispondenze con gli ID di processo associati. Per esempio, la tabella dei processi per la secure shell server (sshd) potrebbe indicare quanto segue:
# ps ax | grep sshd 439 ? S 0:00 /usr/sbin/sshd
Si possono ottenere maggiori dettagli su questo processo guardando i file associati nella directory del processo /proc/460. Può sembrare strano che si possano vedere i dettagli di un processo il cui file ha una dimensione pari a 0; ha più senso se lo si vede come una "finestra" sul kernel. Il file in realtà non contiene alcun dato; agisce solo come un puntatore a dove risiedono realmente le informazioni sul processo. Per esempio, una lista dei file nella directory /proc/460 appare simile alla seguente:
total 0 -r--r--r-- 1 root root 0 Jan 19 15:02 cmdline lrwxrwxrwx 1 root root 0 Jan 19 15:02 cwd -> / -r-------- 1 root root 0 Jan 19 15:02 environ lrwxrwxrwx 1 root root 0 Jan 19 15:02 exe -> /usr/sbin/sshd dr-x------ 2 root root 0 Jan 19 15:02 fd -r--r--r-- 1 root root 0 Jan 19 15:02 maps -rw------- 1 root root 0 Jan 19 15:02 mem lrwxrwxrwx 1 root root 0 Jan 19 15:02 root -> / -r--r--r-- 1 root root 0 Jan 19 15:02 stat -r--r--r-- 1 root root 0 Jan 19 15:02 statm -r--r--r-- 1 root root 0 Jan 19 15:02 status
Lo scopo e i contenuti di ognuno di questi file è spiegato qui di seguito:
Argomenti da riga di comando.
L'attuale e l'ultima cpu nel quale è stato eseguito il processo.
Collegamento alla directory di lavoro corrente.
Valori delle variabili d'ambiente.
Collegamento agli eseguibili del processo.
Directory contenente tutti i descrittori dei file.
Mappe di memoria per gli eseguibili e per i file di libreria.
Memoria occupata dal processo.
Collegamento alla directory principale del processo.
Stato del processo.
Informazioni sullo stato della memoria del processo.
Stato del processo in forma leggibile.
Per saperne di più, la pagina man di proc descrive ognuno dei file associati a un ID del processo in esecuzione con maggior dovizia di particolari.
Anche se i file sembrano avere dimensione 0, l'esame dei loro contenuti rivela il contrario:
# cat status
Name: sshd State: S (sleeping) Tgid: 439 Pid: 439 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 32 Groups: VmSize: 2788 kB VmLck: 0 kB VmRSS: 1280 kB VmData: 252 kB VmStk: 16 kB VmExe: 268 kB VmLib: 2132 kB SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 8000000000001000 SigCgt: 0000000000014005 CapInh: 0000000000000000 CapPrm: 00000000fffffeff CapEff: 00000000fffffeff
I file nella directory /proc agiscono in modo molto simile ai file delle sottodirectory degli ID dei processi. Per esempio, esaminando il contenuto del file /proc/interrupts si vedrà qualcosa di simile:
# cat interrupts
CPU0 0: 32657 XT-PIC timer 1: 1063 XT-PIC keyboard 2: 0 XT-PIC cascade 8: 3 XT-PIC rtc 9: 0 XT-PIC cmpci 11: 332 XT-PIC nvidia 14: 5289 XT-PIC ide0 15: 13 XT-PIC ide1 NMI: 0 ERR: 0
Ciascun numero della colonna a sinistra rappresenta l'interrupt in uso. Nel file sono contenuti i dati associati, che possono essere visualizzati sullo schermo. La maggior parte dei file system /proc è di sola lettura; tuttavia in alcuni file si possono cambiare le variabili del kernel. Questo fornisce un meccanismo per rimodulare effettivamente il kernel senza doverlo ricompilare e riavviare il sistema.
Il programma di utilità procinfo fa un riepilogo delle informazioni sul file system /proc e le mostra sullo schermo come nel seguente esempio:
# /usr/bin/procinfo
Linux 2.4.18 (root@DEB) (gcc 2.95.4 20011002 ) #2 1CPU [DEB.(none)] Memory: Total Used Free Shared Buffers Cached Mem: 513908 107404 406504 0 2832 82180 Swap: 265032 0 265032 Bootup: Sun Jan 19 14:58:27 2003 Load average: 0.29 0.13 0.05 1/30 566 user : 0:00:10.26 2.3% page in : 74545 disk 1: 6459r 796w nice : 0:00:00.00 0.0% page out: 9416 disk 2: 19r 0w system: 0:00:19.55 4.5% swap in : 1 idle : 0:06:48.30 93.2% swap out: 0 uptime: 0:07:18.11 context : 22059 irq 0: 43811 timer irq 9: 0 cmpci irq 1: 1427 keyboard irq 11: 332 nvidia irq 2: 0 cascade [4] irq 12: 2 irq 6: 2 irq 14: 7251 ide0 irq 8: 3 rtc irq 15: 83 ide1
Informazioni sull'"Advanced power management".
Directory contenente le informazioni relative ai bus.
La riga di comando del kernel.
Informazioni sul processore, come il tipo, la marca, il modello e le prestazioni.
Lista dei driver di dispositivo configurati nel kernel attualmente in esecuzione (a blocchi e a caratteri).
Mostra i canali DMA in uso in un determinato momento.
In questa directory vengono raggruppate le informazioni relative a diversi driver, di solito rtc.
I dominî degli eseguibili, relativi alla sicurezza.
Dispositivi del Frame Buffer.
Un elenco di filesystem configurati nel kernel o supportati da esso.
I file conteneti i parametri del file system, di solito nfs/exports.
Questa sottodirectory contiene informazioni su tutti i dispositivi IDE riconosciuti dal kernel. Contiene una sottodirectory per ogni controller IDE, il file "drivers" e un collegamento per ogni dispositivo IDE che punta alla directory del dispositivo nel sottoalbero del controller. Il file "drivers" contiene informazioni generali sui driver usati per i dispositivi IDE. Si possono trovare informazioni più dettagliate nelle sottodirectory relative al singolo controller, le quali sono denominate ide0, ide1, e così via. Ognuna di queste directory contiene i seguenti file:
Canale IDE (0 o 1)
Configurazione (solo per bridge PCI/IDE)
Nome di mate (onchip partnered controller)
Type/Chipset del controller IDE
Ogni dispositivo connesso a un controller ha una sottodirectory separata nella directory dei controller. In queste directory sono contenuti i seguenti file:
La cache.
Capacità del supporto (in blocchi da 512 byte)
Driver e versione
Geometria fisica e logica
Blocco di identificazione del dispositivo
Tipo di supporto
Identificatore del dispositivo
Configurazione del dispositivo
Soglie per la gestione del disco IDE
Valori per la gestione del disco IDE
Mostra quali interrupt sono in uso e quante volte ciascuno di essi è stato chiamato.
Guardando nel file /proc/interrupts è possibile per esempio controllare quali interrupt sono attualmente in uso e per cosa sono stati usati:
# cat /proc/interrupts
CPU0 0: 8728810 XT-PIC timer 1: 895 XT-PIC keyboard 2: 0 XT-PIC cascade 3: 531695 XT-PIC aha152x 4: 2014133 XT-PIC serial 5: 44401 XT-PIC pcnet_cs 8: 2 XT-PIC rtc 11: 8 XT-PIC i82365 12: 182918 XT-PIC PS/2 Mouse 13: 1 XT-PIC fpu 14: 1232265 XT-PIC ide0 15: 7 XT-PIC ide1 NMI: 0
Nei kernel 2.4 e derivati erano state aggiunte un paio di righe a questo file LOC & ERR (questo è l'output di una macchina SMP):
# cat /proc/interrupts
CPU0 CPU1 0: 1243498 1214548 IO-APIC-edge timer 1: 8949 8958 IO-APIC-edge keyboard 2: 0 0 XT-PIC cascade 5: 11286 10161 IO-APIC-edge soundblaster 8: 1 0 IO-APIC-edge rtc 9: 27422 27407 IO-APIC-edge 3c503 12: 113645 113873 IO-APIC-edge PS/2 Mouse 13: 0 0 XT-PIC fpu 14: 22491 24012 IO-APIC-edge ide0 15: 2183 2415 IO-APIC-edge ide1 17: 30564 30414 IO-APIC-level eth0 18: 177 164 IO-APIC-level bttv NMI: 2457961 2457959 LOC: 2457882 2457881 ERR: 2155
NMI in questo caso è incrementato perché ogni interrupt del timer genera un NMI (Non Maskable Interrupt) che è usato dal NMI Watchdog per individuare i lookup.
LOC è il contatore dell'interrupt locale dell'APIC interno di ogni CPU.
ERR è incrementato nel caso di errori nel bus IO-APIC (il bus che connette le CPU in un sistema SMP). Questo vuol dire che è stato individuato un errore e il IO-APIC ritenta automaticamente la trasmissione, pertanto non dovrebbe essere un grosso problema; comunque è meglio leggere le SMP-FAQ.
In questo contesto sarebbe interessante osservare la nuova drectory irq nel kernel 2.4. Potrebbe essere usata per impostare l'affinità tra IRQ e CPU, cioè è possibile consentire al sistema di connettere un particolare IRQ a un'unica CPU, oppure escludere una CPU dalla gestione degli IRQ. Il contenuto della sottodirectory irq è una sottodirectory per ogni IRQ e un file, prof_cpu_mask. Per esempio,
# ls /proc/irq/ 0 10 12 14 16 18 2 4 6 8 prof_cpu_mask 1 11 13 15 17 19 3 5 7 9
# ls /proc/irq/0/ smp_affinity
Il contenuto del file prof_cpu_mask e di ciascun file smp_affinity relativo a ciascun IRQ è lo stesso in modo predefinito:
# cat /proc/irq/0/smp_affinity ffffffff
È un bitmask, nel quale si può specificare quali CPU possono gestire l'IRQ; possono essere impostate in questo modo:
# echo 1 > /proc/irq/prof_cpu_mask
Ciò vuol dire che solo la prima CPU gestisce l'IRQ, ma si può anche impostare con echo 5 che vuol dire che solo la prima e la quarta CPU possono gestire l'IRQ. Il modo in cui gli IRQ vengono instradati è gestito dal IO-APIC, e dal suo Round Robin fra tutte le CPU che possono gestirlo. Come al solito il kernel ha più informazioni dell'utente, e fa un lavoro migliore, per cui è sempre meglio quasi per tutti lasciare le impostazioni predefinite.
La mappa della memoria di sistema.
Le porte I/O attualmente in uso.
Le mask per l'affinità dell'irq con la cpu.
Informazioni sulle schede PnP (Plug&Play) di tipo ISA.
Un'immagine della memoria fisica del sistema; può essere in formato ELF o A.OUT (abbandonato nel kernel 2.4). Ha esattamente la stessa dimensione della memoria fisica, ma non occupa così tanto spazio; è generato in tempo reale al momento dell'accesso dei programmi alla memoria. Nota bene: a meno che non venga copiato da qualche altra parte, nessun file sotto /proc occupa spazio disco.
Messaggi di output del kernel. Questi sono inviati anche a syslog.
Tabella dei simboli per il kernel.
Il carico medio del sistema; tre indicatori che misurano l'attività del sistema negli ultimi 1, 5 e 15 minuti.
I file bloccati dal kernel.
Informazioni sull'utilizzo della memoria, sia fisica che di swap. Concatenando questo file si hanno risultati simili a quelli di "free" o delle prime righe di "top".
Informazioni di varia natura, che non trovano collocazione nel resto del filesystem proc.
I moduli del kernel correntemente caricati. Tipicamente ha il medesimo output del comando "lsmod".
I filesystem montati
Informazioni sugli mtrr. Sui processori Intel della famiglia P6 (Pentium Pro, Pentium II e successivi) gli MTRR (Memory Type Range Registers) possono essere usati per controllare gli accessi del processore a intervalli di memoria. L'utilità maggiore si ha sulle schede video (VGA) su bus PCI o AGP. L'abilitazione del write-combining permette di combinare i trasferimenti in scrittura sul bus in un trasferimento più grande prima che percorrano il bus PCI/AGP. Questo può incrementare le prestazioni sulle operazioni di scrittura di 2,5 volte o più. I processori Cyrix 6x86, 6x86MX e M II hanno gli ARR (Address Range Registers) che forniscono una funzionalità simile agli MTRR. Per questi, gli ARR sono usati per emulare gli MTRR. I processori AMD K6-2 (stepping 8 e superiore) e K6-3 hanno due MTRR. Questi sono supportati. L'AMD della famiglia Athlon fornisce 8 MTRR stile Intel. Il Centaur C6 (WinChip) ha 8 MCR che permettono il write-combining. Anche questi sono supportati. Le CPU VIA Cyrix III e VIA C3 forniscono 8 MTRR stile Intel. Per maggiori dettagli sulla tecnologia mtrr si veda il file /usr/src/linux/Documentation/mtrr.txt.
Informazioni sullo stato dei protocolli di rete.
I socket UDP (IPv6).
I socket TCP (IPv6).
Statistiche sul raw device (IPv6).
Gli indirizzi IP multicast a cui è collegato l'host (IPv6).
Elenco di indirizzi IPv6 delle interfacce di rete.
Tabella degli instradamenti del kernel per IPv6.
Statistiche globali sulla tabella degli instradamenti per IPv6.
Statistiche sui socket (IPv6).
Dati snmp (IPv6).
Tabella ARP del kernel.
Dispositivi di rete con statistiche.
I vari gruppi multicast Layer2 su cui ogni dispositivo è in attesa (indice di interfaccia, etichetta, numero di riferimenti, numero di indirizzi collegati).
Stato del dispositivo di rete.
Collegamento alle catene del firewall.
Nomi delle catene del firewall.
Directory contenente le tabelle di informazioni sul masquerading.
Tabella principale di informazioni sul masquerading.
Statistiche sulla rete.
Statistiche sui raw device.
La tabella di instradamento del kernel.
Directory contenente informazione sugli rpc.
La cache di instradamento.
Dati SNMP.
Statistiche sul socket.
I socket TCP.
Tabella di instradamento RIF token ring.
I socket UDP.
I socket del dominio UNIX.
I dati delle interfacce wireless (Wavelan etc).
Indirizzi IP multicast collegati da questo host.
Parametri globali del packet scheduler.
Elenco dei socket PF_NETLINK.
Elenco delle interfacce virtuali del protocollo multicast.
Elenco della cache di instradamento multicast.
Quest'informazione può essere usata per vedere quali periferiche di rete sono disponibili nel sistema e la quantità di traffico instradato su queste periferiche; inoltre ogni interfaccia Channel Bond ha la propria directory. Per esempio, la periferica bond0 avrà una directory chiamata /proc/net/bond0/, che contiene informazioni specifiche su quel bond, come gli slave correnti del bond, lo stato dei collegamenti degli slave e il numero di volte in cui il collegamento slave non ha avuto successo.
La directory /proc/parport contiene informazioni sulle porte parallele del sistema. Ha una sottodirectory per ogni porta, che prende il nome dal numero della porta (0,1,2,...).
Informazioni sugli ID di qualsiasi periferica IEEE-1284 che è stata acquisita.
Elenco dei driver di periferica che usano quella porta. Un segno + apparirà accanto al nome della periferica che sta correntemente usando la porta (potrebbe non apparire per niente).
Indirizzo base della porta parallela, linea di IRQ e canale DMA.
IRQ che parport sta usando per quella porta. Si trova in un file separato per consentirne la modifica scrivendovi un nuovo valore (numero di IRQ o nessuno).
Tabella delle partizioni riconosciute dal sistema
Informazioni sul bus PCI, spesso sottovalutate.
Real time clock
Se nel sistema è presente un adattatore host SCSI ci sarà in /proc/scsi una sottodirectory con lo stesso nome del driver per questo adattatore. Inoltre /proc/scsi contiene un elenco di tutti i dispositivi SCSI riconosciuti. La directory corrispondente al nome del driver ha un file per ogni adattatore trovato nel sistema. Questi file contengono informazioni sul controller, inclusi l'IRQ usato e l'intervallo di indirizzi. La quantità di informazione mostrata dipende dall'adattatore utilizzato.
Un collegamento simbolico alla directory dei processi del programma che sta guardando in /proc. Quando due processi guardano in /proc, ottengono collegamenti diversi. Serve principalmente per facilitare ai programmi il raggiungimento della loro directory dei processi.
Il file slabinfo fornisce informazioni sull'uso della memoria a livello dello slab. I kernel di Linux di versione superiore a 2.2 utilizzano i pool di slab per gestire la memoria oltre il livello di pagina. Gli oggetti comunemente utilizzati dispongono di pool di slab propri (come buffer di rete, directory cache, e così via).
Varie statistiche sul sistema, come il numero di errori di pagina da quando il sistema è stato avviato.
Utilizzo dello spazio di swap
Questa non è solo una fonte di informazioni, permette anche di cambiare i parametri all'interno del kernel senza bisogno di ricompilarlo e neanche riavviare il sistema. Bisogna farlo con molta attenzione perché può sia ottimizzare il sistema che renderlo instabile. Si consiglia di leggere sia la documentazione che i sorgenti prima di fare modifiche. Le voci in /proc possono differire leggermente a seconda della versione del kernel, per cui in caso di dubbio rivedere la documentazione del kernel nella directory /usr/src/linux/Documentation. In alcuni casi l'unica alternativa in caso di errore è quella di riavviare la macchina. Per cambiare un valore immettere semplicemente il nuovo valore nel file utilizzando il comando echo. Più avanti è riportato un esempio nella sezione dedicata ai dati del filesystem. Naturalmente tutte queste operazioni vanno eseguite come utente "root"; ci si può creare un proprio script di avvio per eseguirle ad ogni avvio del sistema.
Contiene i dati sul file system. Questa sottodirectory contiene informazioni specifiche sul file system, file handle, inode, dentry e quote.
Stato della directory della cache. Dal momento che i dati della directory vengono allocati e deallocati dinamicamente, questo file indica lo stato corrente. Contiene sei valori, dei quali gli ultimi due non vengono usati e sono sempre uguali a zero. Gli altri sono elencati qui di seguito:
File Contenuto nr_dentry Quasi sempre zero nr_unused Numero di voci della cache inutilizzate age_limit I secondi trascorsi i quali la voce può essere reclamata, quando la memoria è scarsa want_pages Ad uso interno
Il file dquot-max mostra il numero massimo di voci di quota disco memorizzate nella cache.
Mostra il numero di voci allocate nella quota disco e il numero di voci libere nella quota disco. Se il numero di voci di quota disco disponibili nella cache è molto basso e ci sono molti utenti che accedono al sistema simultaneamente, il limite potrebbe essere elevato.
Il kernel alloca i file handle dinamicamente, ma non li libera immediatamente. Il valore in file-max indica il numero massimo di handle che il kernel Linux può allocare. In caso si ripetuti messaggi di errore indicanti una carenza di file handle, questo limite può essere aumentato. Il valore predefinito è 4096. Per cambiarlo basta scrivere il nuovo numero nel file:
# cat /proc/sys/fs/file-max 4096 # echo 8192 > /proc/sys/fs/file-max # cat /proc/sys/fs/file-max 8192
Questo metodo di revisione è utile per tutti i parametri del kernel modificabili; basta inserire il nuovo valore nel file corrispondente col comando echo.
I tre valori in file-nr indicano il numero di file handle allocati, il numero di file handle usati e il numero massimo di file handle. Quando i file handle alloccati si avvicinano al massimo ma il numero degli handle attualmente usati ne è ancora lontano, si ha un picco nell'uso dei file handle e non c'è necessità di aumentare il massimo.
Come per i file handles, il kernel alloca le strutture degli inode dinamicamente, ma non può liberarli ancora.
Il valore in inode-max indica il numero massimo di inode handler. Questo valore dovrebbe essere da 3 a 4 volte più grande del valore in file-max, poiché stdin, stdout e i socket di rete richiedono anche una struttura inode per gestirli. Se capita spesso di avere scarsità di inode si dovrebbe incrementare questo valore.
Il file inode-nr contiene le prime due voci contenute in inode-state, così si può saltare la descrizione di questo file ...
inode-state contiene tre numeri reali e quattro valori fittizi. I numeri sono nr_inodes, nr_free_inodes, e preshrink (in ordine di apparizione).
Indica il numero degli inode allocati dal sistema, che può essere leggermente più alto rispetto a inode-max perché Linux gli alloca una pagina alla volta.
Rappresenta il numero degli inode liberi e preshrink è diverso da zero quando nr_inodes è maggiore di inode-max e il sistema deve ridurre la lista degli inode invece di allocarne di più.
Ancora, le strutture di superblocchi sono allocate dal kernel, ma non liberate. Il file super-max contiene il numero massimo di gestori di superblocchi, mentre super-nr mostra il numero di quelli correntemente allocati. Ogni file system montato necessita di un superblocco, così se si devono montare molti file system si dovrebbero incrementare questi numeri.
Questa directory gestisce il supporto del kernel per diversi formati binari; binfmt_misc fornisce al kernel la capacità di registrare formati binari addizionali senza bisogno di compilare un modulo aggiuntivo del kernel. Perciò binfmt_misc deve conoscere i magic number all'inizio o l'estensione del nome del file binario. Funziona mantenendo un elenco collegato di strutture che contengono una descrizione del formato binario, compreso il magic number con dimensione (o l'estensione del nome del file), offset e maschera, e il nome dell'interprete. A richiesta chiama l'interprete indicato col programma originale come argomento, come fanno binfmt_java, binfmt_em86 e binfmt_mz do. Poichè binfmt_misc non definisce nessun formato binario predefinito, ogni fomato binario aggiuntivo va registrato. In binfmt_misc ci sono due file generici e un file per ogni formato registrato. I due file generici sono register e status. Per registrare un nuovo formato binario bisogna dare il comando echo :nome:tipo:offset:magic:mask:interprete: > /proc/sys/fs/binfmt_misc/register con il nome appropriato (il nome per la voce di directory in /proc), il valore di offset, (il valore predefinito è 0, se non indicato), il magic number, il mask (che può essere omesso, 0xff è il valore predefinito per tutti) e da ultimo ma non meno importante, l'interprete da invocare (per esempio e per prova /bin/echo). Il tipo può essere M per il magic number o E per l'estensione (se si indica l'estensione invece che il magic number). Se si legge il file /proc/sys/fs/binfmt_misc/status con cat, si ottiene lo stato attuale (abilitato/disabilitato) di binfmt_misc. Si può cambiare lo stato inserendo col comando echo i valori 0 (disabilita), 1 (abilita) o -1 (attenzione: questo annulla tutti i formati binari precedentemente registrati) nel file status. Per esempio echo 0 > status per disabilitare binfmt_misc (temporaneamente). Ogni gestore registrato ha una voce in /proc/sys/fs/binfmt_misc. Questi file svolgono la stessa funzione di status ma il loro scopo è limitato al reale formato binario. Leggendo questo file con "cat" si possono ottenere tutte le informazioni collegate sull'interprete/magic number del binfmt. Un esempio sull'uso di binfmt_misc (emulazione di binfmt_java) è il seguente:
cd /proc/sys/fs/binfmt_misc echo ":Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:" > register echo ":HTML:E::html::/usr/local/java/bin/appletviewer:" > register echo ":Applet:M::<!--applet::/usr/local/java/bin/appletviewer:" > register echo ":DEXE:M::\x0eDEX::/usr/bin/dosexec:" < register
Queste quattro righe aggiungono il supporto per gli eseguibili e le applet Java (come binfmt_java, in più riconoscendo l'estensione .html senza bisogno di mettere <!--applet> a ogni file di applet). Si deve installare JDK e anche lo script di shell /usr/local/java/bin/javawrapper. Esso funziona aggirando la mancata gestione dei nomi dei file Java. Per aggiungere un binario Java basta creare un collegamento al file-classe da qualche parte del percorso.
Questa directory rispecchia il comportamento generale del kernel; i contenuti dipendono dalla configurazione specifica. Qui di seguito vengono elencati i file più importanti, con la spiegazione del loro significato e di come debbano essere usati.
Il file contiene tre valori; highwater, lowwater e frequency. Esiste solo se è abilitato l'accounting del processo in stile BSD. Questi valori controllano il suo comportamento. Se lo spazio libero sul file system dove risiede il registro scende al di sotto della percentuale di lowwater, l'accounting viene sospeso; se va al di sopra della percentuale di highwater, l'accounting riprende. Frequency determina la frequenza con cui viene controllata la quantità di spazio libero (il valore è in secondi). Impostazioni predefinite sono: 4, 2 e 30. Cioè, sospensione dell'accounting se c'è meno del 2 per cento libero, ripresa se tale valore è uguale o maggiore del 3 per cento, esame per 30 secondi delle informazioni sulla quantità di spazio libero valido.
Quando il valore in questo file è 0, ctrl-alt-del è intercettato da trap e inviato al programma init per gestire un riavvio corretto; quando invece il valore è maggiore di zero, la reazione di Linux a questa combinazione di tasti è un riavvio immediato, senza sincronizzazione dei dirty buffer. È da notare che quando un programma (come dosemu) ha la tastiera in modalità raw, la combinazione ctrl-alt-del viene intercettata dal programma prima di raggiungere il livello tty del kernel, e spetta al programma decidere cosa fare.
Questi file possono essere utilizzati per impostare il nome di dominio NIS e di host del computer. Per il classico darkstar.frop.org un semplice:
# echo "darkstar" > /proc/sys/kernel/hostname # echo "frop.org" > /proc/sys/kernel/domain:mnamedovrebbe essere sufficiente per impostare il nome di host e di dominio NIS.
I nomi sono alquanto indicativi del contenuto di questi campi:
# cat /proc/sys/kernel/osrelease 2.2.12 # cat /proc/sys/kernel/ostype Linux # cat /proc/sys/kernel/version #4 Fri Oct 1 12:41:14 PDT 1999.I file osrelease e ostype dovrebbero essere abbastanza chiari. Version necessita di qualche chiarimento; #4 vuol dire che è la quarta compilazione del kernel dalla base sorgente e la data che segue è la data di compilazione. L'unico modo per regolare questi valori è quello di ricompilare il kernel.
Il valore in questo file rappresenta il numero di secondi che il kernel attende prima di riavviarsi al verificarsi di un errore irreversibile. Quando si usa il software watchdog, l'impostazione raccomandata è 60. Se è impostato a 0, che è l'impostazione predefinita, il riavvio automatico dopo un "kernel panic" è disabilitato.
I quattro valori printk indicano rispettivamente: console_loglevel, default_message_loglevel, minimum_console_level e default_console_loglevel. Questi valori influenzano il comportamento di printk() nella visualizzazione o nella registrazione dei messaggi di errore provenienti dal kernel. Si veda syslog(2) per maggiori informazioni sui diversi "livelli di log".
I messaggi con una priorità più alta di questa verranno mostrati sulla console.
I messaggi senza una specifica priorità verranno visualizzati con questa priorità.
Il valore minimo (più alto) al quale può essere impostato il "livello di log della console".
Il valore predefinito del "livello di log della console".
Questo file mostra le dimensioni del buffer SCSI generico (sg). Modifiche al contenuto del file sono possibili solo in fase di compilazione aprendo il file include/scsi/sg.h e cambiando il valore di SG_BIG_BUFF. Se si usa uno scanner con SANE (Scanner Access Now Easy) si potrebbe impostarlo a un valore più alto. Far riferimento alla documentazione di SANE su questo argomento.
La posizione del file eseguibile di modprobe. Il kernel usa questo programma per caricare i moduli su richiesta.
I file in questa directory possono essere usati per regolare il funzionamento del sottosistema di memoria virtuale (VM) del kernel Linux. In aggiunta, uno dei file (bdflush) ha qualche influenza sul'utilizzo dei dischi.
Questo parametro governa il numero massimo di dirty buffer nella cache dei buffer. Dirty ("sporco") significa che il contenuto del buffer non è ancora stato scritto su disco (al contrario di un buffer pulito, di cui non parliamo). Impostare questo ad un valore più alto significa che Linux può ritardare la scrittura su disco per un lungo periodo, ma anche che dovrà eseguire molte operazioni di I/O alla volta quando la memoria scarseggia. Un valore più basso estende l'I/O del disco in modo più uniforme.
Ndirty assegna il numero massimo di dirty buffer per volta che bdflush può scrivere sul disco. Un valore alto significherà un I/O ritardato, dirompente, mentre uno piccolo potrebbe condurre ad una riduzione della memoria qualora bdflush non venga richiamato abbastanza spesso.
È il numero di buffer che bdflush aggiunge alla lista dei buffer liberi quando viene chiamato refill_freelist(); è necessario allocare i buffer liberi prima, dal momento che spesso i buffer sono di dimensioni diverse rispetto alle pagine di memoria e alcuni conteggi devono essere eseguiti anticipatamente. Più alto è il numero, più memoria verrà sprecata e meno spesso dovrà essere avviato refill_freelist().
Quando refill_freelist() incontra più di nref_dirt dirty buffer, risveglia bdflush.
Infine, i parametri age_buffer e age_super controllano il tempo massimo di attesa prima che Linux scriva un dirty buffer su disco. Il valore è espresso in jiffy (battiti di orologio), il numero di jiffy al secondo è uguale a 100. Age_buffer è la vita massima dei blocchi di dati (data blocks), mentre age_super è per i metadati del filesystem.
I tre valori in questo file controllano la quantità di memoria da utilizzare per la memoria buffer. La percentuale è calcolata come percentuale sulla memoria totale del sistema.
I valori sono:
La percentuale minima di memoria da utilizzzare come memoria buffer.
Quando Linux ha poca memoria a disposizione e la cache dei buffer ne usa più di quella concessa, il sottosistema della gestione della memoria (MM - memory management) inizierà a svuotare la cache dei buffer in modo più rapido rispetto al resto della memoria per compensare [la carenza di memoria lbera].
La quantità massima di memoria da utilizzare come memoria buffer.
Questo fie contiene tre valori: min, low e high:
Quando il numero di pagine libere nel sistema raggiunge questo numero solo il kernel può allocare una maggior quantità di memoria.
Se il numero di pagine libere va al di sotto di questo, il kernel inizia a usare la swap in modo aggressivo.
Il kernel prova a mantenere questa quantità di memoria libera: se la memoria scende al di sotto di questo punto, il kernel comincia a usare leggermente la swap nella speranza di non dover mai passare alla modalità aggressiva.
Kswapd è il demone del kernel per le operazioni di swap out; cioè kswapd è quella parte del kernel che libera memoria quando questa è frammentata o piena. Poiché ogni sistema è differente, è utile avere qualche controllo su questa parte del sistema.
Il file contiene tre numeri:
Il numero massimo di pagine [di memoria] che kswapd cerca di liberare in un singolo tentativo viene calcolato a partire da questo numero, il quale normalmente viene diviso per 4 o per 8 (si veda mm/vmscan.c), cosicché il numero delle pagine non è così grande come sembra. Quando serve una maggiore larghezza di banda da o per la swap è meglio aumentare questo numero.
Il numero minimo di tentativi che kswapd effettua per liberare una pagine ogni volta che viene chiamato. Fondamentalmente serve per assicurare che kswapd liberi alcune pagine anche quando è chiamato con priorità minima.
Questo valore è quello che probabilmente influisce maggiormante sulle prestazioni del sistema; swap_cluster è il numero di pagine alla volta che kswapd scrive. Questo valore dovrebbe essere abbastanza grande in modo che kswapd esegua le operazioni di I/O in blocchi piuttosto grandi, limitando il numero di ricerche sul disco, ma non troppo grande altrimenti sommergerà la coda delle richieste.
Questo file contiene un valore. Il seguente algoritmo viene usato per decidere se c'è abbastanza memoria: se il valore di overcommit_memory è positivo, viene sempre assegnata abbastanza memoria. Questa è una funzione utile, poiché spesso i programmi allocano grandi quantità di memoria anche quando ne usano solo una piccola parte. Lasciare questo valore a 0 porta a considerare come alloccata una grande quantità di memoria anche se di fatto il sistema ne ha a sufficienza per eseguire il programma. D'altra parte l'abilitazione di questa funzionalità può causare l'esaurimento della memoria e portare il sistema alla morte, perciò i server grandi o importanti dovrebbero impostare questo valore a 0.
Questo file fa esattamente lo stesso lavoro di buffermem, solo che questo file controlla la quantità di memoria concessa per la mappatura della memoria e per la cache generica dei file. Il livello minimo non dovrebbe essere troppo basso, altrimenti il sistema potrebbe avere dei contraccolpi quando la memoria è piena o la frammentazione è alta.
Il kernel mantiene un certo numero di page table in una cache per processore (questo è di grande aiuto nei sistemi SMP). La dimensione della cache per ogni processore oscilla tra un valore minimo e uno massimo. Su un sistema con poca memoria e con una sola CPU questi valori possono essere tranquillamente impostati a 0 per non sprecare memoria. Questo controllo è usato su sistemi SMP in modo che il sistema possa effettuare rapide allocazioni delle pagetable senza dover acquisire il memory lock dal kernel. Per sistemi di grandi dimensioni probabilmente è utile impostare questo controllo, per sistemi normali è indifferente, mentre per piccoli sistemi (con meno di 16MB di ram) può essere conveniente impostare entrambi i valori a 0.
Questo file contiene non meno di 8 variabili; tutti questi valori sono utilizzati da kswapd. Le prime quattro variabili, sc_max_page_age, sc_page_advance, sc_page_decline e sc_page_initial_age, sono usate per controllare l'invecchiamento delle pagine (page aging) di Linux. Il page aging è un metodo per tenere il conto delle pagine di memoria usate più spesso e per stabilire quali pagine possano essere spostate nella swap senza conseguenze.
Quando una pagina viene richiamata dalla swap assume il valore iniziale di sc_page_initial_age (quello predefinito è 3), quando la pagina viene controllata da kswapd il suo stato d'invecchiamento è regolato secondo lo schema seguente.
Se la pagina è stata usata dall'ultima volta che è stata controllata il suo valore è incrementato di un numero di unità pari a sc_page_advance (valore predefinito 3), fino a un valore massimo difinito da sc_max_page_age (predefinito 20); altrimenti (se non è stata usata) il suo valore d'invecchiamento viene diminuito di un numero di unità pari a sc_page_decline (predefinito 1).
Quando una pagina raggiunge il valore 0 è pronta per essere spostata nella swap.
Le variabili sc_age_cluster_fract, sc_age_cluster_min, sc_pageout_weight e sc_bufferout_weight possono essere usate per controllare l'aggressività di kswapd nel trasferire le pagine nella swap.
Sc_age_cluster_fract è usato per calcolare quante pagine di un processo devono essere controllate da kswapd. La formula utilizzata è
(sc_age_cluster_fract diviso per 1024) volte la "resident set size"
Se ad esempio si vuole che kswapd controlli l'intero processo sc_age_cluster_fract deve avere il valore di 1024. Il numero minimo di pagine che kswapd deve controllare è rappresenatato da sc_age_cluster_min, che è fatto in modo che kswapd controlli anche i piccoli processi. I valori di sc_pageout_weight e sc_bufferout_weight vengono usati per controllare il numero di tentativi che kswapd dovrà fare per spostare una pagina/buffer nella swap. Questi valori possono essere usati per calibrare il rapporto fra pagine utente e memoria buffer/cache. Se ci si accorge che il sistema Linux sta spostando troppe pagine di processo, per soddisfare le richieste di memoria buffer si può aumentare il valore di sc_bufferout_weight, o diminuire quello di sc_pageout_weight.
Parametri specifici per i dispositivi. Attualmente c'è solo il supporto per le unità CDROM, e per quelle c'è solo un file di sola lettura contenente informazioni sulle unità CD-ROM collegate al sistema:
>cat /proc/sys/dev/cdrom/info CD-ROM information, Id: cdrom.c 2.55 1999/04/25 drive name: sr0 hdb drive speed: 32 40 drive # of slots: 1 0 Can close tray: 1 1 Can open tray: 1 1 Can lock tray: 1 1 Can change speed: 1 1 Can select disk: 0 1 Can read multisession: 1 1 Can read MCN: 1 1 Reports media changed: 1 1 Can play audio: 1 1Si possono vedere due unità, sr0 e hdb, con un elenco delle loro caratteristiche.
Questa directory contiene quattro file, che abilitano o disabilitano il debugging per le funzioni RPC per NFS, per il demone NFS, per RPC e per NLM. I valori predefiniti sono pari a 0; possono essere impostati a uno per attivare il debugging (il valore predefinito è 0 per tutti).
L'nterfaccia alle parti del kernel che riguardano la rete si trova nella directory proc/sys/net. La seguente tabella mostra tutte le possibili sottodirectory; a seconda della configurazione del kernel è possibile che nel sistema in uso se ne vedano solo alcune. Ci concentreremo principalmente sulle reti IP, dato che AX15, X.25 e DEC Net rivestono un ruolo marginale nel mondo di Linux; per una descrizione dettagliata dei parametri dei protocolli non trattati si rimanda alla documentazione online e ai sorgenti del kernel. In questa sezione verranno trattate le sottodirectory elencate in precedenza. Poiché i valori predefiniti sono adatti alla maggior parte delle necessità, non è necessario cambiarli.
Opzioni essenziali per la rete
L'impostazione predefinita per il buffer di ricezione del socket espressa in byte.
La dimensione massima del buffer di ricezione del socket in byte.
L'impostazione predefinita (espressa in byte) per il buffer di trasmissione del socket.
La dimensione massima del buffer di trasmissione del socket in byte.
Questi parametri vengono usati per limitare i messaggi di avvertimento scritti nel registro del kernel dal codice di rete. Essi applicano un limite di traffico (rate limit) in modo da rendere impossibile un attacco "denial of service"; più alto è il fattore di costo e meno messaggi verranno scritti. Message_burst controlla il ritmo con cui vengono emessi i messaggi. Le impostazioni predefinite limitano i messaggi di avvertimento a uno ogni cinque secondi.
Numero massimo di pacchetti che restano in coda nella parte di INPUT quando l'interfaccia riceve pacchetti ad una velocità maggiore di quella con cui il kernel può elaborarli.
La dimensione massima del buffer ausiliario consentita per socket. I dati ausiliari sono una sequenza di strutture struct cmsghdr con dati aggiunti.
Parametri per i socket del dominio Unix
In questa sottodirectory ci sono solo due file, che controllano il ritardo per la cancellazione e distruzione dei descrittori dei socket.
Impostazioni per IPV4. IP versione 4 è tuttora il protocollo più usato nelle reti Unix; verrà sostituito da IP versione 6 fra un paio d'anni, ma per il momento è lo standard di fatto per internet ed è usato nella maggior parte degli ambienti di rete in tutto il mondo. Vista l'importanza di questo protocollo, verrà esaminato in modo approfondito il sottoalbero che controlla il il comportamento del sottosistema Ipv4 del kernel Linux.
Per prime verranno descritte le voci in /proc/sys/net/ipv4.
Abilitano (1) o disabilitano (0) il kernel ad ignorare tutte le richieste di ICMP ECHO, o solo quelle verso indirizzi broadcast e multicast.
È utile far notare che se si accettano richieste ICMP echo con un indirizzo di destinazione broadcast/multicast la rete può essere utilizzata come un detonatore per attacchi "denial of service" sommergendo di pacchetti di richieste altri host.
Imposta limiti per l'invio di pacchetti ICMP a specifiche destinazioni. Un valore pari a zero disabilita tutte le limitazioni. Qualsiasi valore positivo imposta la velocità massima dei pacchetti in centesimi di secondo (su sistemi Intel).
Questo file contiene un numero: uno se l'host ha ricevuto la sua configurazione IP da RARP, BOOTP, DHCP o da un meccanismo simile, zero altrimenti.
TTL (Time To Live) per le interfacce IPv4. È semplicemente il massimo numero di nodi (hops) che un pacchetto può attraversare [prima di giungere a destinazione].
Abilita la riscrittura dinamica degli indirizzi del socket al cambio di indirizzo dell'interfaccia. È utile per interfacce dialup con indirizzi IP variabili.
Abilita o disabilita l'inoltro di pacchetti IP da un'interfaccia a un'altra. La modifica di questo valore reimposta tutti gli altri parametri ai loro valori predefiniti, che sono diversi a seconda che il kernel sia configurato come host o come router.
La gamma di porte utilizzata da TCP e UDP per scegliere la porta locale. Contiene due numeri, il primo rappresenta la porta locale più bassa, il secondo quella più alta. Il valore predefinito è 1024-4999; per sistemi con un alto utilizzo di porte dovrebbe essere cambiato in 32768-61000.
Parametro globale per disabilitare la ricerca del percorso MTU, può essere impostato a livello di socket dalle applicazioni o a livello di route.
Abilita o disabilita il debugging di IP masquerading.
Quantità massima di memoria utilizzata per riassemblare i frammenti IP. Quando un numero di byte di memoria pari a ipfrag_high_thrash è allocata a questo scopo, la gestione dei frammenti abbandonerà dei pacchetti fino al raggiungimento di ipfrag_low_thrash.
Tempo in secondi per il mantenimento in memoria di un frammento IP.
Questo file controlla l'uso del bit ECN negli header IPv4, questa è una nuova funzionalità riguardante l'Explicit Congestion Notification, ma alcuni router e firewall bloccano il traffico che ha questo bit impostato, per cui si potrebbe rendere necessario impostare /proc/sys/net/ipv4/tcp_ecn al valore 0 (col comando echo) per comunicare con questi siti. Per maggiori informazioni si può leggere RFC2481.
Compatibilità bug per bug con alcune stampanti difettose. In fase di ritrasmissione, tenta di inviare pacchetti di dimensioni maggiori per cercare di risolvere errori di trasmissione in alcuni stack TCP. Può essere disattivato impostandolo a zero.
Numero di volte che TCP ritrasmette un messaggio "keep alive" prima di considerare la connessione come interrotta.
La frequenza con la quale TCP invia messaggi "keep alive" quando keep alive è abilitato. Il valore predefinito è 2 ore.
Numero di volte che i pacchetti SYN iniziali di un tentativo di connessione TCP devono essere ritrasmessi. Non dovrebbe superare 255. Questo è solo il tempo limite per le connesioni in uscita, per le connessioni in ingresso il numero delle ritrasmissioni è definito da tcp_retries1.
Abilita la conferma selettiva dopo RFC2018.
Abilita le marcature orarie (timestamp) come definite in RFC1323.
Abilita l'interpretazione rigorosa RFC793 del campo dell'"urgent pointer" TCP. L'impostazione predefinita è l'uso dell'interpretazione compatibile BSD dell'urgent pointer che punta al primo byte dopo i dati urgent. L'interpretazione RFC793 punta all'ultimo byte dei dati urgent. L'abilitazione di quest'opzione può condurre a problemi di interoperabilità, ed è disabilitata in modo predefinito.
Valido solo se il kernel è stato compilato con l'opzione CONFIG_SYNCOOKIES. Emette syncooky quando la coda del backlog syn di un socket è piena. Questo è per evitare il comune "attacco syn flood". È disabilitato in modo predefinito. Si noti che il concetto di socket backlog è stato abbandonato. Ciò significa che il peer può non ricevere messaggi di errore attendibili da un server sovraccarico con i syncooky abilitati.
Abilita il window scaling come definito in RFC1323.
Il tempo di attesa in secondi per la ricezione di un FIN finale prima che il socket sia chiuso definitivamente. A stretto rigore questa è una violazione della specifica TCP, però è richiesta per prevenire attacchi "denial of service".
Indica quanti messaggi keep alive vengono inviati per slow timer run. Non dovrebbe essere impostato a un valore troppo alto per prevenire picchi.
Lunghezza della coda di backlog del socket. Sin dal kernel Linux 2.2 il backlog specificato in listen(2) specifica solo la lunghezza della coda di backlog dei socket già stabiliti. Quando arrivano più richieste di connessione Linux inizia a rilasciare pacchetti. Quando i syncooky sono abilitati i pacchetti continuano a ricevere risposta e la coda massima è effettivamente ignorata.
Definisce per quante volte viene ritrasmessa una risposta a una richiesta di connessione TCP prima di rinunciare.
Definisce per quante volte viene ritrasmesso un pacchetto TCP prima di rinunciare.
Qui si trova una sottodirectory per ogni interfaccia riconosciuta dal sistema e una directory denominata all. Le modifiche effettuate nella sottodirectory "all" hanno effetto su tutte le interfacce, mentre quelle apportate nelle altre sottodirectory hanno effetto su una sola interfaccia. Tutte le directory hanno le stesse voci:
Questo parametro stabilisce se il kernel accetta messaggi ICMP ridiretti o no. L'impostazione predefinita è "yes" se il kernel è configurato per un normale host, "no" se è configurato per un router.
I pacchetti instradati dalla sorgente (source routed) possono essere accettati o rifiutati. L'impostazione predefinita dipende dalla configurazione del kernel: "yes" per i router e "no" per gli host.
Accetta pacchetti con indirizzo d'origine 0.b.c.d non destinati all'host corrente come se fossere locali. Si suppone che un demone BOOTP relay intercetti e inoltri tali pacchetti. L'impostazione predefinita è 0.
Abilita o disabilita l'IP forwarding sull'interfaccia corrente.
Registra nel registro del kernel i pacchetti con indirizzi d'origine aventi instradamenti sconosciuti.
Esegue instradamenti multicast. Il kernel dev'essere compilato con CONFIG_MROUTE ed è richiesto un demone d'instradamento multicast.
Effettua (1) o non effettua (0) il proxy ARP.
Un valore intero che stabilisce se dev'essere eseguita la validazione dell'indirizzo di provenienza: 1 per si, 0 per no. È disabilitato in modo predefinito, ma lo spoofing sugli indirizzi local/broadcast è sempre attivo. Se viene impostato a 1 su un router che è l'unica connessione della rete a internet, impedisce attacchi di spoofing alle reti interne (gli indirzzi esterni sono ancora soggetti allo spoofing) senza bisogno di regole aggiuntive per il firewall.
Accetta messaggi ICMP ridiretti solo per i gateway elencati nella lista dei gateway predefiniti. È abilitato in modo predefinito.
Se non è impostato il kernel non considera che diverse sottoreti su questo dispositivo possano comunicare direttamente. L'impostazione predefinita è "yes".
Stabilisce se inviare messaggi di ridirezione ICMP agli altri host.
La directory /proc/sys/net/ipv4/route contiene diversi file per controllare le specifiche di instradamento.
Questi parametri sono usati per limitare i messaggi di avvertimento scritti sul registro del kernel dal codice d'instradamento. Più grande è il fattore error_cost e meno messaggi verranno scritti. Error_burst controlla la frequenza con la quale vengono emessi i messaggi. L'impostazione predefinita limita i messaggi di avvertimento a uno ogni cinque secondi.
La scrittura in questo file comporta lo svuotamento della cache d'instradamento.
Valori per controllare la frequenza e il comportamento dell'algoritmo di "garbage collection" per la cache di instradamento.
La dimensione massima della cache d'instradamento. Le vecchie voci verranno eliminate una volta che la cache raggiunge questa dimensione.
Ritardi per lo svuotamento della cache d'instradamento.
Fattori che stabiliscono se più messaggi ICPM di ridirezione devono essere inviati ad un host specifico. Non verranno inviati messaggi di ridirezione una volta raggiunto il limite di carico o il numero massimo di messaggi.
Tempo limite per i messaggi di ridirezione. Dopo questo periodo i messaggi verranno inviati di nuovo, anche se sono stati interrotti, perché è stato raggiunto il limite di carico o di numero.
Network Neighbor handling. Contiene le impostazioni su come gestire le connessioni con i direct neighbors (nodi attaccati allo stesso collegamento). Come già visto per la directory conf, c'è una sottodirectory predefinita che gestisce i valori predefiniti, e una directory per ogni interfaccia. Il contenuto delle directory è identico, con la sola eccezione che le impostazioni predefinite contengono opzioni aggiuntive per impostare i parametri di "garbage collection".
Nelle directory delle interfacce si trovano le seguenti voci:
Un valore di base usato per calcolare il valore casuale del tempo di raggiungibilità come specificato in RFC2461.
Il tempo, espresso in jiffy (1/100 sec), fra messaggi Neighbor Solicitation ritrasmessi. Viene usato per la risoluzione degli indirizzi e per determinare se un vicino (neighbor) è irraggiungibile.
Lunghezza massima della coda di una richiesta arp pendente - il numero di pacchetti che sono accettati da altri strati mentre l'indirizzo ARP è ancora risolto.
Massimo ritardo casuale delle risposte ai messaggi neighbor solicitation in jiffy (1/100 sec). Non ancora implementato (Linux non ha ancora il supporto per anycast).
Numero massimo di tentativi per i solleciti unicast.
Numero massimo di tentativi per i solleciti multicast.
Ritardo per il primo tentativo di verifica se il "neighbor" è raggiungibile. (si veda gc_stale_time)
Una voce ARP/neighbor è sostituita con una nuova solo se è più vecchia di almeno locktime. Questo previene lo svuotamento della cache ARP.
Tempo massimo (il tempo reale è casuale [0..proxytime]) prima che venda data risposta a una richiesta ARP per la quale c'è una voce nel proxy ARP. In alcuni casi è usato per prevenire intasamenti sulla rete.
Lunghezza massima della coda del timer del ritardo del proxy arp (si veda proxy_delay).
Stabilisce il numero massimo di richieste da inviare al demone ARP a livello utente. Usare 0 per disabilitarlo.
Stabilisce la frequenza con la quale debbano essere verificate le voci ARP scadute. Dopo che una voce ARP è scaduta, viene risolta nuovamente (il che è utile quando un indirizzo IP migra verso un'altra macchina). Quando ucast_solicit è maggiore di 0, prima tenta di inviare un pacchetto ARP direttamente all'host conosciuto, se non ha successo e mcast_solicit è maggiore di 0, viene inviata una richiesta ARP a tutta la rete.
Contiene i dati di configurazione di Appletalk quando questo è caricato. I parametri configurabili sono:
Il periodo di tempo durante il quale una voce ARP viene mantenuta prima che scada. Usato per dichiarare scaduti i vecchi host.
La quantità di tempo a disposizione per tentare di risolvere un indirizzo Appletalk.
Numero di volte che una richiesta viene ritrasmessa prima di rinunciare.
Controlla la frequenza con la quale vengono controllate le voci in scadenza.
Tiene la lista dei socket Appletalk attivi sulla macchina. I campi indicano il tipo DDP, l'indirizzo locale (nel formato network:node), l'indirizzo remoto, la dimensione della coda in attesa di trasmissione, la dimensione della coda in ricezione (byte in attesa di essere letti dalle applicazioni), lo stato e il uid proprietrio del socket.
Elenca tutte le interfacce configurate per appletalk. Mostra il nome dell'interfaccia, il suo indirizzo Appletalk, l'intervallo di rete per quell'indirizzo (o numero di rete per le reti di fase 1) e lo stato dell'interfaccia.
Elenca tutti gli instradamenti di rete noti. Elenca il punto d'arrivo (rete) dell'instradamento, il router (può essere connesso direttamente), i flag dell'instradamento e il dispositivo in uso per l'instradamento.
Il protocollo IPX non ha valori regolabili in proc/sys/net, per far questo fornisce la directory proc/net/ipx, la quale elenca i socket IPX che danno gli indirizzi locali e remoti in formato Novell (cioè network:node:port). In accordo con l'insolita tradizione Novell, ogni cosa tranne la porta è in formato esadecimale. Per i socket che non sono legati ad uno specifico indirizzo remoto viene visualizzato Not_Connected. La dimensione delle code Tx e Rx indicano il numero di byte in attesa di trasmissione e ricezione; state indica lo stato in cui si trova il socket e uid è l'uid proprietario del socket.
Elenca tutte le interfacce IPX. Per ogni interfaccia fornisce il numero di rete, numero di nodo e indica se è la rete primaria. Indica anche a quale dispositivo è connesso (o Internal per reti interne) e il tipo di frame se appropriato. Linux supporta 802.3, 802.2, 802.2 SNAP e il framing ethernet DIX (Blue Book) per IPX.
È una tabella contenente una lista degli instradamenti IPX. Per ogni instradamento fornisce la rete di destinazione, il nodo del router (o Directly) e l'indirizzo di rete del router (o Connected per le reti interne).
Informazioni sulle risorse di SysVIPC (msg, sem, shm) (2.4)
Nella directory /proc/tty si possono trovare le informazioni sui dispositivi tty disponibili ed effettivamente in uso. In questa directory si trovano voci per i driver e per le discipline di linea.
Un elenco di driver e il loro utilizzo.
Discipline di linea registrate.
Statistiche sull'utilizzo e lo stato di singole linee tty.
Per vedere quali dispositivi tty sono correntemente in uso è sufficiente dare uno sguardo al file /proc/tty/drivers:
# cat /proc/tty/drivers serial /dev/cua 5 64-127 serial:callout serial /dev/ttyS 4 64-127 serial pty_slave /dev/pts 143 0-255 pty:slave pty_master /dev/ptm 135 0-255 pty:master pty_slave /dev/pts 142 0-255 pty:slave pty_master /dev/ptm 134 0-255 pty:master pty_slave /dev/pts 141 0-255 pty:slave pty_master /dev/ptm 133 0-255 pty:master pty_slave /dev/pts 140 0-255 pty:slave pty_master /dev/ptm 132 0-255 pty:master pty_slave /dev/pts 139 0-255 pty:slave pty_master /dev/ptm 131 0-255 pty:master pty_slave /dev/pts 138 0-255 pty:slave pty_master /dev/ptm 130 0-255 pty:master pty_slave /dev/pts 137 0-255 pty:slave pty_master /dev/ptm 129 0-255 pty:master pty_slave /dev/pts 136 0-255 pty:slave pty_master /dev/ptm 128 0-255 pty:master pty_slave /dev/ttyp 3 0-255 pty:slave pty_master /dev/pty 2 0-255 pty:master /dev/vc/0 /dev/vc/0 4 0 system:vtmaster /dev/ptmx /dev/ptmx 5 2 system /dev/console /dev/console 5 1 system:console /dev/tty /dev/tty 5 0 system:/dev/tty unknown /dev/vc/%d 4 1-63 console
Da notare che mentre i file di cui si è parlato tendono a essere file di testo facilmente leggibili, in alcuni casi possono essere formattati in modo non facilmente comprensibile. Ci sono molti comandi che fanno poco più che leggere i file di cui sopra e formattarli per essere comprensibili. Per esempio il programma free legge /proc/meminfo e converte le quantità espresse in byte in kilobyte (e aggiunge anche qualche informazione in più).
Indica per quanto tempo il sistema è rimasto in funzione.
La versione del kernel.
Informazioni BTTV sulle risorse video.