English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

过程启动系统Linux

Quando il sistema operativo Linux avvia, vediamo molte informazioni di avvio.

Il processo di avvio del sistema operativo Linux non è così complesso come si immagina, e può essere diviso in 5 fasi:

  • Avvio del kernel.

  • Eseguire init.

  • Inizializzazione del sistema.

  • Si crea un terminale.

  • L'utente si connette al sistema.

Tipo di programma init:

  • SysV: init, CentOS 5 e versioni precedenti, file di configurazione: /etc/inittab.

  • Upstart: init, CentOS 6, file di configurazione: /etc/inittab, /etc/init/*.conf.

  • Systemd: Systemd, CentOS 7, file di configurazione: /usr/lib/systemd/system, /etc/systemd/system.

Avvio del kernel

Quando il computer viene acceso, la prima cosa che accade è il test di avvio del BIOS, che avvia il dispositivo di avvio impostato nel BIOS (solitamente il disco rigido).

Dopo che il sistema operativo ha preso il controllo dell'hardware, viene letto il file del kernel dal directory /boot.

Esegui init

Il processo init è il punto di partenza di tutti i processi del sistema, puoi paragonarlo agli antenati di tutti i processi del sistema, senza questo processo, nessun processo nel sistema può avviarsi.

Il programma init deve prima leggere il file di configurazione /etc/inittab.

Livello di avvio

Molti programmi devono essere avviati all'avvio. In Windows vengono chiamati "servizi" (service), in Linux vengono chiamati "demoni" (daemon).

Un grande compito del processo init è eseguire questi programmi di avvio.

Ma, diverse occasioni richiedono l'avvio di programmi diversi, ad esempio, quando viene utilizzato come server, è necessario avviare Apache, mentre quando viene utilizzato come desktop non è necessario.

Linux permette di assegnare programmi di avvio diversi per diverse occasioni, questo si chiama "livello di avvio" (runlevel). Ciò significa che all'avvio, in base al "livello di avvio", si determinano quali programmi devono essere eseguiti.

Il sistema operativo Linux ha 7 livelli di avvio (runlevel):

  • Livello di avvio 0: stato di arresto del sistema, il livello di avvio predefinito del sistema non può essere impostato su 0, altrimenti non può avviarsi normalmente

  • Livello di avvio 1: stato di lavoro mono utente, permessi di root, utilizzato per la manutenzione del sistema, login remoto vietato

  • Livello di avvio 2: stato mult utilisateur (senza NFS)

  • Livello di avvio 3: stato mult utilisateur completo (con NFS), dopo il login entra nel modo a riga di comando della console

  • Livello di avvio 4: il sistema non è utilizzato, riservato

  • Livello di avvio 5: console X11, dopo il login entra nel modo GUI grafico

  • Livello di avvio 6: il sistema si chiude e riavvia normalmente, il livello di avvio predefinito non può essere impostato su 6, altrimenti non può avviarsi normalmente

Inizializzazione del sistema

Nella configurazione del file init c'è questa riga: si::sysinit:/etc/rc.d/rc.sysinit, essa chiama l'esecuzione di /etc/rc.d/rc.sysinit, mentre rc.sysinit è uno script di bash shell che principalmente compie alcune attività di inizializzazione del sistema, rc.sysinit è uno script importante che deve essere eseguito per primo in ogni livello di avvio.

Le principali attività che compie sono: attivare la partizione di swap, controllare il disco, caricare i moduli hardware e altre attività che devono essere eseguite con priorità.

l5:5:wait:/etc/rc.d/rc 5

Questa riga indica l'esecuzione di /etc/rc.d/rc con il parametro 5, /etc/rc.d/rc è uno script di Shell che accetta 5 come parametro per eseguire tutti gli script di avvio rc nel directory /etc/rc.d/rc5.d/. Questi script di avvio nel directory /etc/rc.d/rc5.d/ sono in realtà alcuni file di collegamento, non script di avvio rc reali, gli script di avvio rc reali sono tutti messi nel directory /etc/rc.d/init.d/.

Questi script di avvio rc hanno un uso simile, di solito possono accettare parametri come start, stop, restart, status ecc.

I script di avvio rc nel file /etc/rc.d/rc5.d sono solitamente file di collegamento che iniziano con K o S. Per i script che iniziano con S, vengono eseguiti con il parametro start.

E se si scopre che esistono script corrispondenti che iniziano con la lettera K e sono già in esecuzione (con i file sotto /var/lock/subsys/ come segno), allora inizialmente si fermeranno questi demoni già avviati con il parametro stop, e poi li si eseguirà di nuovo.

Questo viene fatto per garantire che quando init cambia il livello di runtime, tutti i demoni relativi vengano riavviati.

Riguardo a quali demoni devono essere eseguiti in ogni livello di runtime, l'utente può configurarli autonomamente tramite chkconfig o "Servizi di sistema" in setup.

Creazione del terminale

Dopo l'esecuzione di rc, viene tornato al programma init. A questo punto, l'ambiente di sistema di base è stato configurato e i vari demoni sono stati avviati.

Il programma init aprirà 6 terminali in modo da permettere agli utenti di accedere al sistema. Le seguenti 6 righe nel file inittab definiscono 6 terminali:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

Da ciò emerge che nei livelli di runtime 2, 3, 4 e 5, il programma mingetty verrà eseguito in modalità respawn. Il programma mingetty può aprire terminali, impostare modalità.

Allo stesso tempo, viene visualizzata un'interfaccia di login di testo, che è l'interfaccia di login che vediamo spesso. In questa interfaccia di login, viene richiesto all'utente di inserire il nome utente, e l'utente inserito viene trasmesso come parametro al programma login per verificare l'identità dell'utente.

Login dell'utente nel sistema

In generale, ci sono tre modi di login per gli utenti:

  • (1) Login da riga di comando

  • (2) Login ssh

  • (3) Login con interfaccia grafica

Per gli utenti con modalità grafica a livello di runtime 5, il loro login avviene tramite un'interfaccia di login grafica. Dopo il login di successo, è possibile accedere direttamente a KDE, Gnome e altri gestori di finestre.

Ecco il testo principale di questo articolo: si parla della situazione di login tramite metodo di testo: quando vediamo l'interfaccia di login di mingetty, possiamo inserire il nome utente e la password per accedere al sistema.

Il programma di autenticazione dell'account di Linux è login, login riceve il nome utente trasmesso da mingetty come parametro del nome utente.

Poi, login analizzerà il nome utente: se il nome utente non è root e esiste il file /etc/nologin, login esibirà il contenuto del file nologin e poi uscirà.

Questo viene solitamente utilizzato per prevenire l'accesso degli utenti non root durante la manutenzione del sistema. Solo i terminali registrati in /etc/securetty permettono l'accesso agli utenti root, se non esiste questo file, l'utente root può accedere da qualsiasi terminale.

Il file /etc/usertty viene utilizzato per impostare limitazioni di accesso aggiuntive per gli utenti, se non esiste questo file, non ci sono altre limitazioni.

Dopo aver analizzato il nome utente, login cercherà /etc/passwd e /etc/shadow per verificare la password e impostare altre informazioni dell'account, come: quale è la directory principale, quale shell viene utilizzato. Se non viene specificata la directory principale, sarà di default la directory radice; se non viene specificato lo shell, sarà di default /bin/bash.

Modalità di passaggio tra modalità grafica e modalità testo

Linux fornisce sei terminali dei comandi per farci accedere.

Di default, ci si登录 è la prima finestra, ossia tty1, queste sei finestre sono tty1, tty2 … tty6, puoi passare da una all'altra premendo Ctrl + Alt + F1 ~ F6.

Se hai installato l'interfaccia grafica, nella maggior parte dei casi si entra direttamente nell'interfaccia grafica, in questo caso puoi premere Ctrl + Alt + F1 ~ F6 per entrare in una delle interfacce della finestra dei comandi.

Una volta entrati nell'interfaccia della finestra dei comandi, per tornare all'interfaccia grafica basterà premere Ctrl + Alt + F7.

Se stai utilizzando un'VMware virtual machine, la scorciatoia da tastiera per passare alla finestra dei comandi è Alt + Space + F1~F6. Se sei nella modalità grafica, premi Alt + Shift + Ctrl + F1~F6 per passare alla finestra dei comandi.

Spegnimento Linux

Nel campo di Linux, viene utilizzato principalmente sui server e si incontra raramente l'operazione di spegnimento. Infatti, eseguire un servizio sul server è un'operazione infinita, a meno che non ci siano circostanze speciali che richiedono il spegnimento.

Il flusso corretto di spegnimento è: sync > shutdown > reboot > halt

L'istruzione di spegnimento è: shutdown, puoi vedere la documentazione di aiuto con man shutdown.

Ad esempio, puoi eseguire il seguente comando per spegnere il computer:

sync sincronizza i dati dallo spazio di memoria al disco rigido.
指令关机shutdown,你可以man shutdown 查看帮助文档。例如你可以运行如下命令关机:
shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。
shutdown –h now 立马关机
shutdown –h 20:25 系统会在今天20:25关机
shutdown –h +10 十分钟后关机
shutdown –r now 系统立马重启
shutdown –r +10 系统十分钟后重启
reboot 重启就是,等同于 shutdown –r now
halt 关闭系统,等同于shutdown –h now 和 poweroff

总结一下,重启系统关闭系统不管是,首先要运行 sync 命令,数据内存中的写入磁盘。

命令关机有 shutdown –h now halt poweroff init 0 , 命令重启系统有 shutdown –r now reboot init 6

文章参考: