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.


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


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.


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.


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.