GNU/Linux >> Linux Esercitazione >  >> Linux

Comprendere i runlevel di Linux nel modo giusto

Puoi pensare ai runlevel di Linux come a diverse "modalità" in cui viene eseguito il sistema operativo. Ciascuna di queste modalità, o runlevel, ha il suo elenco di processi e servizi che possono essere attivati ​​o disattivati. Dal momento in cui Linux si avvia, è sempre in qualche runlevel.

Questo runlevel potrebbe cambiare mentre continui a utilizzare il tuo computer, a seconda del tipo di servizi a cui il sistema operativo ha bisogno di accedere.

Ad esempio, l'esecuzione della tua macchina Linux con un'interfaccia utente grafica richiederà un runlevel diverso rispetto a se stessi eseguendo solo la riga di comando sul tuo sistema.

Questo perché l'interfaccia utente grafica avrà bisogno dell'accesso a vari servizi che la riga di comando semplicemente non ha. Affinché il sistema determini quali servizi devono essere attivati ​​(o disattivati), cambia il runlevel secondo necessità.

Importanza dei runlevel Linux

Potresti aver usato Linux per anni senza renderti conto che ci sono diversi runlevel. Questo perché non è qualcosa che la maggior parte degli amministratori di server dovrà configurare spesso.

Tuttavia, i runlevel di Linux offrono agli amministratori un maggiore controllo sui sistemi che gestiscono.

È possibile modificare il runlevel in cui si trova un sistema (cosa che vedremo più avanti nell'articolo), così come i servizi che vengono eseguiti all'interno dei runlevel. Questo ci consente il controllo completo sui servizi a cui i nostri sistemi hanno accesso in qualsiasi momento.

Quanti runlevel ci sono in Linux?

Ci sono sette diversi runlevel in Linux, da zero a sei. Varie distribuzioni possono utilizzare i sette runlevel in modo diverso, quindi non è molto facile compilare un elenco definitivo di ciò che fanno i runlevel.

Invece, dovresti controllare come funzionano i runlevel sulla distribuzione specifica che stai utilizzando. Per la maggior parte, l'elenco seguente rappresenta il modo in cui le distribuzioni Linux generalmente configurano i runlevel:

Livello 0 spegne il sistema.

Livello 1 è una modalità utente singolo, utilizzata per attività di manutenzione o amministrative. Potresti anche vedere questa modalità denominata runlevel S (la S sta per utente singolo).

Livello 2 è una modalità multiutente. Questo runlevel non utilizza alcun servizio di rete.

Livello 3 è una modalità multiutente con rete. Questo è il normale runlevel a cui sei abituato se utilizzi un sistema che non si avvia in una GUI (interfaccia utente grafica).

Livello 4 non viene utilizzato. L'utente può personalizzare questo runlevel per i propri scopi (che vedremo come fare più avanti nell'articolo).

Livello 5 è lo stesso del runlevel 3, ma avvia anche un display manager. Questo è il runlevel che stai usando se usi un sistema che si avvia in una GUI.

Livello 6 riavvia il sistema.

Qual ​​è il mio attuale livello di esecuzione?

Puoi vedere il tuo attuale runlevel sulla maggior parte delle distribuzioni semplicemente digitando "runlevel" nel terminale.

Quando inserisci il comando "runlevel", ti darà due numeri diversi. Il primo numero è il livello di esecuzione precedente in esecuzione sul sistema e il secondo numero è il livello di esecuzione corrente del sistema.

Nello screenshot sopra, la "N" è l'abbreviazione di "none", il che significa che il sistema non era in nessun runlevel diverso in precedenza. Il "5" significa che il nostro sistema è attualmente nel runlevel 5.

In questo esempio stiamo eseguendo CentOS, che è stato avviato direttamente in un'interfaccia grafica, ecco perché il sistema è passato direttamente al runlevel 5.

Come modificare il runlevel corrente?

Puoi cambiare il runlevel corrente del tuo sistema usando il comando "telinit". Ad esempio, per passare al runlevel 3 su CentOS, devi digitare:

$ telinit 3

Tieni presente che devi essere l'utente root per eseguire questo comando. Tieni presente che i runlevel funzionano in modo diverso su Debian e Ubuntu, ad esempio Ubuntu si avvierà nel runlevel 5 anche senza avviare una GUI.

Se segui l'esempio sopra, lo schermo potrebbe diventare vuoto. Questo perché sei rimasto al - ora vuoto - tty. Basta fare Alt+F1 (o qualche altro tasto funzione) sulla tastiera per essere portato su un terminale funzionante.

Se utilizziamo di nuovo il comando "runlevel", vedremo che ora siamo nel runlevel 3 e il runlevel precedente è elencato come 5 poiché l'abbiamo appena cambiato.

Target di sistema Linux vs. runlevel

