Lesen von „Was ist der Unterschied zwischen den Befehlen Halt und Shutdown?“ , habe ich im Allgemeinen eine Vorstellung davon, was der Befehl shutdown macht, mit oder ohne -h/-r-Optionen.
Der Befehl „halt“ schaltet das System auf Runlevel 0
des Systems aus.
Der „shutdown“-Befehl bewirkt ein Herunterfahren des Systems auf Runlevel
1 ohne -h- oder -r-Befehl.
Was ist mit dem Befehl „poweroff“, geht er in Runlevel 0 oder 1?
Ist dies der einzige Hauptunterschied zwischen diesen drei Befehlen?
Akzeptierte Antwort:
Und jetzt die systemd-Antwort.
Sie verwenden gemäß dem Tag in Ihrer Frage Red Hat Enterprise Linux. Seit Version 7 verwendet das systemd. Keine der anderen Antworten ist für die Welt von systemd richtig; noch nicht einmal einige der Annahmen in Ihrer Frage.
- Vergessen Sie Runlevels; Sie existieren, aber nur als Kompatibilitäts-Shims. Die systemd-Dokumentation gibt an, dass das Konzept „obsolet“ ist. Wenn Sie beginnen, diese Dinge auf einem systemd-Betriebssystem zu lernen, beginnen Sie nicht dort.
- Vergiss die Handbuchseite, die Marcelm zitiert hat; Es stammt überhaupt nicht aus dem richtigen Toolset und ist eine Beschreibung des Befehls eines anderen Toolsets, der für Systemds falsch ist. Es ist der für den
haltBefehl vom van Smoorenburg „System 5“initDienstprogramme. - Ignorieren Sie die Anweisungen, die
/sbin/haltenthalten ist ein symbolischer Link zu/sbin/reboot; Das ist bei systemd nicht der Fall. Es gibt keinen separatenrebootProgramm überhaupt. - Ignorieren Sie die Anweisungen, die
haltoderrebootRufen Sie einshutdownauf Programm mit Kommandozeilenargumenten; sie sind auch nicht wahr mit systemd. Es gibt kein separatesshutdownProgramm überhaupt.
Jedes Systemverwaltungs-Toolset hat seine Version dieser Dienstprogramme. systemd, Emporkömmling, nosh, van Smoorenburg init , und BSD init alle haben ihren eigenen halt , poweroff , und so weiter. Bei jedem sind ihre Mechaniken etwas anders. Ebenso ihre Handbuchseiten.
Im systemd-Toolset halt ,poweroff ,reboot , telinit , und shutdown sind alle symbolische Links zu /bin/systemctl . Sie sind alle Abwärtskompatibilitäts-Shims, die einfach Abkürzungen zum Aufrufen der primären Befehlszeilenschnittstelle von systemd sind:systemctl . Sie sind alle auf dieselbe Single abgebildet (und sind es tatsächlich). Programm. (Konventionell teilt ihr die Shell mit, von welchem Namen sie aufgerufen wurde.)
Ziele, keine Runlevel
Die meisten dieser Befehle sind Abkürzungen für die Angabe von systemd unter Verwendung von systemctl , zu isolieren ein bestimmtes Ziel . Isolation wird im systemctl erklärt Handbuchseite (siehe dort), kann aber für die Zwecke dieser Antwort so betrachtet werden, als würde man ein Ziel starten und alle anderen stoppen. Die in systemd verwendeten Standardziele sind in systemd.special aufgeführt (8) Handbuchseite.
Die Diagramme zum bootup (7) Handbuchseite im Systemd-Toolset, insbesondere die letzte, zeigen, dass es drei „endgültige“ Ziele gibt, die hier relevant sind:
halt.target— Sobald das System den Zustand der vollständigen Isolierung dieses Ziels erreicht hat, wird es denreboot(RB_HALT_SYSTEM)aufgerufen haben Systemaufruf. Der Kernel wird versucht haben, ein ROM-Überwachungsprogramm aufzurufen, oder einfach die CPU angehalten haben (unter Verwendung eines geeigneten Mechanismus).reboot.target— Sobald das System den Zustand der vollständigen Isolierung dieses Ziels erreicht hat, wird es denreboot(RB_AUTOBOOT)aufgerufen haben Systemaufruf (oder das Äquivalent mit der magischen Befehlszeile). Der Kernel wird versucht haben, einen Neustart auszulösen.poweroff.target— Sobald das System den Zustand der vollständigen Isolierung dieses Ziels erreicht hat, wird es denreboot(RB_POWER_OFF)aufgerufen haben Systemaufruf. Der Kernel wird, wenn möglich, versucht haben, das System von der Stromversorgung zu trennen.
Diese sind die Dinge, an die Sie als endgültige Systemzustände denken sollten, nicht die Ausführungsebenen. Beachten Sie aus dem Diagramm, dass das systemd-Zielsystem selbst Dinge codiert, die in anderen Systemen eher implizit als explizit sind:wie die Vorstellung, dass jedes dieser endgültigen Ziele das shutdown.target umfasst target, sodass man Dienste beschreibt, die vor dem Herunterfahren gestoppt werden müssen, indem man sie in Konflikt bringt das shutdown.target Ziel.
systemctl versucht Anfragen an systemd-logind zu senden wenn der aufrufende Benutzer nicht der Superuser ist. Es übergibt auch verzögertes Herunterfahren an systemd-shutdownd . Und einige Abkürzungen lösen wall aus Benachrichtigungen. Abgesehen von diesen Komplexitäten, die diese Antwort um ein Vielfaches verlängern würden, vorausgesetzt, Sie sind derzeit der Superuser und fordern keine geplante Aktion an:
systemctl isolate halt.targethat die Abkürzungen:shutdown -H nowsystemctl halt- schlichter schmuckloser
halt
systemctl isolate reboot.targethat die Abkürzungen:shutdown -r nowtelinit 6systemctl reboot- einfacher, schmuckloser
reboot
systemctl isolate poweroff.targethat die Abkürzungen:shutdown -P nowtelinit 0shutdown nowsystemctl poweroff- schlichtes schmuckloses
poweroff
systemctl isolate rescue.targethat die Abkürzungen:telinit 1systemctl rescue
systemctl isolate multi-user.targethat die Abkürzungen:telinit 2telinit 3telinit 4
systemctl isolate graphical.targethat die Kurzform:telinit 5
Nach dem Analysieren der verschiedenen unterschiedlichen Befehlszeilensyntaxen landen diese schließlich alle in denselben Codepfaden innerhalb von systemctl Programm.
Hinweise:
- Das traditionelle Verhalten von Option-less
shutdown nowwar, in den Einzelbenutzermodus zu wechseln . Dies ist bei systemd nicht der Fall.rescue.target— Einzelbenutzermodus wird in Rettungsmodus umbenannt in systemd — ist mitshutdownnicht erreichbar Befehl. telinitwirklich alle dieserunlevelN.targetunddefault.targetsymbolische Links im Dateisystem, die die Handbuchseiten beschreiben. Die oben genannten Mappings sind insystemctlfest verdrahtet Programm, in einer Tabelle.- systemd hat keine Ahnung von einem aktuellen Runlevel . Die Ausführung dieser Befehle ist nicht abhängig von „wenn Sie sich in Runlevel N befinden „.
- Der
--forceOption zumhalt,reboot, undpoweroffBefehle ist dasselbe wie--force --forcezu sagen zumsystemctl halt,systemctl rebootundsystemctl poweroffBefehle. Dies machtsystemctlversuchen Sie,reboot()aufzurufen direkt. Normalerweise versucht es nur, Ziele zu isolieren. telinitist nicht dasselbe wieinit. Sie sind verschiedene Programme in der systemd-Welt, wobei letzteres ein anderer Name fürsystemdist Programm, nicht fürsystemctlProgramm. DassystemdDas Programm ist nicht unbedingt mit irgendeiner Van-Smoorenburg-Kompatibilität kompiliert und beschwert sich auf einigen systemd-Betriebssystemen darüber, dass es falsch aufgerufen wird, wenn maninit N.
Weiterführende Literatur
- Gibt es gute Gründe, das System anzuhalten, ohne die Stromversorgung zu unterbrechen?
- Warum führt „init 0“ bei der Arch-Installation zu „überschüssigen Argumenten“?
- Stephen Wadeley (2014). „8. Verwalten von Diensten mit systemd“ Red Hat Enterprise Linux 7 Handbuch für Systemadministratoren . Red Hat.
- Lennart Pöttering (2013-10-07).
systemctl. systemd Handbuchseiten. freedesktop.org. - Lennart Pöttering (2013-10-07).
systemd.special. systemd Handbuchseiten. freedesktop.org. - Lennart Pöttering (2013-10-07).
bootup. systemd Handbuchseiten. freedesktop.org. - Jonathan de Boyne Pollard (2018).
init. Nosh-Leitfaden . Software.