Questa breve guida spiega cos'è un runlevel, quanti runlevel ci sono in Linux e come controllare il runlevel nei sistemi operativi Linux.
Cos'è il runlevel?
Un livello di esecuzione è una delle modalità in cui verrà eseguito un sistema operativo basato su Unix. In altre parole, un livello di esecuzione è uno stato di init e l'intero sistema che definisce quali servizi di sistema stanno operando.
Nel kernel Linux esistono 7 runlevel, a partire da 0 a 6. Il sistema può essere avviato in un solo runlevel alla volta.
Per impostazione predefinita, un sistema si avvia al runlevel 3 o al runlevel 5. Il runlevel 3 è CLI e 5 è la GUI. Il runlevel predefinito è specificato in /etc/inittab
file nella maggior parte dei sistemi operativi Linux.
Usando il runlevel, possiamo scoprire facilmente se X è in esecuzione o la rete è operativa e così via.
1. Controlla il runlevel in Linux (SysV init)
Ecco l'elenco dei runlevel nelle distribuzioni Linux, che sono stati distribuiti con SysV init
come gestore del servizio predefinito.
- 0 - Ferma
- 1 - Modalità testo utente singolo
- 2 - Non utilizzato (definibile dall'utente)
- 3 - Modalità testo multiutente completo
- 4 - Non utilizzato (definibile dall'utente)
- 5 - Modalità grafica multiutente completa (con una schermata di accesso basata su X)
- 6 - Riavvia
Ora vediamo come trovare i runlevel.
Per scoprire il runlevel di sistema, apri il tuo Terminale ed esegui il seguente comando:
$ runlevel
Risultato di esempio:
N 3
Nell'output sopra, la lettera 'N'
indica che il runlevel non è stato modificato dall'avvio del sistema. E, 3
è il runlevel corrente, ovvero il sistema è in modalità CLI.
Nelle versioni più recenti di init
, puoi trovare i dettagli del runlevel corrente e precedente utilizzando le variabili di ambiente denominate RUNLEVEL
e PREVLEVEL
.
Supponiamo, ad esempio, che per scoprire il runlevel corrente, devi eseguire:
$ echo $RUNLEVEL
Per trovare il runlevel precedente:
$ echo $PREVLEVEL
Se desideri cambiare RunLevel in qualcos'altro, modifica /etc/inittab
file:
$ sudo vi /etc/inittab
Trova e modifica la voce initdefault
al runlevel di tua scelta. Supponiamo, ad esempio, di impostare il runlevel in modalità grafica multiutente (runlevel 5), modificarlo come mostrato di seguito.
id:5:initdefault:
Salva e chiudi il file. Riavvia il sistema per accedere al tuo nuovo runlevel.
Per maggiori dettagli sui runlevel, fare riferimento alle pagine man.
$ man runlevel
2. Controlla il runlevel in Linux (Systemd)
Nelle recenti versioni dei sistemi Linux (a partire da RHEL 7, Ubuntu 16.04 LTS), il concetto di runlevel è stato sostituito con systemd
obiettivi.
Ecco l'elenco di Systemd
target nelle distribuzioni Linux, che sono state distribuite con Systemd
come gestore del servizio predefinito.
- runlevel0.target, poweroff.target - Interrompi
- runlevel1.target, rescue.target - Modalità testo utente singolo
- runlevel2.target, multi-user.target - Non utilizzato (definibile dall'utente)
- runlevel3.target, multi-user.target - Modalità testo multiutente completa
- runlevel4.target, multi-user.target - Non utilizzato (definibile dall'utente)
- runlevel5.target,graphic.target - Modalità grafica multiutente completa (con una schermata di accesso basata su X)
- runlevel6.target,reboot.target - Riavvia
Nei sistemi Linux che utilizzano Systemd
come gestore di servizi predefinito, puoi trovare la destinazione corrente usando il comando:
$ systemctl get-default
Risultato di esempio:
graphical.target
Come puoi vedere nell'output sopra, il mio attuale runlevel (target in altre parole) è 5
, che è la modalità grafica.
Per visualizzare tutti i target attualmente caricati, esegui:
$ systemctl list-units --type target
Risultato di esempio:
UNIT LOAD ACTIVE SUB DESCRIPTION basic.target loaded active active Basic System bluetooth.target loaded active active Bluetooth cryptsetup.target loaded active active Local Encrypted Volumes getty.target loaded active active Login Prompts graphical.target loaded active active Graphical Interface local-fs-pre.target loaded active active Local File Systems (Pre) local-fs.target loaded active active Local File Systems multi-user.target loaded active active Multi-User System network-online.target loaded active active Network is Online network-pre.target loaded active active Network (Pre) network.target loaded active active Network nfs-client.target loaded active active NFS client services nss-lookup.target loaded active active Host and Network Name Lookups nss-user-lookup.target loaded active active User and Group Name Lookups paths.target loaded active active Paths remote-fs-pre.target loaded active active Remote File Systems (Pre) remote-fs.target loaded active active Remote File Systems rpc_pipefs.target loaded active active rpc_pipefs.target rpcbind.target loaded active active RPC Port Mapper slices.target loaded active active Slices sockets.target loaded active active Sockets sound.target loaded active active Sound Card swap.target loaded active active Swap sysinit.target loaded active active System Initialization timers.target loaded active active Timers veritysetup.target loaded active active Local Verity Integrity Protected Volumes LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 26 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.
Il comando precedente mostrerà solo i target attivi.
Per visualizzare tutti i target caricati (attivi e inattivi), esegui:
$ systemctl list-units --type target --all
Se desideri cambiare RunLevel in qualcos'altro, ad esempio runlevel3.target
, impostalo come mostrato di seguito:
$ sudo systemctl set-default runlevel3.target
Per passare a un'unità di destinazione diversa solo nella sessione corrente, eseguire il comando seguente:
$ sudo systemctl isolate runlevel3.target
Per maggiori dettagli, fare riferimento a Systemd
pagine man.
$ man systemd
Controlla il runlevel di Linux usando il comando 'chi'
Come suggerito da uno dei lettori nella sezione commenti qui sotto, possiamo anche trovare il runlevel usando who
comando come di seguito:
$ who -r
Risultato di esempio:
run-level 5 2021-06-09 10:21
Spero che questo aiuti.
Lettura correlata:
- Come elencare i servizi di avvio all'avvio in Linux