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

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

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

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

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

显然,一种方法可能是在 tty1 中使用screen,但这并不像使用 Alt-F1、Alt-F2 等切换会话那么容易。

答案1

有一个命令专门为这种情况而设计:openvt。只需从 tty1 上的 shell 运行openvt,您就会发现第一个 tty 上运行的 shell 上还没有内容(可能是 tty2)。您可能会发现几个选项很有用;请参阅 openvt 手册页。

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

最初这些命令被称为opendisalloc,但最终有人决定更改它们,因为它们太通用并且 disallocate 被判断为“不是一个词”。

过去,键盘驱动程序和 init 的配置通常为 Alt+Up 运行open,这样它就可以充当在新的控制台上生成 shell 的热键。您可能仍会在 中找到注释掉的旧配置的残留/etc/inittab。(如果您没有使用没有 . 的花哨的新 init inittab

有类似的问题这里

答案2

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

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

您现在可以Alt+F2转到新的 tty。根据需要对其他 tty 重复此操作。您可能可以做一些更干净的事情,只需配置/etc/inittab为在单用户模式下自动处理此问题。

答案3

您可能不需要额外的 shell 实例,只需在当前 shell 中使用即可JOB CONTROL。它记录在 的联机帮助页中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

screen这种方法不具备或的许多优点tmux,但在某些情况下同样有用。

答案4

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

在这里了解有关 tmux 的更多信息:https://github.com/tmux/tmux/wiki

相关内容