init és el primer procés que arrenca el nucli (kernel) quan s’engega Linux: sempre té el PID 1 i és el pare de tots els altres processos. S’encarrega d’engegar els serveis, muntar els discos, obrir les pantalles d’inici de sessió i, al final, d’apagar-ho tot ordenadament.
Durant anys, la comanda init (amb un número al darrere) també servia per canviar de nivell d’execució (runlevel): init 0 apagava, init 6 reiniciava, init 3 passava a mode text… Avui aquest sistema (SysV init) està obsolet: totes les distribucions principals (Debian, Ubuntu, Fedora, RHEL, Rocky, AlmaLinux, Arch…) fan servir systemd, i els nivells d’execució s’han substituït per targets. La comanda init N encara funciona, però només per compatibilitat.
Qui és init al teu sistema
$ ps -p 1 -o pid,comm,args
PID COMMAND COMMAND
1 systemd /sbin/init splash
$ ls -l /usr/sbin/init
lrwxrwxrwx 1 root root 22 /usr/sbin/init -> ../lib/systemd/systemd
El nucli executa /sbin/init, però en realitat és un enllaç a systemd. Quan escrius init des d’un terminal (és a dir, quan no és el PID 1), systemd passa els arguments a telinit, així que init 3 i telinit 3 fan exactament el mateix.
Sintaxi (heretada)
sudo init nivell
Dels nivells d’execució als targets de systemd
| Nivell | Què era amb SysV init | Target de systemd | Comanda actual |
|---|---|---|---|
0 | Apagar | poweroff.target | systemctl poweroff |
1, s, S | Monousuari (manteniment) | rescue.target | systemctl rescue |
2, 3, 4 | Multiusuari en mode text | multi-user.target | systemctl isolate multi-user.target |
5 | Multiusuari amb entorn gràfic | graphical.target | systemctl isolate graphical.target |
6 | Reiniciar | reboot.target | systemctl reboot |
systemd manté els noms antics com a àlies, i ho pots comprovar:
$ ls -l /usr/lib/systemd/system/runlevel*.target
runlevel0.target -> poweroff.target
runlevel1.target -> rescue.target
runlevel2.target -> multi-user.target
runlevel3.target -> multi-user.target
runlevel4.target -> multi-user.target
runlevel5.target -> graphical.target
runlevel6.target -> reboot.target
Exemples amb systemd
Saber amb quin target arrenca el sistema (l’equivalent de l’antic nivell per defecte de /etc/inittab):
$ systemctl get-default
graphical.target
Fer que un servidor arrenqui sempre en mode text, sense entorn gràfic:
sudo systemctl set-default multi-user.target
Passar a mode text ara mateix, sense reiniciar (l’antic init 3). Compte: tanca l’entorn gràfic i tot el que hi tinguis obert.
sudo systemctl isolate multi-user.target
Entrar en mode de rescat per fer manteniment (l’antic init 1): s’aturen gairebé tots els serveis i normalment et demana la contrasenya de root.
sudo systemctl rescue
Veure quins targets estan actius ara mateix:
$ systemctl list-units --type=target
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
getty.target loaded active active Login Prompts
graphical.target loaded active active Graphical Interface
multi-user.target loaded active active Multi-User System
network-online.target loaded active active Network is Online
...
Arrencar en un mode concret des del GRUB
Si el sistema no arrenca bé, pots triar el target abans que comenci: al menú del GRUB, prem e, afegeix al final de la línia que comença per linux una d’aquestes opcions i prem Ctrl+X:
systemd.unit=rescue.target: mode de rescat (també funciona l’antic1osingle).systemd.unit=multi-user.target: mode text (també3).systemd.unit=emergency.target: mode d’emergència, encara més mínim que el de rescat.
Correccions respecte a la versió antiga d’aquest post
singleno és cap comanda: és un paràmetre del nucli que s’escriu al GRUB. Per entrar en mode de rescat des d’un sistema en marxa,systemctl rescue.- Els nivells 3 i 5 no són «habituals amb systemd»: són conceptes de SysV init que systemd tradueix als targets
multi-userigraphical. - Per apagar i reiniciar,
poweroffirebootexisteixen, però la forma recomanada éssystemctl poweroffisystemctl reboot.
Comandes relacionades
telinit: canviar de nivell d’execució (el que fainitquan l’executes tu).shutdown,rebootihalt: apagar, reiniciar o aturar el sistema.- Init i systemd: diferències entre el sistema d’arrencada clàssic i systemd.
- La comanda init i el procés d’arrencada: més detalls sobre el paper del PID 1.
- L’arrencada del sistema a Linux: què passa des que engegues fins que veus el prompt.
- journalctl: consultar els registres de systemd.