Il processo tradizionale di avvio (boot) prevede i seguenti passi:
Successivamente al caricamento di init vengono compiuti i seguenti passi:
La seconda parte del processo di avvio avviene in maniera diversa a seconda della distribuzione.
In particolare:
I due bootloader (caricatori del sistema operativo) più comunemente usati con Linux sono LILO (Linux Loader) e GNU GRUB (GRand Unified Bootloader):
liloIl file di configurazione di init è /etc/inittab: esso contiene informazioni sul runlevel di default, sul numero di terminali da attivare, sul trap della combinazione di tasti ctrl-alt-del ecc.
Un runlevel consiste nella definizione dello stato di un sistema mediante l'indicazione di quali programmi devono essere eseguiti (eventualmente, in quale ordine) e di quali servizi devono essere attivati.
Tradizionalmente, vengono individuati i seguenti runlevel:
Per sapere qual è il runlevel corrente si può impartire il comando runlevel (che mostra anche il runlevel precedente, oppure N se questo è assente).
$ runlevel
N 2
Per passare da un runlevel ad un altro si può usare il comando telinit.
Gli script di avvio/terminazione dei servizi (o, in generale, dei programmi) da eseguire quando si entra o esce in un determinato runlevel sono posti nella directory /etc/init.d (Debian) o /etc/rc.d/init.d (RedHat).
Si tratta di script impostati in modo da poter essere invocati anche manualmente per avviare (parametro start), terminare (parametro stop), riavviare (parametro restart) un servizio (oppure, con il parametro reload, fargli rileggere il file di configurazione).
$ sudo /etc/init.d/apache2 start
* Starting web server apache2 [ OK ]
$ sudo /etc/init.d/apache2 reload
* Reloading web server config apache2 [ OK ]
$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2 [ OK ]
$ sudo /etc/init.d/apache2 stop
* Stopping web server apache2 [ OK ]
Le varie distribuzioni mettono a disposizione "scorciatoie" per invocare questi script, come service e invoke-rc.d.
Cosa esattamente avviare quando il sistema entra in un particolare runlevel è determinato dai link simbolici presenti nella directory di quel runlevel.
I link simbolici hanno un nome che inizia per S (start) o per K (kill), più un numero che indica la priorità (utile se si vuole garantire che un determinato servizio parta solo dopo un altro).
$ ls /etc/rc2.d/
K74bluetooth S11klogd S20hotkey-setup S20samba S89anacron S99rc.local
README S12dbus S20incron S22consolekit S89atd S99rmnologin
S05vbesave S12hal S20makedev S23ntp S89cron S99stop-readahead
S10acpid S16ssh S20nvidia-kernel S24avahi-daemon S91apache2
S10powernowd.early S19cupsys S20postfix S24dhcdbd S98usplash
S10sysklogd S20apmd S20powernowd S30gdm S99acpi-support
S10xserver-xorg-input-wacom S20apport S20rsync S65firestarter S99laptop-mode
La configurazione dei runlevel può essere fatta:

Uso di sysvconfig
La configurazione dei vari servizi può essere agevolmente effettuata con chkconfig, strumento tipico dei sistemi RedHat ma portato anche su Ubuntu.
$ sudo chkconfig --add verysimplewebserver
Adding system startup for /etc/init.d/verysimplewebserver ...
$ sudo chkconfig --del verysimplewebserver
Removing any system startup links for /etc/init.d/verysimplewebserver ...
$ sudo chkconfig --level 234 verysimplewebserver on
Adding system startup for /etc/init.d/verysimplewebserver ...
$ chkconfig --list | grep verysimplewebserver
verysimplewebserver 1:none 2:on 3:on 4:on 5:none 6:none S:none
Sotto Ubuntu, con l'opzione --dryrun si può vedere quali comandi verrebbero eseguiti.
Gli script relativi ai servizi contengono delle informazioni, sotto forma di commento, che vengono utilizzate per sapere quali sono i livelli di priorità di default.
Le prime righe dello script httpd di un sistema Fedora 8:
#!/bin/bash
# httpd Startup script for the Apache HTTP Server
# chkconfig: - 85 15
Le prime righe dello script apache2 di un sistema Ubuntu 7.10:
#!/bin/sh -e
[snip]
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
I sistemi moderni (specialmente desktop e laptop) hanno bisogno di gestire la sequenza di avvio:
Sono state studiate diverse forme moderne di gestione della sequenza di avvio:
Nei sistemi che usano Upstart, la configurazione di init viene fatta attraverso i file presenti nella directory /etc/event.d.
Per spegnere il sistema si deve impartire il comando shutdown.
$ sudo shutdown -h now # spegne il sistema immediatamente
$ sudo shutdown -r now # riavvia il sistema dopo averlo spento
$ sudo shutdown -t 10 # spegne il sistema dopo 10 secondi
Per altre opzioni interessanti, si veda shutdown(8).
Sono normalmente a disposizione anche le forme sintetiche halt, reboot e poweroff.
find).