Comment démarrer un deuxième shell en mode mono-utilisateur?

14

Cela peut sembler une contradiction en termes, mais j'ai récemment dû utiliser le mode mono-utilisateur (aka mode maintenance) pendant un certain temps (jours!) Tout en essayant de reconstruire une matrice RAID cassée.

En faisant cela, je me suis retrouvé à vouloir utiliser un deuxième shell pour des choses telles que la vérification / modification des paramètres dans divers fichiers de configuration ou la recherche dans les journaux système tandis que la console principale (et uniquement) est bloquée lors de l'exécution d'un processus de récupération.

Quelle serait la commande recommandée pour lancer un deuxième shell sur un autre tty?

Évidemment, une méthode pourrait être d'utiliser screendans tty1, mais cela n'a pas tout à fait la facilité de simplement changer de session avec Alt-F1, Alt-F2, etc.

StarNamer
la source
4
screenest aussi simple que ça. Ctrl AP ne semble pas beaucoup plus compliqué que Alt F1 ...
mveroone
Il convient de noter que les applications telles que screenet tmuxpour la gestion des fenêtres TUI ne font pas toujours l'affaire. Parfois, vous avez besoin d'un ttyXappareil réel plutôt que d'un pts.
Parthian Shot

Réponses:

14

Il y a une commande spécialement conçu pour cette situation: openvt. Exécutez simplement openvtvotre shell sur tty1 et vous trouverez un shell en cours d'exécution sur le premier tty qui n'avait pas déjà quelque chose dessus (tty2 probablement.) Il y a plusieurs options que vous pourriez trouver utiles; voir la page de manuel openvt.

Comme il ne s'agit pas d'une connexion gérée par getty, lorsque vous quittez le nouveau shell, vous ne verrez pas d'invite de connexion. Le tty disparaîtra simplement car aucun processus ne sera exécuté, mais vous pourrez toujours basculer (Alt-F1 Alt-F2) et voir ce qui était à l'écran lorsque vous avez quitté le shell. La deallocvtcommande détruit les ttys qui sont dans cet état de zombie, revenant à l'état d'origine "Alt-F2 ne fait rien".

À l'origine, ces commandes étaient appelées openet disalloc, mais finalement quelqu'un a décidé de les changer parce qu'elles étaient trop génériques et que la désallocation était jugée "pas un mot".

Dans le passé, il était courant que le pilote du clavier et init soient configurés pour que Alt + Up s'exécute open, de sorte qu'il agisse comme un raccourci clavier pour générer un shell sur une nouvelle console. Vous pouvez toujours trouver un reste de cette ancienne configuration, commentée, dans votre /etc/inittab. (Si vous n'utilisez pas un nouvel init de fantaisie qui n'en a pas inittab.)

Il y a une question similaire ici

Communauté
la source
3
Bien, je n'étais pas au courant openvt. +1.
jscott
Cela semble en fait beaucoup plus facile que Getty. Je n'ai jamais réalisé qu'il était déjà installé.
StarNamer
Je pensais juste signaler que je venais de passer plus d'une semaine avec un système en mode utilisateur unique à réparer une matrice RAID et que je me suis openvtavéré très utile. Merci d'avoir apporté une nouvelle commande à ma connaissance.
StarNamer
12

Vous pouvez en générer un autre gettypour celui que vous voulez. Démarrez en mode mono-utilisateur, puis démarrez un gettysur tty2:

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

Vous pouvez maintenant Alt+ F2passer au nouveau terminal. Répétez l'opération pour des ttys supplémentaires si nécessaire. Vous pourriez probablement faire quelque chose de plus propre et simplement configurer /etc/inittabpour gérer automatiquement cela en mode mono-utilisateur.

jscott
la source
Cela ressemble à ce que je recherche. Je vais essayer la prochaine fois.
StarNamer
Essayé. Cela fonctionne, mais comme la session de connexion n'est pas générée init, elle n'est pas régénérée si elle meurt.
StarNamer
En effet, nous le déposons simplement en arrière-plan dans l'exemple ci-dessus. Si vous avez besoin de l'offre complète d'un vrai VT, vous allez pirater /etc/inittabet /etc/rc1.d/S??singleà tout le moins.
jscott
2

Vous pouvez probablement vous passer d'une instance de shell supplémentaire en l'utilisant JOB CONTROLdans votre shell actuel. Il est documenté dans la page de manuel de bash(1).

Vous pouvez simplement suspendre une tâche en utilisant la séquence Ctrl+ Zpar défaut, bien qu'elle puisse être configurée dans votre terminal d'une manière différente, vérifiez la sortie de stty -a:

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

Vous pouvez vérifier vos emplois en émettant jobs:

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

Mettez l'un d'eux au premier plan:

$ fg %3

Ou reprenez-le en arrière-plan:

$ bg %2

Cette méthode ne présente pas de nombreux avantages de screenou tmux, mais peut être également utile dans certaines situations.

dawud
la source
Le fait est que je ne veux pas suspendre ou interférer avec le processus en cours d'exécution sur la console initiale. Par exemple, lors de l'exécution, ddrescueje ne veux pas continuer à l'interrompre et à le reprendre même s'il est configuré pour le faire ..
StarNamer
Quelques problèmes avec cela. D'une part , il ne peut pas être utilise bash comme sa coquille (pourrait utiliser csh, tcshou zsh, par exemple), donc mentionner son manpage serait inexact dans ce cas. Pour un autre, cela ne répond pas à la question posée.
Parthian Shot
1

Pensez à utiliser des multiplexeurs de terminaux tels que tmux ou screen.

En savoir plus sur tmux ici: https://github.com/tmux/tmux/wiki

Marcin Kaminski
la source
La question le mentionne déjà: "Évidemment, une méthode pourrait être d' utiliser screen en tty1 *, mais cela n'a pas tout à fait la facilité de simplement changer de session avec Alt-F1, Alt-F2, etc.".
Cristian Ciupitu
Comme le dit Cristian, j'avais déjà pensé screenet senti que les autres multiplexeurs étaient encore plus exagérés. Tout ce dont j'ai besoin, c'est d'une simple deuxième console.
StarNamer
Ah, désolé, j'ai oublié screendans votre question. Il était tard.
Marcin Kaminski
Comment utiliser une combinaison de 2 clés peut-être "surpuissant" à côté de l'apparition de nouveaux ATS, et de les ancrer séparément et autres?
mveroone
OMI, c'est une étrange définition de 'overkill' mais bon, quoi que ça marche pour quelqu'un, ça me va;)
Marcin Kaminski