Negli ultimi anni, systemd è arrivato a sostituire il sistema di lunga data "System V init" (runlevel). Funziona ancora sostanzialmente allo stesso modo, ma utilizza alcuni nuovi comandi e comunemente si riferisce invece ai "runlevel" come "bersagli".

Runlevel 0 =poweroff.target (runlevel0.target)

Runlevel 1 =rescue.target (runlevel1.target)

Runlevel 2 =multiutente.target (runlevel2.target)

Runlevel 3 =multiutente.target (runlevel3.target)

Runlevel 4 =multiutente.target (runlevel4.target)

Runlevel 5 =graphical.target (runlevel5.target)

Runlevel 6 =reboot.target (runlevel6.target)

Continueremo ad esaminare systemd e i comandi che dovrai conoscere con l'avanzare di questo tutorial.

Come modificare il runlevel predefinito all'avvio?

Ci sono molte ragioni per cui potresti voler avviare un runlevel diverso. Ad esempio, è normale che gli amministratori di sistema si avviino dalla riga di comando e avviino un'interfaccia grafica solo quando ritenuto necessario.

Per questa funzionalità, devi assicurarti che il tuo runlevel predefinito sia impostato su 3 e non su 5.

In passato, era necessario modificare il file /etc/inittab per definire il runlevel predefinito all'avvio. Potresti ancora scoprire che questo è il caso di alcune distribuzioni.

Se lavori con un sistema operativo che non è stato aggiornato per alcuni anni, troverai comunque questo metodo pertinente per te.

$ vi /etc/inittab

Nello screenshot sopra, il runlevel 5 è attualmente impostato sul runlevel predefinito per l'avvio.

A partire dal 2016, la maggior parte delle principali distribuzioni Linux ha eliminato gradualmente il file /etc/inittab a favore di target systemd:tratteremo le differenze più avanti in questo articolo.

Potresti scoprire che il tuo sistema non ha affatto il file /etc/inittab, oppure il tuo file inittab potrebbe consigliarti di usare systemd invece come, in questo screenshot dal nostro sistema CentOS.

Per controllare l'attuale destinazione predefinita del tuo sistema:

$ systemctl get-default

Nello screenshot sopra, la risposta dal sistema è "graphical.target". Come probabilmente puoi immaginare, questo è l'equivalente del runlevel 5.

Per vedere gli altri target disponibili e i runlevel a cui sono associati, digita:

$ ls -l /lib/systemd/system/runlevel*

Questi collegamenti simbolici ci dicono che i target systemd funzionano più o meno allo stesso modo dei runlevel. Quindi, come possiamo cambiare il runlevel (o target) predefinito all'avvio? Dobbiamo creare un nuovo collegamento simbolico, come questo:

$ ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target

Questo comando cambierà il nostro livello di esecuzione predefinito in 3, quindi al prossimo riavvio, il nostro sistema sarà nel livello di esecuzione 3 invece di 5. Se si desidera un livello di esecuzione diverso, è sufficiente sostituire un numero diverso al posto del "3" in il comando.

Per riferimento, l'opzione -f in quel comando indica che il file di destinazione deve essere rimosso prima di creare il nuovo collegamento. Potresti anche rimuoverlo prima con un semplice comando rm.

Puoi confermare che la modifica è stata eseguita correttamente con il comando "systemctl get-default".

Runlevel 3 vs. runlevel 5

I due runlevel di cui sentirai parlare e con cui lavorerai di più saranno il 3 e il 5. Fondamentalmente si riduce a questo:il runlevel 3 è una riga di comando e il runlevel 5 è un'interfaccia utente grafica.

Ovviamente, non tutte le distribuzioni seguono questa convenzione e il tuo sistema potrebbe essere configurato da un amministratore in modo che questi runlevel abbiano ancora più differenze.

Ma, in generale, è così che funziona. Se vuoi vedere quali servizi sono abilitati in entrambi questi runlevel, ne parleremo nella prossima sezione.

Elenca i servizi abilitati a un particolare runlevel

Fino agli ultimi anni, "chkconfig –list" era il comando per elencare i servizi che sarebbero stati abilitati a diversi runlevel. Se il tuo sistema operativo è aggiornato, quel comando potrebbe darti un errore o rimandarti a systemd.

Se vogliamo vedere quali servizi verranno avviati all'avvio in modalità grafica (runlevel 5), possiamo eseguire questo comando:

$ systemctl list-dependencies graphical.target

Per vedere i servizi che vengono eseguiti di default su altri runlevel, basta sostituire “graphical.target” con il nome del target che devi vedere.

Sotto quale runlevel verrà eseguito un processo?

Se desideri vedere a quale livello di esecuzione viene eseguito un servizio specifico, puoi utilizzare questo comando:

$ systemctl show -p WantedBy [name of service]

Ad esempio, se vuoi vedere a quale runlevel verrà eseguito il demone SSH, devi digitare:

