Wie starte ich eine zweite Shell im Einzelbenutzermodus?

14

Dies mag sich nach einem Widerspruch anhören, aber ich musste kürzlich für einige Zeit (Tage!) Den Einzelbenutzermodus (auch als Wartungsmodus bezeichnet) verwenden, um ein defektes RAID-Array wiederherzustellen.

Dabei wollte ich eine zweite Shell verwenden, um beispielsweise die Einstellungen in verschiedenen Konfigurationsdateien zu überprüfen / zu bearbeiten oder die Systemprotokolle zu überprüfen, während die Hauptkonsole (und nur die Konsole) mit einem Wiederherstellungsvorgang beschäftigt ist.

Was wäre der empfohlene Befehl, um eine zweite Shell auf einem anderen tty zu starten?

screenNatürlich könnte eine Methode in tty1 verwendet werden, aber dies hat nicht ganz die Leichtigkeit, einfach die Sitzungen mit Alt-F1, Alt-F2 usw. zu wechseln.

StarNamer
quelle
4
screenist genauso einfach. Ctrl AP scheint nicht viel schwieriger als Alt F1 ...
mveroone
Erwähnenswert ist, dass Apps wie screenund tmuxfür das TUI Fenstermanagement nicht immer den Trick machen. Manchmal benötigen Sie ein tatsächliches ttyXGerät anstatt eines pts.
Parthian Shot

Antworten:

14

Es gibt einen Befehl speziell für diese Situation entwickelt: openvt. Führen Sie einfach openvtvon Ihrem Shell auf tty1 und Sie erhalten eine Shell läuft auf dem ersten tty finden , die nicht schon etwas darauf hatte Es gibt mehrere Optionen , die Sie nützlich finden könnten (tty2 wahrscheinlich.); Siehe die openvt-Manpage.

Da dies kein von getty verwaltetes Login ist, wird beim Verlassen der neuen Shell keine Anmeldeaufforderung angezeigt. Das tty geht einfach kaputt, da keine Prozesse darauf ausgeführt werden, aber Sie können immer noch hin- und herschalten (Alt-F1 Alt-F2) und sehen, was sich beim Verlassen der Shell auf dem Bildschirm befand. Mit diesem deallocvtBefehl werden alle in diesem zombieähnlichen Zustand befindlichen Objekte gelöscht und der ursprüngliche Zustand "Alt-F2 macht nichts" wird wiederhergestellt.

Ursprünglich hießen diese Befehle openund disalloc, aber irgendwann entschied sich jemand, sie zu ändern, weil sie zu allgemein und nicht zugeteilt waren. Dies wurde als "kein Wort" beurteilt.

Früher war es üblich, Tastaturtreiber und Init so zu konfigurieren, dass Alt + Up ausgeführt wurde open, sodass es als Tastenkürzel fungierte, um eine Shell auf einer neuen Konsole zu erstellen . Möglicherweise finden Sie noch einen auskommentierten Rest dieser alten Konfiguration in Ihrer /etc/inittab. (Wenn Sie kein schickes neues Init verwenden, das kein hat inittab.)

Es gibt eine ähnliche Frage hier

Gemeinschaft
quelle
3
Schön, das wusste ich nicht openvt. +1.
Jscott
Dies scheint tatsächlich viel einfacher zu sein als getty. Ich habe nie bemerkt, dass es bereits installiert war.
StarNamer
Ich dachte nur, ich würde berichten, dass ich gerade über eine Woche mit einem System im Einzelbenutzermodus verbracht habe, um ein RAID-Array zu reparieren, und es hat openvtsich als sehr nützlich erwiesen. Vielen Dank, dass Sie mir einen neuen Befehl mitgeteilt haben.
StarNamer
12

Sie könnten einen anderen gettyfür jede Zeit erzeugen, die Sie möchten. gettyBooten Sie im Einzelbenutzermodus und starten Sie dann a auf tty2:

root@host:~# /sbin/getty 38400 tty2 &

Sie können jetzt Alt+ F2auf das neue tty über. Wiederholen Sie dies nach Bedarf für weitere Schritte. Sie könnten wahrscheinlich etwas Besseres tun und einfach so konfigurieren /etc/inittab, dass dies im Einzelbenutzermodus automatisch erledigt wird.

jscott
quelle
Das sieht so aus, wie ich es suche. Ich werde es das nächste Mal versuchen.
StarNamer
Ich habe es versucht. Es funktioniert, aber da die Anmeldesitzung nicht von erzeugt wird init, wird sie nicht erneut erzeugt, wenn sie stirbt.
StarNamer
Tatsächlich lassen wir es im obigen Beispiel nur in den Hintergrund fallen. Wenn Sie das vollständige Angebot eines echten vt benötigen, Sie gehen Hacking werden /etc/inittabund /etc/rc1.d/S??singleallerwenigsten an.
Jscott
2

Sie können wahrscheinlich auf eine zusätzliche Shell-Instanz verzichten, indem Sie sie JOB CONTROLin Ihrer aktuellen Shell verwenden. Es ist in der Manpage von dokumentiert bash(1).

Sie können eine Aufgabe einfach mit der Sequenz Ctrl+ Zanhalten. Sie können sie jedoch auch auf andere Weise in Ihrem Terminal konfigurieren. Überprüfen Sie die Ausgabe von stty -a:

$ stty -a | grep susp
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;

Sie können Ihre Jobs überprüfen, indem Sie Folgendes eingeben jobs:

# jobs
[1]   Stopped                 journalctl -f
[2]-  Stopped                 vim /etc/hosts
[3]+  Stopped                 tail -f /var/log/firewalld

Bringen Sie einen von ihnen in den Vordergrund:

$ fg %3

Oder setzen Sie es im Hintergrund fort:

$ bg %2

Diese Methode bietet nicht viele der Vorteile von screenoder tmux, kann jedoch in bestimmten Situationen gleichermaßen nützlich sein.

Dawud
quelle
Der Punkt ist, dass ich den Prozess, der auf der ersten Konsole ausgeführt wird, nicht anhalten oder stören möchte. Zum Beispiel, wenn ddrescueich laufe, möchte ich es nicht weiter unterbrechen und fortsetzen, obwohl es dafür eingerichtet ist.
StarNamer
Ein paar Probleme damit. Zum einen kann er nicht bash als seine Schal werden (könnte verwenden csh, tcshoder zsh, zum Beispiel), so dass ihr manpage zu erwähnen in diesem Fall ungenau wäre. Zum anderen beantwortet dies die gestellte Frage nicht.
Parthian Shot
1

Erwägen Sie die Verwendung von Terminal-Multiplexern wie tmux oder screen.

Weitere Informationen zu tmux finden Sie hier: https://github.com/tmux/tmux/wiki

Marcin Kaminski
quelle
Die Frage erwähnt dies bereits: "Offensichtlich könnte eine Methode darin bestehen, screen in tty1 * zu verwenden, aber dies hat nicht ganz die Leichtigkeit, einfach die Sitzungen mit Alt-F1, Alt-F2 usw. zu wechseln."
Cristian Ciupitu
Wie Cristian sagt, hatte ich bereits darüber nachgedacht screenund empfunden, dass andere Multiplexer noch übertriebener waren. Alles was ich brauche ist eine einfache zweite Konsole.
StarNamer
Ah, tut mir leid, ich habe screenin Ihrer Frage übersehen . Es war spät.
Marcin Kaminski
Wie kann die Verwendung einer Kombination von 2 Schlüsseln neben dem Laichen neuer TTYs und dem separaten Ankern von TTYs zu einem "Overkill" führen?
mveroone
IMO, es ist eine seltsame Definition von "Overkill", aber hey, was auch immer für jemanden funktioniert, ich bin damit einverstanden;)
Marcin Kaminski