Show Table of Contents
F.2.4. Il programma /sbin/init
Il programma
/sbin/init (chiamato anche init) coordina la fase restante del processo di avvio e configura l'ambiente per l'utente.
Quando il comando
init viene eseguito, diventa il genitore di tutti i processi che si avviano automaticamente sul sistema. Innanzitutto esegue lo script /etc/rc.d/rc.sysinit che imposta il percorso dell'ambiente, attiva lo swap, controlla i filesystem e si occupa di tutti i processi che vanno eseguiti per l'inizializzazione del sistema. Per esempio, la maggior parte dei sistemi utilizza un orologio, così rc.sysinit legge il file di configurazione /etc/sysconfig/clock per inizializzare l'orologio dell'hardware. Un altro esempio potrebbe essere quello con il quale è necessario inizializzare processi speciali per le porte seriali, rc.sysinit può eseguire anche il file /etc/rc.serial.
Il comando
init esegue a sua volta i lavori nella directory /etc/event.d, i quali descrivono come impostare il sistema in ogni SysV init runlevel. I runlevel sono uno stato, o una modalità, definiti dai servizi elencati nella directory SysV /etc/rc.d/rc<x>.d/, dove <x> rappresenta il numero del runlevel. Per maggiori informazioni sui runlevel SysV init, consultare la Sezione F.4, «SysV Init Runlevels».
Successivamente il comando
init imposta la libreria di funzione del sorgente, /etc/rc.d/init.d/functions, per il sistema il quale a sua volta configura il modo di avvio o come eliminare e determinare il PID di un programma.
A questo punto il programma
init avvia tutti i processi di background cercando nella relativa directory rc, il runlevel specificato come predefinito in /etc/inittab. Le directory rc sono numerate in modo da corrispondere ai runlevel che rappresentano. Per esempio /etc/rc.d/rc5.d/ è la directory per il runlevel 5.
Quando si esegue l'avvio dal runlevel 5, il programma
init và alla ricerca nella directory /etc/rc.d/rc5.d/ per determinare quali processi iniziare e quali arrestare.
Di seguito è riportato un esempio che illustra la directory
/etc/rc.d/rc5.d/:
K05innd -> ../init.d/innd K05saslauthd -> ../init.d/saslauthd K10dc_server -> ../init.d/dc_server K10psacct -> ../init.d/psacct K10radiusd -> ../init.d/radiusd K12dc_client -> ../init.d/dc_client K12FreeWnn -> ../init.d/FreeWnn K12mailman -> ../init.d/mailman K12mysqld -> ../init.d/mysqld K15httpd -> ../init.d/httpd K20netdump-server -> ../init.d/netdump-server K20rstatd -> ../init.d/rstatd K20rusersd -> ../init.d/rusersd K20rwhod -> ../init.d/rwhod K24irda -> ../init.d/irda K25squid -> ../init.d/squid K28amd -> ../init.d/amd K30spamassassin -> ../init.d/spamassassin K34dhcrelay -> ../init.d/dhcrelay K34yppasswdd -> ../init.d/yppasswdd K35dhcpd -> ../init.d/dhcpd K35smb -> ../init.d/smb K35vncserver -> ../init.d/vncserver K36lisa -> ../init.d/lisa K45arpwatch -> ../init.d/arpwatch K45named -> ../init.d/named K46radvd -> ../init.d/radvd K50netdump -> ../init.d/netdump K50snmpd -> ../init.d/snmpd K50snmptrapd -> ../init.d/snmptrapd K50tux -> ../init.d/tux K50vsftpd -> ../init.d/vsftpd K54dovecot -> ../init.d/dovecot K61ldap -> ../init.d/ldap K65kadmin -> ../init.d/kadmin K65kprop -> ../init.d/kprop K65krb524 -> ../init.d/krb524 K65krb5kdc -> ../init.d/krb5kdc K70aep1000 -> ../init.d/aep1000 K70bcm5820 -> ../init.d/bcm5820 K74ypserv -> ../init.d/ypserv K74ypxfrd -> ../init.d/ypxfrd K85mdmpd -> ../init.d/mdmpd K89netplugd -> ../init.d/netplugd K99microcode_ctl -> ../init.d/microcode_ctl S04readahead_early -> ../init.d/readahead_early S05kudzu -> ../init.d/kudzu S06cpuspeed -> ../init.d/cpuspeed S08ip6tables -> ../init.d/ip6tables S08iptables -> ../init.d/iptables S09isdn -> ../init.d/isdn S10network -> ../init.d/network S12syslog -> ../init.d/syslog S13irqbalance -> ../init.d/irqbalance S13portmap -> ../init.d/portmap S15mdmonitor -> ../init.d/mdmonitor S15zebra -> ../init.d/zebra S16bgpd -> ../init.d/bgpd S16ospf6d -> ../init.d/ospf6d S16ospfd -> ../init.d/ospfd S16ripd -> ../init.d/ripd S16ripngd -> ../init.d/ripngd S20random -> ../init.d/random S24pcmcia -> ../init.d/pcmcia S25netfs -> ../init.d/netfs S26apmd -> ../init.d/apmd S27ypbind -> ../init.d/ypbind S28autofs -> ../init.d/autofs S40smartd -> ../init.d/smartd S44acpid -> ../init.d/acpid S54hpoj -> ../init.d/hpoj S55cups -> ../init.d/cups S55sshd -> ../init.d/sshd S56rawdevices -> ../init.d/rawdevices S56xinetd -> ../init.d/xinetd S58ntpd -> ../init.d/ntpd S75postgresql -> ../init.d/postgresql S80sendmail -> ../init.d/sendmail S85gpm -> ../init.d/gpm S87iiim -> ../init.d/iiim S90canna -> ../init.d/canna S90crond -> ../init.d/crond S90xfs -> ../init.d/xfs S95atd -> ../init.d/atd S96readahead -> ../init.d/readahead S97messagebus -> ../init.d/messagebus S97rhnsd -> ../init.d/rhnsd S99local -> ../rc.local
Come illustrato in questa lista, nessuno degli script che avviano e arrestano realmente i servizi si trova nella directory
/etc/rc.d/rc5.d/ . Tutti i file in /etc/rc.d/rc5.d/ sono link simbolici diretti a script che si trovano nella directory /etc/rc.d/init.d/. I link simbolici sono utilizzati in ciascuna delle directory rc per fare in modo che i runlevel possano essere riconfigurati creando, modificando ed eliminando i link simbolici senza influire sugli script a cui fanno riferimento.
Il nome di ciascun link simbolico inizia con
K o S. I link K sono processi che vengono terminati, mentre quelli che iniziano con S vengono avviati.
Il comando
init arresta innanzitutto i link simbolici K della directory eseguendo il comando /etc/rc.d/init.d/<command> stop, in cui <command> è il processo da terminare. Avvia quindi tutti i link simbolici S eseguendo il comando /etc/rc.d/init.d/<command> start.
Nota
Una volta terminato il processo d'avvio del sistema, sarà possibile eseguire il login come utente root ed eseguire gli stessi script per avviare ed arrestare i servizi. Per esempio, il comando
/etc/rc.d/init.d/httpd stop arresta il server HTTP di Apache.
Ciascuno dei link simbolici è numerato in modo da stabilire l'ordine di avvio. Potete modificare l'ordine in cui i servizi vengono avviati o interrotti cambiando questo numero. Più il numero è basso, prima il servizio corrispondente viene avviato. I link simbolici che presentano lo stesso numero, vengono avviati in base ad un ordine alfabetico.
Nota
Una delle ultime cose che il programma
init esegue è il file /etc/rc.d/rc.local. Il suddetto file è molto utile durante il processo di personalizzazione del sistema. Per maggiori informazioni su come utilizzare il file rc.local, consultare la Sezione F.3, «Esecuzione di programmi aggiuntivi durante l'avvio».
Dopo che il comando
init è passato attraverso la directory appropriata rc del runlevel, Upstart dirama un processo /sbin/mingetty per ogni console virtuale (prompt di login) assegnata al runlevel dalla definizione del lavoro nella directory /etc/event.d. Dal runlevel 2 fino al 5 sono presenti tutte e sei le console virtuali, mentre il runlevel 1 (modalità utente singolo) ne ha solo una, ed i runlevel 0 e 6 non presentano alcuna console virtuale. Il processo /sbin/mingetty apre alcuni percorsi di comunicazione per i dispositivi tty [16], imposta le rispettive modalità, stampa il prompt di login, accetta la password ed il nome utente ed inizializza il processo di login.
Nel runlevel 5, Upstart esegue uno script chiamato
/etc/X11/prefdm. Lo script prefdm esegue un X display manager preferito[17] — gdm, kdm, o xdm, in base al contenuto del file /etc/sysconfig/desktop.
Una volta terminato il sistema è operativo sul runlevel 5, e mostra anche una schermata di login.

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.