5.3. Directory all'interno di /proc

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:

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:

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

5.3.3. /proc/driver/

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:

/usr/share/doc/kernel-doc-<version>/Documentation/rtc.txt.

5.3.4. /proc/fs

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.

NotaNota 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:

    name                value          min          max          mode
    ----                -----          ---          ---          ----
    acoustic            0              0            254          rw
    address             0              0            2            rw
    bios_cyl            38752          0            65535        rw
    bios_head           16             0            255          rw
    bios_sect           63             0            63           rw
    bswap               0              0            1            r
    current_speed       68             0            70           rw
    failures            0              0            65535        rw
    init_speed          68             0            70           rw
    io_32bit            0              0            3            rw
    keepsettings        0              0            1            rw
    lun                 0              0            7            rw
    max_failures        1              0            65535        rw
    multcount           16             0            16           rw
    nice1               1              0            1            rw
    nowerr              0              0            1            rw
    number              0              0            3            rw
    pio_mode            write-only     0            255          w
    unmaskirq           0              0            1            rw
    using_dma           1              0            1            rw
    wcache              1              0            1            rw

5.3.6. /proc/irq/

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:

/usr/share/doc/kernel-doc-<version>/Documentation/filesystems/proc.txt

5.3.7. /proc/net/

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/:

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:

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, 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.

CautelaAttenzione
 

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

NotaNota 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:

    /lib/modules/<kernel-version>/build/include/linux/capability.h.

  • 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.

    ImportanteImportante
     

    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.

    CautelaAttenzione
     

    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.

CautelaAttenzione
 

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:

/usr/share/doc/kernel-doc-<version>/Documentation/filesystems/proc.txt

5.3.9.5. /proc/sys/vm/

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.

    SuggerimentoSuggerimento
     

    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:

    /usr/share/doc/kernel-doc-<version>/Documentation/laptop-mode.txt

  • 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:

    /usr/share/doc/kernel-doc-<version>/Documentation/filesystems/proc.txt

  • 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:

    /usr/share/doc/kernel-doc-<version>/Documentation/vm/hugetlbpage.txt

  • 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.

      NotaNota 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:

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 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.