Un runlevel è uno stato operativo predefinito di un sistema UNIX o Linux che determina quali servizi e processi sono disponibili dopo l'avvio.

Che cos'è Runlevel?
Un runlevel è un concetto in UNIX e Linux sistemi operativi che definisce uno stato specifico della macchina determinando quali processi, servizi e risorse di sistema sono attivi. Agisce come un framework per il controllo dell'avvio e dell'arresto del sistema, consentendo amministratori per gestire l'ambiente in base alle esigenze operative. Ogni livello di esecuzione corrisponde a una modalità specifica, come la manutenzione del sistema, il funzionamento multiutente basato su testo o la disponibilità completa dell'interfaccia grafica.
All'avvio, il sistema accede a un runlevel predefinito definito nella configurazione e il processo init garantisce che venga avviato o arrestato il set corretto di servizi in base a tale livello. Modificando il runlevel, gli amministratori possono adattare rapidamente il sistema a diverse attività, come la risoluzione dei problemi in modalità utente singolo, l'esecuzione senza rete per motivi di sicurezza o l'abilitazione di servizi di rete e grafici completi per l'uso regolare. Questo meccanismo fornisce un modo standardizzato ed efficiente per gestire il comportamento del sistema senza richiedere l'intervento manuale per ogni singolo servizio.
Diversi livelli di esecuzione di Linux
Ecco una tabella strutturata dei tradizionali livelli di esecuzione di Linux SysV e dei loro scopi:
| Livello di esecuzione | Descrizione | Tipico caso d'uso |
| 0 | Arresto (arresto) | Spegne il sistema in modo sicuro. |
| 1 | Modalità utente singolo | Modalità di manutenzione o di emergenza con Accesso root solo, niente networking. |
| 2 | Modalità multiutente senza rete | Fornisce accessi per più utenti ma disabilita i servizi di rete (varia in base alla distribuzione). |
| 3 | Modalità multiutente completa con rete | Modalità standard basata su testo e non grafica con tutti i servizi e la rete abilitati. |
| 4 | Non definito / definibile dall'utente | Raramente utilizzato; disponibile per configurazione personalizzata. |
| 5 | Modalità multiutente con rete e GUI | Avvia l'ambiente desktop grafico con funzionalità di rete complete. |
| 6 | riavvio | Riavvia il sistema in modo sicuro. |
A cosa serve Runlevel?
I livelli di esecuzione vengono utilizzati per controllare lo stato operativo di un Linux o sistema UNIX definendo quali servizi, processi e risorse di sistema devono essere attivi in un dato momento. Consentono agli amministratori di gestire il comportamento del sistema durante l'avvio, l'arresto o le transizioni tra diverse modalità operative.
Ad esempio, un sistema può essere impostato in modalità utente singolo per la risoluzione dei problemi, commutato in modalità multiutente per le normali server operazioni o avviato in un'interfaccia grafica per l'utilizzo desktop. Impostando o modificando il runlevel, gli amministratori possono abilitare o disabilitare rapidamente gruppi di servizi, risparmiare risorse di sistema, eseguire attività di manutenzione o garantire che la macchina funzioni nella configurazione più appropriata per il ruolo previsto. Questo approccio strutturato contribuisce a mantenere coerenza, sicurezza ed efficienza in diversi ambienti.
Come controllare il livello di esecuzione?
È possibile controllare il livello di esecuzione corrente su un sistema Linux utilizzando comandi che segnalano lo stato operativo del sistema. Su sistemi tradizionali sysvinit sistemi, il comando runlevel visualizza i runlevel precedenti e attuali, mentre il comando who -r mostra il runlevel attuale in modo più dettagliato.
Su moderno basato su systemd distribuzioni, che sostituiscono i livelli di esecuzione con obiettivi, il comando equivalente è systemctl get-default per vedere la destinazione predefinita e systemctl isolate per passare a un altro. Inoltre, systemctl list-units --type=target fornisce informazioni sui target attivi, che corrispondono a runlevel come multi-user.target o graphical.target.
Come cambiare il runlevel in Linux?

