Wofür ist Runlevel 'S' unter Debian / Ubuntu?


8

Laut Wikipedia soll 'S' ein Standard-Runlevel sein: "Einzelbenutzermodus". Aber wenn ich mich nicht irre, ist der Einzelbenutzermodus unter Debian Runlevel 1. Ein Debian-Artikel, den ich gefunden habe, behauptet, dass 'S' ein Runlevel ist, "das das System auf dem Weg zu einem anderen Runlevel verwendet". Interessant...

Eigentlich hatte ich dieses Runlevel bisher immer ziemlich ignoriert, aber heute habe ich mit Firestarter (ja, wirklich, einer Endbenutzer-Firewall) herumgespielt, nur weil ich neugierig war, welche Firewall-Regeln es generieren würde. Aber dann bemerkte ich, dass es einen Start-Hook in /etc/rcS.d erstellt, und ich fragte mich, ob mein Firewall-Skript das vielleicht auch haben sollte.

Aktualisieren

Jetzt bin ich noch mehr daran interessiert zu wissen, was es unter Debian / Ubuntu tatsächlich ist , da das Shorewall-Paket (das ein stark "debianisiertes" Paket ist) auch seinen (einzigen!) Start-Hook in rcS.d erstellt!

Antworten:


3

Ich betrachte die Runlevels folgendermaßen:

 S - true single user mode usually drops you into a minimal root shell
 1 - Administrative mode, you get a standard login request before access
 2 - Multi-user without TCP/IP networking -- could use serial ports for other logins
 3 - Multi-user with TCP/IP networking and text 
 4 - To be determined by the system owner
 5 - Multi-User with TCP/IP networking and graphic console 
 6 - reboot
 0 - shutdown and power down

Daher wird eine Firewall wirklich benötigt, wenn TCP / IP aktiv ist und dies im Allgemeinen nur im Anfangszustand 3 geschieht.


1
Dieses ganze Runlevel-Konzept ist eine Legacy-Sache aus der Vergangenheit. Heutzutage ist es normalerweise der Einzelbenutzermodus (für Wartungszwecke) und es wird ein anderer normaler Modus (wie 2 oder 5, je nach Distribution) verwendet. Ich sehe keinen Anwendungsfall für irgendetwas anderes.
Cstamas

Schlimmer noch, die neuesten Distributionen beseitigen alle Run-Levels insgesamt (derzeit als Legacy-Angelegenheit unterstützt) und gehen in benannte Staaten mit Abhängigkeiten unter ihnen (siehe Fedora 15).
Mdpc

3

All dies scheint eine direkte Antwort auf die gestellte Frage zu umgehen.

Nach allem, was ich finden kann, sind die rcS.dSkripte so implementiert, wie es Sfür " Startup " steht, nicht für " Single ".

Sie werden alle während des Startvorgangs ausgeführt. Wenn Sie dann Run Level 1 verwenden möchten, werden die Skripte rc1.dausgeführt (was angesichts der Arbeit, in der wir gerade gearbeitet haben, möglicherweise ziemlich leer ist rcS).

Genauer gesagt, die rcSSkripte werden auf dem Weg zu ausgeführt rc3- so versetzt sich das System effektiv in den Einzelbenutzermodus, überlegt es sich dann und entscheidet, was es WIRKLICH tun soll. Sehr verwirrend und meist schlecht dokumentiert.

Als Beweis, wenn Sie untersuchen /etc/inittab, finden Sie:

 # Boot-time system configuration/initialization script.<br>
 # This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

später folgen viele ähnliche Zeilen:

l3:3:wait:/etc/init.d/rc 3

1

Runlevel 1 wird auch als Runlevel s bezeichnet.

In Debian-basierten Systemen ist dies der Einzelbenutzer- / Minimalmodus . Siehe Debian Runlevel :

Der Runlevel ist eine Ziffer von 0 bis 6 oder der Buchstabe S. Die Runlevel 0, 6 und S sind für das Herunterfahren, den Neustart bzw. den Einzelbenutzermodus reserviert.


0

S ist für den Einzelbenutzermodus.

http://wiki.debian.org/RunLevel


Wenn also ein Skript nur einen Start-Hook in Runlevel S hat (wie z. B. Shorewall) und ich auf Runlevel '2' boote, startet die Boot-Sequenz das Skript?
Chris Lercher

Wenn unter Linux Ihr Standardstatus (wie in / etc / inittab beschrieben) N ist, werden im Gegensatz zu UNIX nur die 'S'-Elemente in /etc/rc.d/rcN.d (dieser Speicherort kann je nach Linux-Distribution variieren) verwendet Wird während des Startvorgangs ausgeführt, wird kein anderes Init-Verzeichnis verwendet.
Mdpc

Normalerweise legen Sie Ihren Standard-Runlevel in inittab fest. Die Zahlen erhöhen sich. Wenn in Ihrem Beispiel Ihr Init nur in S konfiguriert ist, entspricht dies Runlevel 1. Beim Booten startet Ihr System auf Runlevel 1 und erhöht die Ausführung aller Init-Skripte für dieses Level. Erhöhen Sie dann den Runlevel und wiederholen Sie diesen Vorgang erreicht den in inittab angegebenen Standard-Runlevel. Hier sind das zwei. Was auch immer für das Einschalten in 1 oder 2 konfiguriert wurde, ist eingeschaltet.
Dmourati

1
Bitte beachten Sie, dass meine Frage spezifisch für Debian / Ubuntu ist! Ich habe gerade Folgendes versucht: Ich habe ein einfaches Skript eingefügt /etc/rcS.dund /etc/rc2.djeweils eine kurze Nachricht (mit einem Zeitstempel) in eine Protokolldatei geschrieben. Ergebnis: Nach dem Start habe ich eine Protokollmeldung für rcS und 5 Sekunden später eine Protokollmeldung für rc2.
Chris Lercher

Ändern Sie die Variable DEFAULT_RUNLEVEL in der Datei /etc/init/rc-sysinit.conf, um den Standard-Runlevel zu ändern, in den das System booten wird. Um das System beispielsweise standardmäßig in den Einzelbenutzermodus zu starten, setzen Sie: env DEFAULT_RUNLEVEL = 1
dmourati

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.