Gruppi comuni di informazioni relative al kernel vengono raccolti in directory e sottodirectory all'interno di /proc.
5.3.1. Directory del processo
Ciascuna directory di /proc contiene un numero di directory identificate con un numero. Un elenco di queste directory sar� simile al seguente:
dr-xr-xr-x 3 root root 0 Feb 13 01:28 1
dr-xr-xr-x 3 root root 0 Feb 13 01:28 1010
dr-xr-xr-x 3 xfs xfs 0 Feb 13 01:28 1087
dr-xr-xr-x 3 daemon daemon 0 Feb 13 01:28 1123
dr-xr-xr-x 3 root root 0 Feb 13 01:28 11307
dr-xr-xr-x 3 apache apache 0 Feb 13 01:28 13660
dr-xr-xr-x 3 rpc rpc 0 Feb 13 01:28 637
dr-xr-xr-x 3 rpcuser rpcuser 0 Feb 13 01:28 666
Queste directory vengono chiamate directory del processo, poich� si riferiscono all'ID di un processo e contengono informazioni specifiche relative a quel processo. Il proprietario e il gruppo di ciascuna di queste directory � impostato per l'utente che sta eseguendo quel dato processo. Una volta terminato, la sua directory /proc scompare.
Ciascuna directory del processo contiene i file seguenti:
cmdline — contiene gli argomenti della linea di comando che hanno dato inizio al processo.
cwd — collegamento simbolico con la directory attualmente in funzione per il processo.
environ — Fornisce un elenco delle variabili di ambiente per il processo. La variabile di ambiente viene data in caratteri maiuscoli e il valore in caratteri minuscoli.
exe — collegamento simbolico all'eseguibile di questo processo.
fd — directory contenente tutti i descrittori dei file per un particolare processo. Vengono forniti sotto forma di collegamenti numerati:
total 0
lrwx------ 1 root root 64 May 8 11:31 0 -> /dev/null
lrwx------ 1 root root 64 May 8 11:31 1 -> /dev/null
lrwx------ 1 root root 64 May 8 11:31 2 -> /dev/null
lrwx------ 1 root root 64 May 8 11:31 3 -> /dev/ptmx
lrwx------ 1 root root 64 May 8 11:31 4 -> socket:[7774817]
lrwx------ 1 root root 64 May 8 11:31 5 -> /dev/ptmx
lrwx------ 1 root root 64 May 8 11:31 6 -> socket:[7774829]
lrwx------ 1 root root 64 May 8 11:31 7 -> /dev/ptmx
maps — Contiene un elenco delle mappe di memoria per i vari eseguibili e per i file di libreria associati a questo processo. Questo file pu� essere piuttosto lungo, a seconda della complessit� del processo, in ogni caso un esempio di output tratto dal processo sshd inizia nel modo seguente:
mem — memoria occupata dal processo. Questo file non pu� essere letto dall'utente.
root — collegamento con la directory root del processo.
stat — stato del processo.
statm — stato della memoria utilizzata dal processo. I file statm hanno all'incirca questo aspetto:
263 210 210 5 0 205 0
Le sette colonne si riferiscono alle statistiche della memoria per il processo. Nell'ordine in cui sono disposte, da sinistra a destra, riportano diversi aspetti della memoria utilizzata:
Dimensione totale del programma, in kilobyte.
Dimensione delle porzioni di memoria, in kilobyte.
Numero di pagine condivise.
Numero di pagine che contengono programmi di codifica.
Numero di pagine di dati/stack.
Numero di pagine di libreria.
Numero di pagine marcate dirty.
status — Fornisce lo stato del processo in forma molto pi� leggibile rispetto a stat o statm. L'output per sshd ha un aspetto simile al seguente:
L'informazione in questo output include il nome del processo e l'ID, lo stato, come per esempio S (sleeping) o R(running), e l'ID dell'utente/gruppo che sta eseguendo il processo, e dati dettagliati relativi all'utilizzo della memoria.
5.3.1.1. /proc/self/
La directory /proc/self � un collegamento al processo attualmente in esecuzione. Consente al processo di autoesaminarsi senza dover conoscere il proprio ID.
All'interno di un ambiente shell, un elenco della directory /proc/self produce lo stesso contenuto di un elenco della directory per quel processo.
5.3.2. /proc/bus/
Questa directory contiene informazioni specifiche per i vari bus disponibili sul sistema. Per esempio, su di un sistema standard contenente bus PCI e USB, i dati correnti su ciascuno di questi bus sono disponibili all'interno della subdirectory sotto /proc/bus/ tramite lo stesso nome, come ad esempio /proc/bus/pci/.
Le subdirectory e i file disponibili all'interno di /proc/bus/ variano a seconda dei dispositivi collegati al sistema. Tuttavia, ogni tipo di bus possiede almeno una directory. All'interno di queste directory del bus, vi � normalmente almeno una subdirectory identificata da un numero, come ad esempio 001, la quale contiene file binari.
Per esempio, la subdirectory /proc/bus/usb contiene dei file che registrano i vari dispositivi su qualunque bus USB e i driver necessari per utilizzarli. Quanto segue rappresenta un esempio di elenco di una directory /proc/bus/usb/:
total 0
dr-xr-xr-x 1 root root 0 May 3 16:25 001
-r--r--r-- 1 root root 0 May 3 16:25 devices
-r--r--r-- 1 root root 0 May 3 16:25 drivers
La directory /proc/bus/usb/001/ contiene tutti i dispositivi sul primo bus USB e il file devices identifica un USB root hub sulla scheda madre.
Il seguente � un esempio di un file /proc/bus/usb/devices:
Questa directory contiene le informazioni per driver specifici usati dal kernel.
Un file comune qui trovato, � rtc, il quale fornisce l'output del driver per il Real Time Clock (RTC) del sistema, il dispositivo che segna il tempo quando il sistema � spento. L'output prodotto da /proc/driver/rtc ha un aspetto simile al seguente:
rtc_time : 16:21:00
rtc_date : 2004-08-31
rtc_epoch : 1900
alarm : 21:16:27
DST_enable : no
BCD : yes
24hr : yes
square_wave : no
alarm_IRQ : no
update_IRQ : no
periodic_IRQ : no
periodic_freq : 1024
batt_status : okay
Per maggiori informazioni sull'RTC, consultate la seguente documentazione:
Questa directory indica quali filesystem vengono esportati. Se si esegue un server NFS, potete digitare cat /proc/fs/nfs/exports per visualizzare i filesystem condivisi ed i permessi concessi a tali filesystem. Per ulteriori informazioni sulla condivisione dei filesystem con NFS, consultate Capitolo 9.
5.3.5. /proc/ide/
Questa directory contiene informazioni sui dispositivi IDE presenti sul sistema. Ogni canale IDE viene rappresentato come una directory separata, per esempio /proc/ide/ide0 e /proc/ide/ide1. � inoltre disponibile un file drivers, che fornisce il numero della versione dei vari driver utilizzati sui canali IDE:
ide-floppy version 0.99.newide
ide-cdrom version 4.61
ide-disk version 1.18
Molti chipset forniscono anche un file in questa directory, in grado di riportare dati aggiuntivi sulle unit� collegate attraverso i vari canali. Per esempio un chipset generico Intel PIIX4 Ultra 33 produce il file /proc/ide/piix che indicher� se i protocolli DMA o UDMA sono attivati per i dispositivi sui canali IDE:
Intel PIIX4 Ultra 33 Chipset.
------------- Primary Channel ---------------- Secondary Channel -------------
enabled enabled
------------- drive0 --------- drive1 -------- drive0 ---------- drive1 ------
DMA enabled: yes no yes no
UDMA enabled: yes no no no
UDMA enabled: 2 X X X
UDMA
DMA
PIO
Esplorando la directory in cerca di un canale IDE, come ide0, si possono ottenere informazioni aggiuntive. Il file channel fornisce il numero del canale, mentre model indica il tipo di bus per il canale (per esempio pci).
5.3.5.1. Directory del dispositivo
Nella directory del canale IDE � presente una directory dei dispositivi, il cui nome corrisponde alla lettera dell'unit� nella directory /dev. Per esempio, la prima unit� IDE su ide0 sar� hda.
Nota Bene
� presente un link simbolico per ogni directory presente all'interno di /proc/ide/.
Ciascuna directory dei dispositivi contiene una serie di informazioni e statistiche. Il contenuto delle directory varia a seconda del tipo di dispositivo collegato. Tra i file pi� utili comuni a diversi dispositivi si trovano:
cache — La cache del dispositivo.
capacity — capacit� del dispositivo, in blocchi di 512 byte.
driver — L'unit� e la versione usate per controllare il dispositivo.
geometry — geometria fisica e logica del dispositivo.
media — tipo di dispositivo, per esempio disk.
model — numero o nome del modello del dispositivo.
settings — Una raccolta dei parametri correnti del dispositivo. Di norma questo file contiene una discreta quantit� di informazioni tecniche piuttosto utili. Un esempio di file settings per un disco fisso IDE standard potrebbe avere un aspetto simile al seguente:
La directory � utilizzata per impostare l'affinit� tra IRQ e CPU, che consente al sistema di connettere un particolare IRQ a un'unica CPU. Oppure � possibile escludere una CPU dalla gestione degli IRQ.
Ciascun IRQ ha la propria directory, il che gli consente di essere configurato in modo diverso da tutti gli altri. Il file /proc/irq/prof_cpu_mask � un bitmask contenente i valori di default per il file smp_affinity all'interno della directory IRQ. I valori contenuti in smp_affinity specificano quali CPU gestiscono quel particolare IRQ.
Per maggiori informazioni sulla directory /proc/irq/, consultate la seguente documentazione:
Questa directory permette di osservare in modo completo i vari parametri e le varie statistiche della rete. Ogni directory e file virtuale all'interno di questa directory, descrive gli aspetti della configurazione di rete del sistema. Di seguito viene riportato un elenco parziale della directory /proc/net/:
arp — Contiene la tabella ARP del kernel. Questo file � particolarmente utile per collegare l'indirizzo hardware a un indirizzo IP su di un sistema.
atm — I file all'interno di questa directory contengono le impostazioni ATM (Asynchronous Transfer Mode, modalit� di trasferimento asincrona) e delle statistiche. Questa directory � usata soprattutto con il networking ATM e le schede ADSL.
dev — Elenca i vari dispositivi di rete configurati sul sistema, completi di statistiche di trasmissione e ricezione. Questo file indica il numero di byte inviati e ricevuti da ciascuna interfaccia, il numero di pacchetti in entrata ed in uscita, il numero di errori rilevati, il numero dei pacchetti persi e molto altro ancora.
dev_mcast — Elenca i vari gruppi multicast Layer2 su cui ogni dispositivo � in ascolto.
igmp — elenca gli indirizzi IP multicast a cui � collegato il sistema.
ip_conntrack — Elenca i collegamenti di rete tracciati, per macchine che effettuano l'inoltro dei collegamenti IP.
ip_tables_names — Elenca i tipi di iptables in uso. Questo file � solo presente se iptables � attivo sul sistema e contiene uno o pi� valori di seguito riportati: filter, mangle, o nat.
ip_mr_cache — elenca la cache del routing multicast.
ip_mr_vif — elenca le interfacce virtuali del protocollo multicast.
netstat — contiene una raccolta molto dettagliata di statistiche di networking, insieme ai servizi di temporizzazione TCP, ai SYN cookie inviati e ricevuti e molto altro.
psched — elenca i parametri dello schedulatore di pacchetti.
raw — elenco di statistiche del dispositivo a carattere.
route — Elenca la tabella di routing del kernel.
rt_cache — contiene la cache di routing corrente.
snmp — elenco di dati relativi al protocollo SNMP (Simple Network Management Protocol) per i vari protocolli di networking in uso.
sockstat — fornisce statistiche per il socket.
tcp — contiene informazioni dettagliate riguardo al socket TCP.
tr_rif — tabella di routing per il RIF token ring.
udp — contiene informazioni dettagliate riguardo al socket UDP.
unix — elenca i socket di dominio UNIX attualmente in uso.
wireless — elenca i dati relativi all'interfaccia wireless.
5.3.8. /proc/scsi/
Questa directory � analoga alla directory /proc/ide/, ma serve per i dispositivi SCSI collegati.
Il file principale contenuto in questa directory � /proc/scsi/scsi che contiene un elenco di tutti i dispositivi SCSI riconosciuti. In questo elenco � disponibile il tipo di dispositivo, il nome del modello, il fornitore, il canale SCSI e i dati ID.
Per esempio, se un sistema contiene un CD-ROM SCSI, una unit� a nastro, un disco fisso e un controller RAID, questo file sar� simile al seguente:
Ciascun dispositivo SCSI utilizzato dal sistema, ha la propria directory all'interno di /proc/scsi/, il quale contiene i file specifici di ogni controller SCSI che utilizza quel driver. Dunque, dall'esempio precedente, sono presenti le directory aic7xxx/ e megaraid/ poich� vengono utilizzati i due driver. I file di ciascuna delle directory contengono, di norma, la gamma dell'indirizzo I/O, le informazioni IRQ e le statistiche relative al controller SCSI che utilizza quel driver. Ogni controller pu� riportare un diverso tipo e una diversa quantit� di informazioni. Il file dell'adattatore per host Adaptec AIC-7880 Ultra SCSI per il sistema preso come esempio produce il seguente output:
Adaptec AIC7xxx driver version: 5.1.20/3.2.4
Compile Options:
TCQ Enabled By Default : Disabled
AIC7XXX_PROC_STATS : Enabled
AIC7XXX_RESET_DELAY : 5
Adapter Configuration:
SCSI Adapter: Adaptec AIC-7880 Ultra SCSI host adapter
Ultra Narrow Controller
PCI MMAPed I/O Base: 0xfcffe000
Adapter SEEPROM Config: SEEPROM found and used.
Adaptec SCSI BIOS: Enabled
IRQ: 30
SCBs: Active 0, Max Active 1,
Allocated 15, HW 16, Page 255
Interrupts: 33726
BIOS Control Word: 0x18a6
Adapter Control Word: 0x1c5f
Extended Translation: Enabled
Disconnect Enable Flags: 0x00ff
Ultra Enable Flags: 0x0020
Tag Queue Enable Flags: 0x0000
Ordered Queue Tag Flags: 0x0000
Default Tag Queue Depth: 8
Tagged Queue By Device array for aic7xxx host instance 1:
{255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}
Actual queue depth per device for aic7xxx host instance 1:
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
Statistics:
(scsi1:0:5:0)
Device using Narrow/Sync transfers at 20.0 MByte/sec, offset 15
Transinfo settings: current(12/15/0/0), goal(12/15/0/0), user(12/15/0/0)
Total transfers 0 (0 reads and 0 writes)
< 2K 2K+ 4K+ 8K+ 16K+ 32K+ 64K+ 128K+
Reads: 0 0 0 0 0 0 0 0
Writes: 0 0 0 0 0 0 0 0
(scsi1:0:6:0)
Device using Narrow/Sync transfers at 10.0 MByte/sec, offset 15
Transinfo settings: current(25/15/0/0), goal(12/15/0/0), user(12/15/0/0)
Total transfers 132 (0 reads and 132 writes)
< 2K 2K+ 4K+ 8K+ 16K+ 32K+ 64K+ 128K+
Reads: 0 0 0 0 0 0 0 0
Writes: 0 0 0 1 131 0 0 0
Questo output rivela la velocit� di trasferimento ai vari dispositivi SCSI collegati al controller sulla base del canale ID, oltre a delle statistiche dettagliate inerenti alla quantit� e alle dimensioni dei file letti o scritti da quel dispositivo. Per esempio, questo controller sta comunicando con il CD-ROM a 20 megabyte al secondo, mentre l'unit� a nastro sta communicando a soli 10 megabyte al secondo.
5.3.9. /proc/sys/
La directory /proc/sys/ � una directory speciale, diversa dalle altre directory presenti in /proc/. Infatti, non solo fornisce numerose informazioni relative al sistema, ma consente anche di modificare la configurazione di un kernel. Ci� consente all'amministratore della macchina di abilitare e disabilitare immediatamente le caratteristiche del kernel.
Attenzione
Fate attenzione quando modificate le impostazioni di un sistema di produzione utilizzando i vari file contenuti nella directory /proc/sys/. In seguito alla modifica di un'impostazione errata il kernel pu� diventare instabile e pu� dunque essere necessario riavviare il sistema.
Per questa ragione, prima di tentare di cambiare un valore nella directory /proc/sys, assicuratevi di conoscere le opzioni corrette per quel file.
Un buon modo per determinare se un particolare file pu� essere configurato oppure se � stato concepito solo per fornire informazioni, � quello di estrarne un elenco con il flag -1/ nel terminale. Se il file pu� essere scritto, � possibile utilizzarlo per configurare il kernel. Per esempio, un elenco parziale del file /proc/sys/fs ha il seguente aspetto:
-r--r--r-- 1 root root 0 May 10 16:14 dentry-state
-rw-r--r-- 1 root root 0 May 10 16:14 dir-notify-enable
-r--r--r-- 1 root root 0 May 10 16:14 dquot-nr
-rw-r--r-- 1 root root 0 May 10 16:14 file-max
-r--r--r-- 1 root root 0 May 10 16:14 file-nr
In questo elenco i file dir-notify-enable e file-max possono essere scritti e pertanto � possibile utilizzarli per configurare il kernel. Gli altri file forniscono solamente un feedback in relazione alle attuali impostazioni.
La modifica di un valore all'interno di un file /proc/sys viene effettuata ripetendo il nuovo valore nel file. Per esempio, per abilitare il tasto SysRq su un kernel in funzione, digitate il comando:
echo 1 > /proc/sys/kernel/sysrq
In questo modo il valore del file sysrq passer� da 0 (off) a 1 (on).
Alcuni file di configurazione /proc/sys/ contengono pi� di un valore. Per inviare a questi file nuovi valori in modo corretto, inserite uno spazio tra ogni valore trasmesso con il comando echo, come mostrato in questo esempio:
echo 4 2 45 > /proc/sys/kernel/acct
Nota Bene
Qualsiasi modifica di configurazione effettuata tramite il comando echo, scomparir� nel momento in cui il sistema verr� riavviato. Per sapere come rendere effettive le modifiche dopo il riavvio del sistema, consultate la Sezione 5.4.
La directory /proc/sys contiene svariate sottodirectory che controllano aspetti diversi di un kernel in funzione.
5.3.9.1. /proc/sys/dev/
Questa directory fornisce parametri per dispositivi particolari presenti sul sistema. Molti sistemi hanno almeno due directory, cdrom/ e raid. I kernel personalizzati possono avere altre directory, come parport/, che fornisce la capacit� di condividere una porta parallela tra i driver multipli dei dispositivi.
La directory cdrom/ contiene un file chiamato info, in grado di mostrare una serie di parametri importanti del CD-ROM:
CD-ROM information, Id: cdrom.c 3.20 2003/12/17
drive name: hdc
drive speed: 48
drive # of slots: 1
Can close tray: 1
Can open tray: 1
Can lock tray: 1
Can change speed: 1
Can select disk: 0
Can read multisession: 1
Can read MCN: 1
Reports media changed: 1
Can play audio: 1
Can write CD-R: 0
Can write CD-RW: 0
Can read DVD: 0
Can write DVD-R: 0
Can write DVD-RAM: 0
Can read MRW: 0
Can write MRW: 0
Can write RAM: 0
Esaminando rapidamente questo file � possibile scoprire le caratteristiche di un CD-ROM ignoto. Se si dispone di pi� CD-ROM su uno stesso sistema, ciascun dispositivo avr� la propria colonna di informazioni.
Svariati file contenuti in /proc/sys/dev/cdrom, come autoclose e checkmedia, possono essere utilizzati per controllare il CD-ROM del sistema. Utilizzate il comando echo per abilitare o disabilitare queste caratteristiche.
Se nel kernel � stato compilato il supporto RAID, sar� disponibile la directory /proc/sys/dev/raid, che conterra almeno due file: speed_limit_min e speed_limit_max. Queste impostazioni determinano in quale misura va aumentata la velocit� con cui viene utilizzato il dispositivo RAID per task di I/O particolarmente intensivi, come la risincronizzazione dei dischi.
5.3.9.2. /proc/sys/fs/
Questa directory contiene una serie di opzioni e informazioni relative a vari aspetti del filesystem, tra cui informazioni su quota, file handle, inode e dentry.
La directory binfmt_misc viene utilizzata per fornire al kernel il supporto per formati con binari misti.
I file pi� importanti di /proc/sys/fs/ comprendono:
dentry-state — Fornisce lo stato della directory della cache. L'aspetto del file � simile al seguente:
57411 52939 45 0 0 0
Il primo numero mostra il numero totale delle voci presenti nella directory della cache, mentre il secondo visualizza il numero delle voci non utilizzate. Il terzo numero indica i secondi che trascorrono tra il momento in cui una directory viene liberata e il momento in cui � possibile "reclamarla", mentre il quarto misura le pagine richieste attualmente dal sistema. Gli ultimi due numeri non sono in uso e visualizzano solo il numero 0.
dquot-nr — Elenca il numero massimo delle entry di quota disco memorizzato nella cache.
file-max — Elenca il numero massimo di file handle che il kernel pu� allocare. Aumentando il valore di questo file si possono risolvere eventuali errori derivanti da una carenza di file handle disponibili.
file-nr — Elenca il numero di file handle allocati, il numero di file handle utilizzati e il numero massimo di file handle.
overflowgid e overflowuid — definiscono rispettivamente l'ID di gruppo e l'ID utente da utilizzare con filesystem che supportano solo ID utente e di gruppo a 16 bit.
super-max — controlla il numero massimo di superblocchi disponibili.
super-nr — visualizza il numero di superblocchi attualmente in uso.
5.3.9.3. /proc/sys/kernel/
Questa directory contiene una serie di file di configurazione che interessano direttamente l'operato del kernel. Tra i file pi� importanti trovate:
acct — Controlla la sospensione della contabilit� relativa a un processo sulla base della percentuale di spazio libero disponibile sul filesystem contenente il log. Per default, il file ha un aspetto simile al seguente:
4 2 30
Il primo valore definisce la soglia percentuale di spazio libero necessario per ristabilire il logging, mentre il secondo valore stabilisce il limite della percentuale di spazio disponibile quando il logging � sospeso. Il terzo valore definisce l'intervallo in secondi, in cui il kernel interroga il filesystem per vedere se il logging deve essere sospeso o ripreso.
cap-bound — controlla le impostazioni del limite di capacit�. Fornisce un elenco delle azioni che qualsiasi processo sul sistema � in grado di compiere. Se un'azione non � presente in questo elenco, allora nessun processo � in grado di compierla, a prescindere dalla quantit� di privilegi di cui dispone. L'idea di fondo, in questo caso, � quella di rendere pi� sicuro il sistema facendo in modo che determinate situazioni non si verifichino durante il processo di avvio, per lo meno a partire da un determinato momento.
Per un elenco di valori valido per questo file virtuale, consultare la seguente documentazione:
ctrl-alt-del — Controlla se [Ctrl]-[Alt]-[Delete] riavvia il computer in modo corretto tramite init (0) o se provocher�, piuttosto, un riavvio repentino senza sincronizzare i dirty buffer 'modificati' con il disco (1).
domainname — Configura il nome di dominio del sistema, come example.com.
exec-shield — Configura il contenuto Exec Shield del kernel. Exec Shield fornisce protezione contro certi tipi di attacchi di sovrannumero del buffer.
Sono disponibili due valori per il file virtuale:
0 — Disabilita Exec Shield.
1 — Abilita Exec Shield. Questo � il valore di default.
Importante
Se il sistema st� eseguendo delle applicazioni che riguardano la sicurezza, le quali sono state avviate mentre Exec Shield non era abilitato, le suddette applicazioni devono essere riavviate quando Exec Shield viene abilitato.
exec-shield-randomize — Abilita la randomizzazione della posizione di diversi oggetti all'interno della memoria. Ci� viene usato come deterrente per potenziali aggressori in cerca di programmi e demoni all'interno della memoria. Ogni qualvolta un programma o un demone viene avviato, esso viene posizionato all'interno della memoria in un luogo differente, e mai in un indirizzo della memoria assoluto o statico.
Sono disponibili due valori per il file virtuale:
0 — Disabilita la randomizzazione di Exec Shield. Ci� pu� risultare utile per il debugging delle applicazioni.
1 — Abilita la randomizzazione di Exec Shield. Questo � il valore di default. Nota bene: Il file exec-shielddeve essere impostato su 1 per rendere exec-shield-randomize effettivo.
hostname — Configura il nome host del sistema, per esempio www.example.com.
hotplug — Configura l'utility da utilizzare quando il sistema rileva una modifica nella configurazione. Viene utilizzato principalmente con USB e Cardbus PCI. Si consiglia di non modificare il valore di default di /sbin/hotplug, a meno che non si stia provando un nuovo programma che svolga questo ruolo.
modprobe — Imposta la posizione del programma da utilizzare per caricare i moduli del kernel. Il valore di default di /sbin/modprobe indica che kmod lo chiamer� proprio per caricare il modulo quando un kernel thread richiama kmod.
msgmax — Imposta la dimensione massima dei messaggi inviati da un processo all'altro, impostata su 8192 byte per default. Si consiglia di evitare di aumentare questo valore, poich� i messaggi in coda tra i vari processi vengono immagazzinati nella memoria non-intercambiabile del kernel. Qualsiasi aumento in msgmax comporterebbe un aumento della quantit� di RAM necessaria per il sistema.
msgmnb — stabilisce il numero massimo di byte consentiti per una singola coda di messaggi. Il numero predefinito � 16384.
msgmni — definisce il numero massimo di identificatori consentiti per una coda di messaggi. Il valore predefinito � 16.
osrelease — elenca il numero di release del kernel di Linux. Questo file pu� essere modificato solo cambiando il sorgente del kernel e ricompilando.
ostype — visualizza il tipo di sistema operativo. Per default, questo file � impostato su Linux e questo valore pu� essere modificato solo cambiando la sorgente del kernel e ricompilando.
overflowgid e overflowuid — definiscono rispettivamente l'ID di gruppo e l'ID utente da utilizzare con le chiamate di sistema su architetture che supportano soltanto ID utente e di gruppo a 16 bit.
panic — Determina il numero di secondi utilizzati dal kernel per posticipare il riavvio del sistema qualora si verificasse un panic del kernel. Per default, il valore � impostato su 0, il quale disattiva il riavvio automatico in seguito a una crisi.
printk — questo file controlla una serie di impostazioni relative alla stampa o alla registrazione di messaggi di errore. Ciascun messaggio di errore riportato dal kernel � associato a un livello di log che determina l'importanza del messaggio stesso. I valori del livello di log si articolano come segue:
0 — emergenza kernel: il sistema � inutilizzabile.
1 — allarme kernel: � necessario un intervento immediato.
2 — il kernel � in condizioni critiche.
3 — errore generale del kernel.
4 — avvertimento sulle condizioni generali del kernel.
5 — condizioni del kernel normali ma significative.
6 — messaggio informativo riguardo al kernel.
7 — messaggi a livello di debug riguardanti il kernel.
Nel file printk sono presenti quattro valori:
6 4 1 7
Ciascuno di questi valori definisce una regola distinta per la gestione dei messaggi di errore. Il primo valore, chiamato livello di log della console, indica la priorit� pi� bassa dei messaggi che verranno visualizzati sulla console (pi� � bassa la priorit�, pi� � alto il numero del livello di log). Il secondo valore definisce il livello di log di default per i messaggi ai quali non � associato un livello di log specificato. Il terzo valore indica la configurazione pi� bassa per il livello di log della console. Infine, l'ultimo numero indica il valore predefinito per il livello di log della console.
La directory random — Elenca numerosi valori relativi alla generazione di numeri casuali per il kernel.
rtsig-max — Configura il numero massimo di segnali POSIX realtime che il sistema pu� tenere in coda contemporaneamente. Il valore di default � 1024.
rtsig-nr — Elenca il numero attuale di segnali POSIX realtime tenuti in coda dal kernel.
sem — Configura le impostazioni del semaforo all'interno del kernel. Per semaforo si intende un oggetto IPC di System V utilizzato per controllare l'uso di un particolare processo.
shmall — stabilisce la quantit� totale di memoria condivisa (misurata in byte) che pu� essere utilizzata sul sistema ogni singola volta. Il valore predefinito � 2097152.
shmmax — stabilisce la dimensione massima (misurata in byte) del segmento di memoria condivisa consentita dal kernel. Il valore predefinito � 33554432, ma il kernel pu� supportare valori molto pi� alti di questo.
shmmni — stabilisce il numero massimo di segmenti di memoria condivisa per l'intero sistema, in byte. Il valore predefinito � 4096.
sysrq — Attiva il System Request Key, se questo valore � impostato su un numero diverso dal default cio� zero (0).
Il System Request Key abilita un input immediato al kernel, digitando una semplice combinazione di tasti. Per esempio il System Request Key pu� essere usato per spegnere o riavviare un sistema immediatamente, e per la sincronizzazione di tutti i filesystem montati o lo scaricamento di informazioni importanti sulla vostra console. Per iniziare un System Request Key, digitare [Alt]-[SysRq]-[<system request code>]. Sostituire <system request code> con uno dei seguenti codici:
r — Disabilita la modalit� raw per la tastiera, e la imposta su XLATE (una modalit� della tastiera limitata che non riconosce i modificatori come ad esempio [Alt], [Ctrl], o [Shift]).
k — Interrompe tutti i processi attivi in una console virtuale. Chiamato anche Secure Access Key (SAK), viene usato spesso per verificare che il prompt di login sia generato da init, e non da una copia trojan creata per catturare il nome utente e la password.
b — Esegue un riavvio del kernel senza smontare i file system o sincronizzando i dischi collegati al sistema.
c — Interrompe il sistema senza smontare i file system o sincronizzando i dischi collegati al sistema.
o — Disabilita completamente il sistema.
s — Cerca di sincronizzare i dischi collegati al sistema.
u — Cerca di eseguire un unmount e di rimontare tutti i file system di sola lettura.
p — Esegue un output di tutte le flag ed effettua una registrazione sulla console.
t — Esegue un output di un elenco dei processi sulla console.
m — Esegue un output delle statistiche della memoria sulla console.
0 fino a 9 — Imposta il livello di log per la console.
e — Interrompe tutti i processi ad eccezione di init, usando SIGTERM.
i — Interrompe tutti i processi ad eccezione di init, usando SIGKILL.
l — Interrompe tutti i processi usando SIGKILL (incluso init). Il sistema non pu� essere usato dopo aver emesso il codice System Request Key.
h — Visualizza il testo d'aiuto.
Questa caratteristica � molto utile quando si usa un kernel di sviluppo o quando si verifica un arresto (freeze) del sistema.
Attenzione
Il System Request Key viene considerato pericoloso per la sicurezza, in quanto una console senza alcuna supervisione, permette ad un aggressore di guadagnare accesso al sistema. Per questa ragione, per default non � selezionato.
Per maggiori informazioni sul System Request Key, consultate /usr/share/doc/kernel-doc-<version>/Documentation/sysrq.txt.
sysrq-key — Definisce il codice della chiave per il System Request Key (84 � il default).
sysrq-sticky — Definisce se System Request Key � una combinazione di tasti idonea. I valori accettati sono i seguenti:
0 — [Alt]-[SysRq] e il codice di richiesta del sistema, devono essere premuti simultaneamente. Questo � il valore di default.
1 — [Alt]-[SysRq] devono essere premuti simultaneamente, ma il codice di richiesta del sistema pu� essere premuto indipendentemente, prima del numero di secondi specificato in /proc/sys/kernel/sysrq-timer.
sysrq-timer — Specifica il numero di secondi che devono trascorrere prima che il codice di richiesta del sistema venga premuto. Il valore di default � 10.
tainted — Indica se un modulo non-GPL � stato caricato.
0 — Nessun modulo non-GPL � stato caricato.
1 — Almeno un modulo senza una licenza GPL (inclusi i moduli senza licenza) � stato caricato.
2 — Almeno un modulo � stato forzato al caricamento con il comando insmod -f.
threads-max — stabilisce il numero massimo di thread che il kernel pu� utilizzare, con un valore di default pari a 2048.
version — visualizza la data e l'ora dell'ultima compilazione del kernel. Il primo campo di questo file, che pu� essere per esempio #3, si riferisce al numero di volte in cui il kernel � stato costruito dalla base sorgente.
5.3.9.4. /proc/sys/net/
Questa directory contiene delle sottodirectory inerenti vari aspetti del networking. Molte configurazioni, durante la compilazione del kernel, rendono disponibili diverse directory, come appletalk, ethernet, ipv4, ipx e ipv6. Modificando questi file all'interno di queste directory,gli amministratori di sistema sono in grado di sistemare le configurazione della rete su di un sistema in esecuzzione.
Data l'ampia gamma di possibili opzioni di networking disponibile con Linux, verranno presentate solo le directory /proc/sys/net pi� comuni.
La directory /proc/sys/net/core contiene una serie di impostazioni che controllano l'interazione tra il kernel e i livelli di networking. I file pi� importanti sono i seguenti:
message_burst — Imposta la quantit� di tempo, in decimi di secondo, necessaria per scrivere un messaggio di avvertimento. Questa impostazione viene utilizzata per alleviare gli attacchi del tipo Denial of Service (Dos). L'impostazione di default � 50.
message_cost — Determina un costo su ogni messaggio di avvertimento. Pi� alto � il valore di questo file (il default � impostato su 5), maggiore � la probabilit� che il messaggio venga ignorato. Questa impostazione viene usata per mitigare gli attacchi DoS.
Un hacker potrebbe infatti bombardare il sistema di richieste che generano errori e riempiono le partizioni del disco di log o richiedono a tutte le risorse del sistema di gestire logging di errore. Le impostazioni in message_burst e message_cost possono essere modificate in funzione del fattore di rischio accettabile per il sistema contro la necessit� di un logging di vasta portata.
netdev_max_backlog — stabilisce il numero massimo di pacchetti che possono restare in coda quando la velocit� con cui una particolare interfaccia riceve i pacchetti � superiore a quella con cui il kernel � in grado di elaborarli. Il valore predefinito per questo file � 300.
optmem_max — configura la dimensione massima del buffer ausiliario consentito per ogni socket.
rmem_default — stabilisce la dimensione predefinita (misurata in byte) del buffer del socket per la ricezione.
rmem_max — stabilisce la dimensione massima (misurata in byte) del buffer del socket per la ricezione.
wmem_default — stabilisce la dimensione predefinita (misurata in byte) del buffer del socket per la trasmissione.
wmem_max — stabilisce la dimensione massima (misurata in byte) del socket per la trasmissione.
La directory /proc/sys/net/ipv4 contiene impostazioni di networking aggiuntive. Molte di queste impostazioni, usate tra di loro, sono utili per impedire attacchi al sistema o utilizzare il sistema in modo che funga da router.
Attenzione
L'errata modifica di questi file pu� avere ripercussioni sulla connettivit� remota al vostro sistema.
Qui di seguito viene riportato un elenco di alcuni dei file pi� importanti contenuti nella directory /proc/sys/net/ipv4/:
icmp_destunreach_rate, icmp_echoreply_rate, icmp_paramprob_rate eicmp_timeexeed_rate — Impostano la velocit� massima, in centesimi di secondo, di invio dei pacchetti ICMP agli host sotto diverse condizioni. Una impostazione 0 rimuove tutti i ritardi e non � quindi consigliabile.
icmp_echo_ignore_all e icmp_echo_ignore_broadcasts — consentono, rispettivamente, al kernel di ignorare i pacchetti ICMP ECHO provenienti da qualsiasi host o solo quelli provenienti da indirizzi broadcast e multicast. Se � impostato il valore 0 il kernel risponder� positivamente, mentre con valore 1 i pacchetti saranno ignorati.
ip_default_ttl — imposta il TTL (Time To Live) predefinito, ossia il valore che limita il numero di salti che un pacchetto pu� compiere prima di arrivare a destinazione. Aumentare questo valore pu� portare a una riduzione nelle prestazioni del sistema.
ip_forward — consente alle interfacce del sistema di inoltrarsi pacchetti a vicenda. Il valore predefinito di questo file � 0 e ci� significa che la funzione di inoltro non � abilitata. Per attivarla occorre impostare il file su 1.
ip_local_port_range — Specifica il range di porte che TCP o UDP devono utilizzare quando � necessaria una porta locale. Il primo numero rappresenta la porta pi� bassa da utilizzare, mentre il secondo numero indica quella pi� alta. Per i sistemi su cui si prevede di dover utilizzare un numero pi� elevato di porte rispetto a quello di default 1024 a 4999, dovreste usare un range che v� da 32768 a 61000.
tcp_syn_retries — Permette di impostare un limite al numero di tentativi da parte del sistema di trasmettere un pacchetto SYN quando si sta cercando di effettuare una connessione.
tcp_retries1 — imposta il numero di tentativi di trasmissione consentiti quando si sta cercando di rispondere a una connessione in ingresso. Il numero predefinito � 3.
tcp_retries2 — imposta il numero di tentativi consentiti di trasmissione dei pacchetti TCP. Il valore predefinito � 15.
Se desiderate un elenco completo dei file e delle opzioni disponibili nella directory /proc/sys/net/ipv4/, consultate il file /usr/share/doc/kernel-doc-<version>/Documentation/networking/ip-sysctl.txt.
All'interno della directory /proc/sys/net/ipv4/ esistono altre directory, le quali affrontano un asspetto diverso dello stack di rete. La directory /proc/sys/net/ipv4/conf/ consente di configurare ciascuna delle interfacce del sistema in modo diverso, incluso l'uso delle impostazioni di default per i dispositivi non configurati (nella subdirectory /proc/sys/net/ipv4/conf/default/) e impostazioni che annullano qualsiasi configurazione speciale (nella subdirectory /proc/sys/net/ipv4/conf/all/).
La directory /proc/sys/net/ipv4/neigh/ contiene delle regole per communicare con altri sistemi (o host) direttamente collegati al vostro sistema (denominato network neighbour) e inoltre contiene delle regole diverse per sistemi pi� distanti pi� di un hop.
Il routing IPV4 ha la propria directory (/proc/sys/net/ipv4/route/). A differenza di conf/ e neigh, la directory /proc/sys/net/ipv4/route/ contiene delle specifiche applicate al routing di tutte le interfacce presenti sul sistema. Molte di queste impostazioni, tra cui max_size, max_delay e min_delay, riguardano il controllo delle dimensioni della cache di routing. Per vuotare la cache di routing scrivete qualsiasi valore sul file flush.
Informazioni aggiuntive su queste directory e i valori possibili per i loro file di configurazione, possono essere trovati in:
Questa directory facilita la configurazione del sottosistema (VM) virtual memory del kernel di Linux. Il kernel fa un uso estensivo ed efficiente della memoria virtuale, comunemente nota come spazio di swap.
I seguenti file si trovano normalmente nella directory /proc/sys/vm:
block_dump — Quando abilitato, configura il debugging I/O del blocco. Tutte le operazioni di lettura e scrittura vengono conseguentemente registrate. Ci� pu� risultare utile se si diagnostica la fase di spin up e spin down del disco per la conservazione della batteria del laptop. Quando block_dump � abilitato, tutti gli output possono essere recuperati tramite dmesg. Il valore di default � 0.
Suggerimento
Se block_dump viene abilitato nello stesso istante del debugging del kernel, � prudente arrestare il demone klogd, in quanto esso potrebbe generare attivit� non corrette, causate da block_dump.
dirty_background_ratio — Avvia, tramite un demone pdflush, la riscrittura di dati marcati dirty 'sporchi' nel background su questa percentuale di memoria totale. Il valore di default � 10.
dirty_expire_centisecs — Definisce quando i dati marcati dirty presenti in memoria, sono abbastanza vecchi da poterli accantonare. I dati marcati dirty presenti in memoria per un periodo maggiore di questo intervallo, vengono accantonati con l'entrata in funzione del demone pdflush. Il valore di default � 3000, ed � espresso in centinaia di secondi.
dirty_ratio — Attiva una riscrittura attivo di dati marcati dirty a questa percentuale di memoria totale, per il generatore dei suddetti dati tramite pdflush. Il valore di default � 10.
dirty_writeback_centisecs — Definisce l'intervallo tra i risvegli del demone pdflush, il quale elimina dal disco i dati marcati dirty presenti in memoria. Il valore di default � 500, ed � espresso in centinaia di secondi.
laptop_mode — Minimizza il numero delle volte che un disco fisso ha bisogno di eseguire uno spin up, mantenendo il pi� a lungo possibile lo spin down, in modo da conservare la potenza della batteria presente sui laptop. Ci� aumeta l'efficienza combinando tutti i processi I/O futuri, riducendo la frequenza di spin up. Il valore di default � 0, ma viene abilitato automaticamente nel caso in cui viene usata una batteria.
Questo valore viene controllato automaticamente dal demone acpid una volta notificato all'utente che la potenza della batteria � stata abilitata. Nessuna modifica da parte dell'utente o nessuna interazione risulta essere necessaria, se il laptop supporta la specificazione ACPI (Advanced Configuration and Power Interface)
Per maggiori informazioni, consultate la seguente documentazione:
lower_zone_protection — Determina l'aggressivit� del kernel nella difesa delle zone di allocazione della memoria pi� bassa. Ci� pu� risultare efficace se utilizzato con macchine che presentano uno spazio della memoria highmem abilitato. Il valore di default � 0, nessuna protezione. Tutti gli altri valori interi sono in megabyte, e la memoria lowmem � cos� protetta dall'essere allocata degli utenti.
Per maggiori informazioni, consultate la seguente documentazione:
max_map_count — configura il numero massimo di zone di memoria map di cui pu� disporre un processo. Di norma, il valore predefinito 65536 risulta appropriato.
min_free_kbytes — Forza la VM (virtual memory manager) di Linux a mantenere disponibili un numero minimo di kilobytes. La VM utilizza questo numero per elaborare un valore pages_min per ogni zona lowmem presente nel sistema. Il valore di default risulta essere conforme alla memoria totale della macchina.
nr_hugepages — Indica il numero corrente di pagine hugetlb configurate presenti nel kernel.
Per maggiori informazioni, consultate la seguente documentazione:
nr_pdflush_threads — Indica il numero di demoni pdflush attualmente in esecuzione. Questo file � di sola lettura, e non deve essere modificato da parte dell'utente. Sotto carichi I/O significativi, il valore di default viene aumentato dal kernel.
overcommit_memory — Configura le condizioni sotto le quali una richiesta di memoria molto grande pu� essere accettata o rifiutata. Sono disponibili le seguenti modalit�:
0 — Il kernel esegue una gestione di tipo 'heuristic memory overcommit', calcolando la quantit� di memoria disponibile, interrompendo le richieste chiaramente non valide. Sfortunatamente, poich� la memoria � allocata mediante un algoritmo euristico invece di un algoritmo preciso, il sistema pu� risultare sovraccarico. Ci� rappresenta l'impostazione di default.
1 — Il kernel non esegue alcuna gestione di tipo memory overcommit . Con questa impostazione, viene aumentato il potenziale di sovraccarico del sistema, cos� come le prestazioni per attivit� che richiedono molta memoria (come quelle utilizzate da alcune applicazioni scientifiche).
2 — Il kernel non accetta le richieste per la memoria che si aggiungono allo swap pi� la percentuale della RAM fisica specificata in /proc/sys/vm/overcommit_ratio. Questa impostazione � idonea per coloro che desiderano avere un rischio minore di sfruttamento della memoria.
Nota Bene
Questa impostazione � consigliata per i sistemi che presentano aree di swap maggiori della memoria fisica.
overcommit_ratio — Specifica la percentuale della RAM fisica considerata quando /proc/sys/vm/overcommit_memory viene impostato su 2. Il valore di default � 50.
page-cluster — Stabilisce il numero di pagine lette in una volta. Il valore di default 3, che di fatto si riferisce a 16 pagine, risulta adeguato per la maggior parte dei sistemi.
swappiness — Determina il numero massimo di swap di una macchina. Pi� alto � il valore, maggiore saranno gli eventi di swap. Il valore di default, in percentuale, � impostato su 60.
Tutta la documentazione basata sul kernel � disponibile su:
/usr/share/doc/kernel-doc-<version>/Documentation/, il quale contiene informazioni aggiuntive.
5.3.10. /proc/sysvipc/
La directory contiene informazioni sulle risorse di System V IPC. I file contenuti in questa directory riguardano le chiamate di System V IPC per i messaggi (msg), i semafori (sem) e la memoria condivisa (shm).
5.3.11. /proc/tty/
La directory contiene informazioni circa i dispositivi tty disponibili e attualmente in uso sul sistema. I terminali a carattere, che in origine si chiamavano dispositivi teletype (telescriventi), vengono ora chiamati dispositivi tty.
In Linux esistono tre diversi tipi di dispositivi tty. I dispositivi seriali vengono utilizzati con le connessioni seriali per esempio tramite un modem o un cavo seriale. I terminal virtuali creano la connessione comune della console per esempio le console virtuali disponibili quando viene digitata la combinazione di tasti [Alt]-[<F-key>] nella console di sistema. Gli pseudo terminali creano una comunicazione bidirezionale (two-way) usata da alcune applicazioni di alto livello per esempio XFree86. Il file drivers �, un elenco dei dispositivi tty attualmente in uso come riportato nel seguente esempio:
Il file /proc/tty/driver/serial elenca le statistiche di utilizzo e lo stato di ciascuna delle linee tty seriali.
Per poter utilizzare i dispositivi tty in modo analogo ai dispositivi di rete, il kernel di Linux applica al dispositivo una line discipline. Questo consente al driver di inserire un tipo di intestazione in ogni blocco dati trasmesso tramite il dispositivo, permettendo cos�, all'estremo della connessione, di vedere un blocco dati come singola parte di un flusso dati. SLIP e PPP sonoline discipline comuni di linea, utilizzate per connettere tra loro vari sistemi mediante collegamento seriale.
Le line discipline registrate sono memorizzate nel file ldiscs e informazioni dettagliate sono disponibili all'interno della directory ldisc.