La modifica del runlevel in Linux dipende dal fatto che il sistema utilizzi la versione precedente sysvinit quadro o il moderno systemd sistema di inizializzazione.
Sistemi basati su SysVinit
Il runlevel può essere modificato temporaneamente con il comando init o telinit seguito dal numero del runlevel. Ad esempio, eseguendo init 3 il sistema passa alla modalità multiutente senza interfaccia grafica, mentre init 5 avvia l'ambiente desktop grafico. Per rendere la modifica permanente, il runlevel predefinito deve essere modificato nel file /etc/inittab, dove il sistema legge quale runlevel utilizzare. stivale in modo predefinito.
Sistemi basati su Systemd
I livelli di esecuzione vengono sostituiti con obiettiviPer passare temporaneamente a un'altra destinazione, utilizzare systemctl isolate , ad esempio systemctl isolate multi-user.target per accedere alla modalità testo o systemctl isolate graphical.target per avviare la GUI. Per modificare l'impostazione predefinita per gli avvii futuri, eseguire systemctl set-default , che aggiorna il collegamento simbolico per la destinazione di sistema predefinita.
Perché il runlevel è importante?
Ecco un elenco dei motivi per cui i livelli di esecuzione sono importanti nei sistemi Linux e Unix:
- Controllo del sistemaI livelli di esecuzione definiscono quali servizi e processi devono essere eseguiti, offrendo agli amministratori un controllo preciso sullo stato operativo del sistema.
- FlessibilitàConsentono di passare rapidamente da una modalità all'altra, ad esempio la modalità utente singolo per la manutenzione o la modalità grafica per l'uso desktop.
- TroubleshootingGli amministratori possono avviare ambienti minimi (come il livello di esecuzione 1) per correggere errori di configurazione o ripristinare il sistema in seguito a guasti.
- Gestione delle RisorseDisabilitando i servizi non necessari in determinati livelli di esecuzione, il sistema può risparmiare CPU, memoriae potere.
- Sicurezza I livelli di esecuzione inferiori possono limitare l'accesso a utenti e servizi, il che è utile quando si desidera isolare il sistema durante la manutenzione o in caso di sospetta compromissione.
- ConsistenzaForniscono una struttura standardizzata per gli stati di sistema su diversi sistemi simili a Unix, semplificando l'amministrazione.
- Automazione. Script e le configurazioni legate ai livelli di esecuzione semplificano l'avvio, l'arresto e le transizioni, riducendo il lavoro manuale.
Problemi di runlevel
Ecco una panoramica dei problemi più comuni relativi ai livelli di esecuzione e del perché sono importanti:
- Livello di esecuzione predefinito non configurato correttamenteSe il livello di esecuzione predefinito del sistema (o destinazione systemd) è impostato in modo errato, la macchina potrebbe avviarsi in uno stato indesiderato, come la modalità grafica su un servero una modalità non in rete su una workstation, con conseguente spreco di risorse o usabilità limitata.
- Impossibilità di caricare i servizi critici. A un dato livello di esecuzione, alcuni demoni dovrebbero avviarsi automaticamente. Se errori di configurazione ne impediscono l'avvio, il sistema potrebbe non disporre di funzionalità di rete, servizi di visualizzazione o persino funzionalità di accesso essenziali, risultando parzialmente o totalmente inutilizzabile.
- Impossibilità di cambiare i livelli di esecuzioneProblemi con gli script di inizializzazione o il servizio dipendenze può impedire al sistema di cambiare modalità dinamicamente. Ad esempio, il passaggio dal runlevel 3 (multiutente basato su testo) al runlevel 5 (grafico) potrebbe non riuscire se il display manager non è configurato correttamente o è assente.
- Cicli di avvio o arresti anomaliUna configurazione del livello di esecuzione errata o non funzionante può causare il ripetuto tentativo del sistema di caricare servizi incompatibili, con conseguenti continui riavvii o Kernel panico. Questo accade spesso quando il runlevel predefinito punta a una modalità che richiede non disponibile hardware o software.
- Comportamento incoerente tra le distribuzioni. Non tutto Distribuzioni Linux I runlevel vengono gestiti allo stesso modo. Ad esempio, alcuni usano il runlevel 2 come modalità multiutente predefinita, mentre altri usano il runlevel 3 o 5. Questo può creare confusione ed errori di configurazione quando gli amministratori lavorano su più sistemi.
- Transizione agli obiettivi systemdI moderni sistemi Linux hanno ampiamente sostituito i runlevel con i target systemd. Sebbene svolgano uno scopo simile, le differenze nella terminologia e nei comandi possono causare problemi agli amministratori abituati a SysVinit, causando errori nella gestione dei servizi e nel ripristino del sistema.
Qual è la differenza tra Target e Runlevel?
Ecco una tabella comparativa che spiega la differenza tra runlevel e obiettivi in Linux:
| Aspetto | Livello di esecuzione (SysVinit) | Destinazione (systemd) |
| Definizione | Uno stato numerico predefinito (0–6) che determina quali servizi e processi vengono avviati. | Un'unità denominata in systemd che raggruppa i servizi e definisce lo stato del sistema. |
| Formato | Identificato da numeri (ad esempio, runlevel 3 = multiutente senza GUI). | Identificato da nomi descrittivi (ad esempio, multi-user.target, graphical.target). |
| File di configurazione | Controllato tramite /etc/inittab. | Gestito con file di unità in /etc/systemd/system/ e /lib/systemd/system/. |
| Flessibilità | Stati fissi con personalizzazione limitata (per lo più 7 livelli di esecuzione). | Altamente flexibile, consentendo target e dipendenze personalizzati. |
| Stato predefinito | Impostato in /etc/inittab. | Impostato con systemctl set-default . |
| Cambia comando | Modificato temporaneamente con init o telinite . | Modificato temporaneamente con systemctl isolate . |
| Estensibilità | Non facilmente estensibile; legato al legacy SysVinit. | Completamente estensibile: gli amministratori possono creare nuovi obiettivi per esigenze specifiche. |
| Controllo dello stato attuale | Controllato con runlevel o who -r. | Verificato con systemctl get-default o systemctl list-units --type=target. |