这可能听起来像是一个矛盾,但是我最近需要使用单用户模式(又名维护模式)一段时间(几天!),同时尝试重build一个损坏的RAIDarrays。
在这样做的时候,我发现自己希望使用第二个shell来检查/编辑各种configuration文件中的设置,或者在主(而且是唯一的)控制台绑定执行一些恢复过程时查看系统日志。
在另一个tty上启动第二个shell的build议命令是什么?
显然,一种方法可能是在tty1中使用screen ,但是这并不像使用Alt-F1,Alt-F2等切换会话一样简单。
有一个专门为这种情况devise的命令: openvt 。 从tty1的shell中运行openvt ,你会发现在第一个tty上运行的shell没有任何东西(可能是tty2)。有几个选项可能会有用; 请参阅openvt手册页。
由于这不是由gettypipe理的login,因此当您退出新shell时,您将看不到login提示。 tty将会死掉,因为没有任何进程在运行,但是你仍然可以来回切换(Alt-F1 Alt-F2),看看退出shell的时候屏幕上显示的是什么。 deallocvt命令破坏处于这种僵尸状态的ttys,返回原来的“Alt-F2无作用”状态。
原来这些命令被称为open和disalloc ,但最终有人决定改变他们,因为他们太泛化,并且disallocate被认为是“不是一个字”。
在过去,键盘驱动程序和初始化configuration是很常见的,所以Alt + Up将会open ,所以它将作为一个热键在新的控制台上产生一个shell。 在/etc/inittab ,您可能仍然会find这个旧configuration的剩余部分,并将其注释掉。 (如果你不使用一些没有inittab新奇的init)
这里也有类似的问题
无论你想要什么,你都可以培养另一个getty 。 启动到单用户模式,然后在tty2上启动一个getty :
root@host:~# /sbin/getty 38400 tty2 &
你现在可以Alt + F2转到新的tty。 根据需要重复额外的ttys。 你可以做些更干净的事情,只要configuration/etc/inittab就可以在单用户模式下自动处理。
您可能可以通过在当前shell中使用JOB CONTROL来实现额外的shell实例。 它在bash(1) 。
您可以使用Ctrl + Z序列默认挂起一个任务,尽pipe它可以在terminal以不同的方式configuration,请检查stty -a的输出:
$ stty -a | grep susp eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
你可以通过发布jobs来检查你的jobs :
# jobs [1] Stopped journalctl -f [2]- Stopped vim /etc/hosts [3]+ Stopped tail -f /var/log/firewalld
把他们中的一个带到前台:
$ fg %3
或在后台恢复:
$ bg %2
这种方法没有screen或tmux许多优点,但在某些情况下可以同样有用。
考虑使用terminal多路复用器,如tmux或屏幕。 就像下面的截图一样,你在做什么?