¿Cómo inicio un segundo shell cuando estoy en modo de usuario único?

14

Esto puede sonar como una contradicción en términos, pero recientemente he necesitado usar el modo de usuario único (también conocido como modo de mantenimiento) durante algún tiempo (¡días!) Al intentar reconstruir una matriz RAID rota.

Al hacer esto, me encontré con ganas de usar un segundo shell para cosas tales como verificar / editar la configuración en varios archivos de configuración o mirar los registros del sistema mientras la consola principal (y única) está atada ejecutando algún proceso de recuperación.

¿Cuál sería el comando recomendado para lanzar un segundo shell en otro tty?

Obviamente, un método podría ser usar screenen tty1, pero esto no tiene la facilidad de cambiar las sesiones con Alt-F1, Alt-F2, etc.

StarNamer
fuente
44
screenes tan fácil como eso Ctrl AP no parece mucho más complicado que Alt F1 ...
mveroone
Vale la pena señalar que las aplicaciones como screeny tmuxpara la administración de ventanas TUI no siempre funcionan. A veces necesitas un ttyXdispositivo real , en lugar de un pts.
Parthian Shot

Respuestas:

14

Hay un comando diseñado específicamente para esta situación: openvt. Simplemente ejecute openvtdesde su shell en tty1 y encontrará un shell que se ejecuta en el primer tty que aún no tenía algo (probablemente tty2). Hay varias opciones que puede encontrar útiles; vea la página de manual de openvt.

Como este no es un inicio de sesión administrado por getty, cuando salga del nuevo shell no verá aparecer un mensaje de inicio de sesión. El tty simplemente se apagará ya que no habrá procesos ejecutándose en él, pero aún podrá cambiar de un lado a otro (Alt-F1 Alt-F2) y ver lo que estaba en la pantalla cuando salió del shell. El deallocvtcomando destruye los ttys que se encuentran en este estado de zombie, volviendo al estado original "Alt-F2 no hace nada".

Originalmente, estos comandos se llamaron openy disalloc, pero finalmente alguien decidió cambiarlos porque eran demasiado genéricos y se consideró que la asignación no era "una palabra".

En los viejos tiempos, era común que el controlador del teclado y el init se configuraran para que Alt + Up se ejecutara open, por lo que actuaría como una tecla de acceso rápido para generar un shell en una nueva consola. Aún puede encontrar un remanente de esa configuración anterior, comentado, en su /etc/inittab. (Si no está utilizando un nuevo init elegante que no tiene un inittab.)

Hay una pregunta similar aquí

Comunidad
fuente
3
Bien, no estaba al tanto openvt. +1.
jscott
Esto en realidad parece mucho más fácil que getty. Nunca me di cuenta de que ya estaba instalado.
StarNamer
Solo pensé en informar que pasé más de una semana con un sistema en modo de usuario único reparando una matriz RAID y openvtdemostró ser muy útil. Gracias por traer un nuevo comando a mi aviso.
StarNamer
12

Podrías generar otro gettypor el ttys que quieras. Arranque en modo de usuario único, luego inicie a gettyen tty2:

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

Ahora puede Alt+ F2pasar al nuevo tty. Repita para ttys adicionales según sea necesario. Probablemente podría hacer algo más limpio y simplemente configurarlo /etc/inittabpara manejarlo automáticamente en modo de usuario único.

jscott
fuente
Esto se parece a lo que estoy buscando. Lo intentaré la próxima vez.
StarNamer
Lo intenté. Funciona, pero como la sesión de inicio de sesión no se genera init, no se vuelve a generar si muere.
StarNamer
De hecho, solo lo estamos dejando en segundo plano en el ejemplo anterior. Si necesita la oferta completa de un vt real, va a estar pirateando /etc/inittaby, /etc/rc1.d/S??singlecomo mínimo,
jscott
2

Probablemente pueda prescindir de una instancia de shell adicional utilizando JOB CONTROLsu shell actual. Está documentado en la página de manual de bash(1).

Puede suspender una tarea utilizando la secuencia Ctrl+ Zde forma predeterminada, aunque se puede configurar en su terminal de una manera diferente, verifique la salida de stty -a:

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

Puede verificar sus trabajos emitiendo jobs:

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

Trae uno de ellos al primer plano:

$ fg %3

O reanudarlo en segundo plano:

$ bg %2

Este método no tiene muchas de las ventajas de screeno tmux, pero puede ser igualmente útil en algunas situaciones.

Dawud
fuente
El punto es que no quiero suspender o interferir con el proceso que se ejecuta en la consola inicial. Por ejemplo, cuando ddrescue
corro
Un par de problemas con esto. Por un lado, no puede estar usando bash como su concha (podría estar utilizando csh, tcsho zsh, por ejemplo), por lo que mencionar su página de manual sería inexacto en ese caso. Por otro lado, esto no responde la pregunta como se le preguntó.
Parthian Shot
1

Considere usar multiplexores de terminal como tmux o screen.

Obtenga más información sobre tmux aquí: https://github.com/tmux/tmux/wiki

Marcin Kaminski
fuente
La pregunta ya menciona esto: "Obviamente, un método podría ser usar la pantalla en tty1 *, pero esto no tiene la facilidad de cambiar las sesiones con Alt-F1, Alt-F2, etc.".
Cristian Ciupitu
Como dice Cristian, ya había considerado screeny sentía que otros multiplexores eran aún más exagerados. Todo lo que necesito es una segunda consola simple.
StarNamer
Ah, lo siento, pasé por alto screenen tu pregunta. Era tarde.
Marcin Kaminski
¿Cómo usar una combinación de 2 teclas puede ser "excesivo" además de generar nuevos TTY y anclarlos por separado y tal?
mveroone
En mi opinión, es una definición extraña de 'exagerar' pero bueno, lo que sea que funcione para alguien, estoy bien con eso;)
Marcin Kaminski