这听起来可能有点矛盾,但最近我需要使用单用户模式(又名维护模式)一段时间(几天!)来尝试重建损坏的 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 不执行任何操作”状态。
最初这些命令被称为open
和disalloc
,但最终有人决定更改它们,因为它们太通用并且 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