Cosa sono i runlevel su Linux?
Quando un sistema Linux si avvia, inserisce il suo runlevel predefinito e avvia gli script di avvio associati a quel runlevel. È anche possibile passare da un runlevel all'altro; ad esempio, esiste un runlevel progettato per operazioni di ripristino e manutenzione.
Tradizionalmente, Linux utilizzava script di init in stile System V - mentre i nuovi sistemi di init finiscono per avere obsoleti i runlevel tradizionali, non lo hanno ancora fatto. Ad esempio, il sistema Upstart di Ubuntu utilizza ancora gli script in stile System V tradizionali.
Cos'è un runlevel?
Quando si avvia un sistema Linux, avvia dentro processi. init è responsabile dell'avvio degli altri processi sul sistema. Ad esempio, quando avvii il tuo computer Linux, il kernel avvia init e init esegue gli script di avvio per inizializzare l'hardware, portare in rete, avviare il desktop grafico.
Tuttavia, non esiste una sola serie di script di avvio init. Esistono più livelli di esecuzione con i propri script di avvio: ad esempio, un runlevel può portare in rete e avviare il desktop grafico, mentre un altro runlevel può lasciare la rete disabilitata e saltare il desktop grafico. Ciò significa che è possibile passare da "modalità desktop grafico" a "modalità console di testo senza rete" con un unico comando, senza avviare e arrestare manualmente diversi servizi.
Più in particolare, init esegue gli script che si trovano in una directory specifica che corrisponde al runlevel. Ad esempio, quando si inserisce runlevel 3 su Ubuntu, init esegue gli script che si trovano nella directory /etc/rc3.d.
Almeno, questo è il modo in cui funziona con un sistema di avvio System V tradizionale: le distribuzioni Linux stanno iniziando a sostituire il vecchio sistema System V init. Mentre Upstart di Ubuntu attualmente mantiene la compatibilità con gli script SysV init, è probabile che cambi in futuro.
I runlevel
Alcuni runlevel sono standard tra le distribuzioni Linux, mentre alcuni runlevel variano dalla distribuzione alla distribuzione.
I seguenti runlevel sono standard:
- 0 - arresto (Spegne il sistema.)
- 1 - Modalità utente singolo (Il sistema si avvia in modalità superutente senza avviare daemon o rete. Ideale per l'avvio in un ambiente di ripristino o di diagnostica.)
- 6 - Reboot
I runlevel 2-5 variano a seconda della distribuzione. Ad esempio, su Ubuntu e Debian, i runlevel 2-5 sono uguali e forniscono una modalità multiutente completa con accesso di rete e grafico. Su Fedora e Red Hat, runlevel 2 fornisce la modalità multiutente senza rete (solo accesso alla console), runlevel 3 fornisce modalità multiutente con rete (solo accesso alla console), runlevel 4 non utilizzato e runlevel 5 fornisce modalità multiutente con connessione di rete e accesso grafico.
Passare a un runlevel diverso
Per passare a un runlevel diverso mentre il sistema è già in esecuzione, utilizzare il seguente comando:
sudo telinit #
Sostituisci # con il numero del runlevel a cui vuoi passare. Ometti sudo ed esegui il comando come root se stai eseguendo una distribuzione che non usa sudo.
Avvio diretto a un runlevel specifico
È possibile selezionare un runlevel da avviare dal boot loader - Grub, ad esempio. All'inizio del processo di avvio, premere un tasto per accedere a Grub, selezionare la voce di avvio e premere e per modificarlo.
Puoi aggiungere singolo alla fine del linux linea per inserire il runlevel per utente singolo (runlevel 1). (Premi Ctrl + x per avviare dopo.) Questa è la stessa opzione di ripristino in Grub.
Tradizionalmente, è possibile specificare un numero come parametro del kernel e si dovrebbe avviare tale runlevel, ad esempio utilizzando 3 invece di singolo per avviare il runlevel 3. Tuttavia, questo non sembra funzionare sulle ultime versioni di Ubuntu - Upstart non sembra consentirlo. Allo stesso modo, il modo in cui cambi il runlevel predefinito dipenderà dalla tua distribuzione.
Mentre il demone Upstart di Ubuntu emula ancora il sistema init di SystemV, molte di queste informazioni cambieranno in futuro. Ad esempio, Upstart è basato su eventi: può arrestare e avviare servizi quando si verificano eventi (ad esempio, un servizio può essere avviato quando un dispositivo hardware è connesso al sistema e si ferma quando il dispositivo viene rimosso). Fedora ha anche il suo successore inizializzare, systemd.