Como faço para iniciar um segundo shell quando no modo de usuário único?

14

Isso pode soar como uma contradição em termos, mas recentemente precisei usar o modo de usuário único (também conhecido como modo de manutenção) por algum tempo (dias!) ao tentar reconstruir um array RAID quebrado.

Enquanto isso, eu me vi querendo usar um segundo shell para coisas como verificar / editar as configurações em vários arquivos de configuração ou olhar para logs do sistema enquanto o console principal (e único) está amarrado executando alguma recuperação processo.

Qual seria o comando recomendado para lançar um segundo shell em outro tty?

Obviamente, um método pode ser usar screen em tty1, mas isso não tem a facilidade de simplesmente trocar sessões com Alt-F1, Alt-F2, etc.

    
por StarNamer 16.03.2014 / 21:34

4 respostas

13

Existe um comando projetado especificamente para essa situação: openvt . Apenas execute openvt do seu shell no tty1 e você encontrará um shell rodando no primeiro tty que já não tem algo nele (tty2 provavelmente). Existem várias opções que você pode achar úteis; veja a página man do openvt.

Como esse não é um login gerenciado pelo getty, quando você sai do novo shell, não aparece um prompt de login. O tty irá apenas morrer, já que não haverá processos sendo executados, mas você ainda poderá alternar entre (Alt-F1 Alt-F2) e ver o que estava na tela quando saiu do shell. O comando deallocvt destrói os ttys que estão nesse estado de zumbi, retornando ao estado original "Alt-F2 não faz nada".

Originalmente, esses comandos eram chamados de open e disalloc , mas eventualmente alguém decidiu mudá-los porque eram muito genéricos e a desalocação era considerada "não uma palavra".

Antigamente, era comum que o driver do teclado e o init fossem configurados para que o Alt + Up executasse open , de modo que funcionasse como uma tecla de atalho para gerar um shell em um novo console. Você ainda pode encontrar um remanescente dessa configuração antiga, comentada, no seu /etc/inittab . (Se você não estiver usando algum novo init sofisticado que não tenha um inittab .)

Existe uma pergunta semelhante aqui

    
por 16.03.2014 / 23:55
12

Você pode gerar outro getty para qualquer ttys desejado. Inicialize no modo de usuário único e, em seguida, inicie um getty em tty2:

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

Você pode agora Alt + F2 passar para o novo tty. Repita para ttys adicionais, conforme necessário. Você provavelmente poderia fazer algo mais limpo e apenas configurar /etc/inittab para lidar automaticamente com isso no modo de usuário único.

    
por 16.03.2014 / 23:04
2

Você provavelmente pode fazer sem uma instância de shell extra usando JOB CONTROL em seu shell atual. Está documentado na manpage de bash(1) .

Você pode simplesmente suspender uma tarefa usando a sequência Ctrl + Z por padrão, embora ela possa ser configurada em seu terminal de uma maneira diferente, verifique a saída de stty -a :

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

Você pode verificar seus trabalhos emitindo jobs :

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

Traga um deles para o primeiro plano:

$ fg %3

Ou retome em segundo plano:

$ bg %2

Este método não tem muitas das vantagens de screen ou tmux , mas pode ser igualmente útil em algumas situações.

    
por 16.03.2014 / 22:49
1

Considere o uso de multiplexadores de terminal, como tmux ou screen.

Saiba mais sobre o tmux aqui: link

    
por 16.03.2014 / 21:56

Tags