Gruppi comuni di informazioni relative al kernel vengono raccolti in directory e sottodirectory all'interno di /proc.
Ciascuna directory di /proc contiene un numero di directory identificate con un numero. Un elenco di queste directory sarà simile alseguente:
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 di 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 di processo contiene i file seguenti:
cmdline — contiene gli argomenti della linea di comando che hanno dato inizio al processo.
cpu — Fornisce informazioni specifiche in merito all'utilizzo di ciascuna delle CPU del sistema. Un processo in esecuzione su un sistema dual CPU produce un output simile alseguente:
cpu 11 3 cpu0 0 0 cpu1 11 3 |
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:
08048000-08086000 r-xp 00000000 03:03 391479 /usr/sbin/sshd 08086000-08088000 rw-p 0003e000 03:03 391479 /usr/sbin/sshd 08088000-08095000 rwxp 00000000 00:00 0 40000000-40013000 r-xp 00000000 03:03 293205 /lib/ld-2.2.5.so 40013000-40014000 rw-p 00013000 03:03 293205 /lib/ld-2.2.5.so 40031000-40038000 r-xp 00000000 03:03 293282 /lib/libpam.so.0.75 40038000-40039000 rw-p 00006000 03:03 293282 /lib/libpam.so.0.75 40039000-4003a000 rw-p 00000000 00:00 0 4003a000-4003c000 r-xp 00000000 03:03 293218 /lib/libdl-2.2.5.so 4003c000-4003d000 rw-p 00001000 03:03 293218 /lib/libdl-2.2.5.so |
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 a differenti statistiche di 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:
Name: sshd State: S (sleeping) Tgid: 797 Pid: 797 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 32 Groups: VmSize: 3072 kB VmLck: 0 kB VmRSS: 840 kB VmData: 104 kB VmStk: 12 kB VmExe: 300 kB VmLib: 2528 kB SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 8000000000001000 SigCgt: 0000000000014005 CapInh: 0000000000000000 CapPrm: 00000000fffffeff CapEff: 00000000fffffeff |
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.
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 di shell, un elenco della directory /proc/self produce lo stesso contenuto di un elenco della directory di processo per quel processo.
Questa directory contiene informazioni specifiche per i vari bus disponibili sul sistema. Per esempio, su di un sistema standard contenente bus ISA, PCI e USB, i dati correnti su ciascuno di questi bus sono disponibili all'interno della subdirectory sotto /proc/bus dallo 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:
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=d400 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms |
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 : 01:38:43 rtc_date : 1998-02-13 rtc_epoch : 1900 alarm : 00:00:00 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 circa l'RTC, consultate il file /usr/src/linux-2.4/Documentation/rtc.txt.
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 e ipermessi concessi a tali filesystem. Per ulteriori informazioni sulla condivisione dei filesystem con NFS, consultate Capitolo 9.
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-cdrom version 4.59 ide-floppy version 0.97 ide-disk version 1.10 |
Molti chipset forniscono anche un file in questa directory, che riporta dati aggiuntivi sulle unità connesse 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).
Nella directory del canale IDE è presente una directory dei dispositivi, il cui nome corrisponde alla lettera dell'unità nella directory /dev directory. Per esempio, la prima unità IDE su ide0 sarà hda.
![]() | Nota Bene |
---|---|
There is a symbolic link to each of these device directories in the /proc/ide/ directory. |
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 — The device cache.
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:
name value min max mode ---- ----- --- --- ---- bios_cyl 784 0 65535 rw bios_head 255 0 255 rw bios_sect 63 0 63 rw breada_readahead 4 0 127 rw bswap 0 0 1 r current_speed 66 0 69 rw file_readahead 0 0 2097151 rw ide_scsi 0 0 1 rw init_speed 66 0 69 rw io_32bit 0 0 3 rw keepsettings 0 0 1 rw lun 0 0 7 rw max_kb_per_request 64 1 127 rw multcount 8 0 8 rw nice1 1 0 1 rw nowerr 0 0 1 rw number 0 0 3 rw pio_mode write-only 0 255 w slow 0 0 1 rw unmaskirq 0 0 1 rw using_dma 1 0 1 rw |
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:
/usr/src/linux-2.4/Documentation/filesystems/proc.txt |
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, corredati di statistiche di trasmissione e ricezione. Questo file indica il numero di byte inviati e ricevuti da ciascuna interfaccia, il numero di pacchetti inbound e outbound, 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 sono attivi sul sistema e contengono 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.
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:
Attached devices: Host: scsi1 Channel: 00 Id: 05 Lun: 00 Vendor: NEC Model: CD-ROM DRIVE:466 Rev: 1.06 Type: CD-ROM ANSI SCSI revision: 02 Host: scsi1 Channel: 00 Id: 06 Lun: 00 Vendor: ARCHIVE Model: Python 04106-XXX Rev: 7350 Type: Sequential-Access ANSI SCSI revision: 02 Host: scsi2 Channel: 00 Id: 06 Lun: 00 Vendor: DELL Model: 1x6 U2W SCSI BP Rev: 5.35 Type: Processor ANSI SCSI revision: 02 Host: scsi2 Channel: 02 Id: 00 Lun: 00 Vendor: MegaRAID Model: LD0 RAID5 34556R Rev: 1.01 Type: Direct-Access ANSI SCSI revision: 02 |
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, il range 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.
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.
![]() | Avvertenza |
---|---|
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.
La directory fornisce parametri per particolari dispositivi 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 diversi driver di dispositivi.
La directory cdrom contiene un file chiamato info, che mostra una serie di importanti parametri del CD-ROM:
CD-ROM information, Id: cdrom.c 3.12 2000/10/18 drive name: hdc drive speed: 32 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 |
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.
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 binari misti.
I file 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.
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 secondo valore definisce la soglia percentuale di spazio libero quando illogging è sospeso, mentre il primo valore stabilisce la percentuale di spazio libero necessaria per riprendere il logging. 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 dato momento.
Per una lista valida dei valori per questo file virtuale, consultate /usr/src/linux-2.4/include/linux/capability.h. Per ulteriori infomazioni consultate la seguente URL:
http://lwn.net/1999/1202/kernel.php3 |
ctrl-alt-del — controlla se
domainname — configura il nome di dominio del sistema, come example.com.
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 chiama 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 (non-swappable) 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. Di default, questo file è impostato su Linux e questo valore può essere modificato solo cambiando il 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 di quanti secondi il kernel posticiperà il riavvio del sistema qualora si verificasseun kernelpanic. Per default, il valoreè impostato su 0, e 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 alla volta. Il valore predefinito è 1024.
rtsig-nr — Elenca il numero attuale di segnali POSIX realtime tenuti in coda dal kernel.
sem — configura impostazioni "semaforiche" 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 da quello di default, ovvero 0.
Il System Request Key abilita un input immedio 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
r — Disabilita la modalità raw per la tastiera, e lo imposta su XLATE (una modalità della tastiera limitata che non riconosce i modificatori come ad esempio
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 del trojan creata per catturare i nomi utenti e le 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 smontare e 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 un rischio, 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/src/linux-2.4/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 —
1 —
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 montato.
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.
Questa directory contiene delle subdirectory inerenti vari aspetti di 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 tipoDenial 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/src/linux-2.4/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 lontani).
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 di routing applicabili a 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:
/usr/src/linux-2.4/Documentation/filesystems/proc.txt |
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:
bdflush — Imposta i valori relativi al demone del kernelbdflush.
kswapd — Imposta i valori relativi al demone swap-out del kernel kswapd. Questo file presenta tre valori
512 32 8 |
Il primo valore stabilisce il numero massimo di pagine che kswapd cercherà di liberare in un singolo tentativo. Più alto è questo numero, maggiore è la determinazione con cui il kernel si sposta verso le pagine libere. Il secondo valore stabilisce il numero minimo di tentativi che kswapd può compiere per liberare una pagina. Il terzo valore stabilisce quante pagine alla volta kswapd cerca di scrivere. Impostando in modo adeguato quest'ultimo valore, è possibile migliorare le prestazioni di un sistema che usa molto spazio di swap istruendo il kernel affinchè scriva pagine con blocchi di dati piuttosto grandi, riducendo al minimo il numero di ricerche su disco.
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.
hugetlb_pool — Specifica in megabyte la misuara di hugepages—large, e delle pagine della memoria fisica continua. Queste pagine possono essere usate per creare grandi mappature della memoria virtuale TLB, utili per le applicazioni del database RAM-intensive. TLB è una cache in-CPU speciale, creata per le mappature della memoria virtuale.
Anche se questa caratteristica può essere modificata durante l'esecuzione, essa risulta essere molto sensibile alle problematiche di frammentazione quando il gruppo diventa più grande, mentre il campo MemFree di /proc/meminfo è basso. Per questo motivo, potrebbe essere necessario posizionare nuove impostazioni in /etc/sysctl.conf ed eseguire un riavvio. Consultare la Sezione 5.4 per informazioni su sysctl.
Consultare /usr/src/linux-2.4/Documentation/vm/hugetlbpage.txt per maggiori informazioni sulla configurazione di hugepages.
![]() | Importante |
---|---|
Nonostante sia stato accennato in hugetlbpage.txt, il file /proc/sys/vm/nr_hugepages non è presente all'interno di Red Hat Enterprise Linux. Invece hugetlb_pool dovrebbe essere usato per configurare il numero di hugepages disponibili per il sistema. È importante altresì ricordare che nr_hugepages utilizza unità hugepage, mentre hugetlb_pool configura hugepages in megabyte. |
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 e interrompe richieste chiaramente non valide. Sfortunatamente, dato che la memoria è allocata mediante un algoritmo euristico invece di di uno preciso, il sistema può risultare sovraccarico.
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 memory overcommitment.
![]() | 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.
pagecache — Controlla la percentuale totale della memoria del sistema usata per il page cache. Il seguente rappresenta un output tipico per questo file:
1 15 100 |
Il primo valore imposta la memoria minima da usare come buffer e come memoria della page cache. Il valore centrale stabilisce la percentuale di memoria del sistema, assegnata alla memoria buffer e della page cache, dove il sottosistema di gestione della memoria inizierà a vuotare la cache di buffer, più di altri tipi di memoria, per compensare una generale carenza di memoria libera. Il valore finale specifica la memoria massima da usare come memoria buffer, ma non è ancora implementata.
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.
pagetable_cache — controlla il numero di page table che vengono memorizzate in cache per processore. Il primo e il secondo valore si riferiscono rispettivamente al numero minimo e al numero massimo di page table da memorizzare.
Il file /usr/src/linux-2.4/Documentation/sysctl/vm.txt contiene informazioni aggiuntive su questi file.
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).
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 comune connessione di console per esempio le console virtuali disponibili quando viene digitata la combinazione di tasti
serial /dev/cua 5 64-127 serial:callout serial /dev/ttyS 4 64-127 serial 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 |
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 disciplina di linea. Questo consente al driver di inserire uno specifico 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 di blocchi di dati. SLIP e PPP sono comuni discipline di linea utilizzate per connettere tra loro vari sistemi mediante collegamento seriale.
Le discipline di linea registrate sono memorizzate nel file ldiscs e informazioni dettagliate sono disponibili all'interno della directory ldisc.