$ systemctl show -p WantedBy sshd.service

Secondo l'output nella schermata sopra, il servizio SSH verrà avviato sui runlevel 2, 3 e 4 (multi-user.target)

Come modificare il runlevel di un'applicazione?

Come visto sopra, il nostro servizio SSH è in esecuzione solo ai runlevel 2-4 (multi-user.target). E se volessimo che si avvii anche all'avvio in un'interfaccia grafica – runlevel 5 (graphical.target)? Potremmo applicare quella configurazione con il seguente comando:

$ systemctl enable sshd.service

Problemi di sicurezza con i runlevel in Linux

Come abbiamo detto in precedenza in questo articolo, lo scopo dei runlevel di Linux è fornire a un amministratore il controllo su quali servizi vengono eseguiti in determinate condizioni. Avere questo tipo di controllo granulare sul tuo sistema migliora la sicurezza poiché puoi essere certo che non ci sono servizi estranei in esecuzione.

Il problema può sorgere quando un amministratore non è a conoscenza di quali servizi sono in esecuzione, quindi non si preoccupa di proteggere quelle superfici di attacco.

È possibile utilizzare i metodi in questa guida per configurare il runlevel predefinito e per controllare quali applicazioni sono in esecuzione. Queste pratiche non solo libereranno risorse di sistema, ma manterranno anche più sicuro il tuo server.

Ricorda di utilizzare solo il runlevel di cui hai bisogno. Ad esempio, non ha senso avviare il runlevel 5 (interfaccia grafica) se prevedi di utilizzare solo il terminale.

Il passaggio a un livello di esecuzione diverso introdurrà più nuovi servizi, alcuni dei quali potrebbero essere eseguiti completamente in background e potresti dimenticarti di proteggerli.

Quale runlevel è il migliore per me?

Determinare quale runlevel è il migliore per tutti voi dipende dalla situazione. In generale, probabilmente utilizzerai i runlevel 3 e 5 su base regolare.

Se hai dimestichezza con la riga di comando e non hai bisogno di un'interfaccia grafica, il runlevel 3 (sulla maggior parte delle distribuzioni) sarà il migliore per te.

Ciò impedirà l'esecuzione di servizi non necessari. D'altra parte, se desideri più un'esperienza desktop e un'interfaccia grafica per utilizzare varie app, ecc., il runlevel 5 sarà il tuo runlevel preferito.

Se è necessario eseguire la manutenzione su un server di produzione, il runlevel 1 si adatta bene a questa situazione. Puoi utilizzare questo runlevel per assicurarti di essere l'unico sul server (il servizio di rete non è nemmeno avviato) e puoi eseguire la manutenzione senza interruzioni.

In rari casi, potrebbe anche essere necessario utilizzare il runlevel 4. Ciò si verificherebbe solo in situazioni particolari in cui tu o l'amministratore di sistema avete un runlevel configurato personalizzato. Vedremo come farlo nella prossima sezione.

Come probabilmente hai ipotizzato, non eseguirai (e non potrai) il tuo sistema nei runlevel 0 o 6, ma è possibile passare a loro solo per riavviare o spegnere. In genere non dovrebbe essere necessario poiché ci sono altri comandi che lo fanno per noi.

Possiamo creare un nuovo runlevel in Linux?

È possibile creare un nuovo runlevel in Linux, ma è estremamente improbabile che tu abbia mai bisogno di farlo. Se eri determinato a farlo comunque, puoi iniziare copiando uno dei target di sistema esistenti e quindi modificandolo con le tue personalizzazioni.

I target si trovano in:

/usr/lib/systemd/system

Se desideri basare il tuo nuovo runlevel/target su graphical.target (runlevel 5), copia quella directory nella tua nuova directory di destinazione.

$ cp /usr/lib/systemd/system/graphical.target /usr/lib/systemd/system/mynew.target

Successivamente, crea una nuova directory "vuoi", in questo modo:

$ mkdir /etc/systemd/system/mynew.target.wants

E poi symlink i servizi aggiuntivi da /usr/lib/systemd/system che vuoi abilitare per il tuo nuovo runlevel.

Spero che il tutorial ti sia utile. Continua a tornare.


Linux
  1. Qual è la giusta quantità di spazio di scambio per un moderno sistema Linux?

  2. Come eseguire l'aggiornamento a Linux Mint 20.3:il modo giusto

  3. Come cambiare l'identità di un sistema Linux

  4. Perché "sshpass" non è il modo giusto per automatizzare i trasferimenti di file in Linux

  5. Comprendere gli script rc in Linux

Il comando principale di Linux

Come utilizzare il comando fd sul sistema Linux

Comprendere il comando uname in Linux

EndeavourOS – Impara Arch nel modo giusto

Comprendere il comando dell'ora in Linux

Comprendere il file /etc/fstab in Linux