在单用户模式下如何启动第二个Shell?


14

这听起来似乎有点矛盾,但是最近我需要在一段时间(几天!)内使用单用户模式(又称维护模式)来尝试重建损坏的RAID阵列。

在执行此操作时,我发现自己想使用第二个Shell进行诸如检查/编辑各种配置文件中的设置或查看系统日志(而主控制台(也是唯一的控制台)捆绑执行某些恢复过程)的事情。

在另一个tty上启动第二个shell的推荐命令是什么?

显然,一种方法可能是screen在tty1中使用,但是要切换与Alt-F1,Alt-F2等的会话并不容易。


4
screen就这么简单。Ctrl AP似乎不比Alt F1难得多...
mveroone 2014年

值得注意的是,类似的应用程序screen,并tmux为TUI窗口管理并不总是做的伎俩。有时您需要一个实际的ttyX设备,而不是一个pts
Parthian Shot

Answers:


14

有专门针对这种情况设计的命令:openvt。只需openvt在tty1上的shell中运行,您会发现在第一个tty上没有任何内容的shell上运行(可能是tty2)。请参见openvt手册页。

由于这不是由getty管理的登录,因此当退出新的shell时,不会看到登录提示。tty将会失效,因为它上没有任何进程正在运行,但是您仍然可以来回切换(Alt-F1 Alt-F2),并在退出外壳时查看屏幕上的内容。该deallocvt命令将销毁处于类似僵尸状态的tty,并返回到原始的“ Alt-F2不执行任何操作”状态。

最初,这些命令被称为opendisalloc,但是最终有人决定更改它们,因为它们太通用且被分配为“一言不发”。

在过去,通常需要配置键盘驱动程序和init以便可以运行Alt + Up open,因此它可以用作在新控制台上生成shell的热键。您可能仍会在注释中发现该旧配置的残缺部分/etc/inittab。(如果您没有使用一些不带的新式init inittab。)

有一个类似的问题在这里


3
很好,我不知道openvt。+1。
jscott 2014年

盖蒂实际上实际上要容易得多。我从未意识到它已经安装。
StarNamer 2014年

只是以为我会报告说,我刚刚在单用户模式下的系统上花费了一个星期的时间来修复RAID阵列,openvt事实证明它非常有用。感谢您提出新命令。
StarNamer 2014年

12

您可以getty为想要的任何tty 生成另一个。引导到单用户模式,然后getty在tty2上启动:

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

您现在可以Alt+ F2进入新的tty。根据需要重复其他tty。您可能可以做一些更清洁的操作,而只是配置/etc/inittab为在单用户模式下自动处理此问题。


这看起来像我要找的东西。下次我会尝试。
StarNamer 2014年

试过了 它可以工作,但是由于登录会话不是从产生的init,因此如果死亡,也不会重新产生它。
StarNamer 2014年

实际上,在上述示例中,我们只是将其放到了后台。如果你需要一个真正的VT的全部产品,你会被黑客攻击/etc/inittab,并/etc/rc1.d/S??single在最起码。
jscott 2014年

2

您可以通过JOB CONTROL在当前shell中使用而无需额外的shell实例。它记录在的联机帮助页中bash(1)

默认情况下,您可以仅使用Ctrl+ Z序列挂起任务,尽管可以在终端中以其他方式对其进行配置,请检查以下命令的输出stty -a

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

您可以通过发出jobs以下命令检查您的工作:

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

将其中之一放在前台:

$ fg %3

或在后台恢复它:

$ bg %2

此方法不会有很多的优点screentmux,但可以在某些情况下,同样有用。


关键是我不想挂起或干扰初始控制台上运行的进程。例如,运行时,ddrescue我不想让中断和恢复它,即使它的成立,以做..
StarNamer

这有几个问题。其一,他可能没有使用bash作为他的壳(可以使用cshtcsh或者zsh,例如),所以提它的手册页会在这种情况下,不准确的。另外,这不能回答所要求的问题。
Parthian Shot

1

考虑使用终端多路复用器,例如tmux或screen。

在此处找到有关tmux的更多信息:https : //github.com/tmux/tmux/wiki


这个问题已经提到了这一点:“很显然,一种方法可能是在tty1 *中使用screen,但是要切换Alt-F1,Alt-F2等会话并不容易。”
Cristian Ciupitu 2014年

正如克里斯蒂安(Cristian)所说,我已经考虑过,screen并觉得其他多路复用器的作用更大。我需要的只是一个简单的第二个控制台。
StarNamer 2014年

啊,对不起,screen您的问题我忽略了。太晚了。
Marcin Kaminski 2014年

除了生成新的TTY并单独锚定它们之外,如何使用两个键的组合来“过度杀伤”?
mveroone 2014年

海事组织,这是对“过度杀伤”的奇怪定义,但是,嘿,不管对某人有用,我都很好;)
Marcin Kaminski 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.