5 种拆分 Linux 终端的方法

您最喜欢的终端复用器是什么?参与我们的投票。然后阅读关于 Linux 如何提供多种方式来拆分您的终端,以便您可以进行多任务处理。
156 位读者喜欢这篇文章。
FreeDOS

Opensource.com

有什么比温暖闪烁的 Linux 终端更好的吗?

当然有:两个温暖闪烁的 Linux 终端。事实上,越多越好。

很久以前,终端是物理设备,但当然,今天,它们只是作为计算机上的应用程序进行模拟。如果您更喜欢终端作为您的界面,您可能知道一个终端通常是不够的。不可避免地,您将打开一个新的终端或一个新的选项卡,以便您可以在其中工作,而您的第一个终端正忙于编译、转换或以其他方式处理数据。

如果您是系统管理员,那么您知道在同时处理多个系统时,您至少需要打开四个窗口。

带有选项卡的终端应用程序在 Linux 上已经存在很长时间了,幸运的是,这种趋势似乎已经流行起来,以至于它成为现代终端的预期功能。然而,有时在选项卡之间来回切换会让人分心或不方便。

唯一的答案是分屏,以便两个或多个终端可以同时存在于一个应用程序窗口中。您的 Linux 工具包中有许多工具可以帮助您切分和分割您的控制台。

Shell、终端和控制台

在您切分和分割屏幕之前,您应该知道终端、shell 和“控制台”之间的区别。要了解完整情况,请阅读我在 Enable Sysadmin 博客上关于此主题的文章。

简短版本

  • shell 是一个带有提示符的输入和输出屏幕。从技术上讲,即使它不可见(因为它是一个启动用户会话的 shell),在您的 POSIX 桌面下某处也运行着一个 shell。
  • 终端是在图形服务器(例如 X11 或 Wayland)中运行的应用程序,其中加载了 shell。只有在您启动终端窗口时,终端才运行。它或多或少是进入您的 shell 的“门户”。
  • “控制台”或“虚拟控制台”通常用于暗示在您的桌面之外运行的 shell。您可以通过按 Alt-Ctrl-F2 进入虚拟控制台(通常可以从 F3F7 获得更多虚拟控制台,其中 F1F7 代表您的桌面,具体取决于您的发行版)。

有些应用程序允许您拆分您的 shell 或控制台,而另一些应用程序允许您拆分您的终端。

tmux

tmux terminal

可以说是最灵活和功能最强大的屏幕拆分器,tmux 是一款以键盘为中心的终端复用器,这意味着您可以将一个控制台“分层”在另一个控制台之上,然后在两者之间切换。您还可以将控制台视图分成两半(或三分之一或四分之一等等),以便您可以并排查看其他控制台。

所有控件都围绕键盘,这意味着您永远不必将手从键盘上移开去寻找鼠标,但也意味着您必须学习一些新的键盘组合。

如果您主要使用 tmux 进行屏幕拆分,那么您真正需要的只是这些命令

  • Ctrl-B % 用于垂直拆分(左侧一个 shell,右侧一个 shell)
  • Ctrl-B" 用于水平拆分(顶部一个 shell,底部一个 shell)
  • Ctrl-B O 使另一个 shell 处于活动状态
  • Ctrl-B ? 获取帮助
  • Ctrl-B d 从 Tmux 分离,使其在后台运行(使用 tmux attach 重新进入)

tmux 有许多优点,包括能够在 一台计算机上启动 tmux 会话,然后从另一台计算机远程加入同一会话。它本质上使您的 shell 守护进程化。

例如,通过在 Pi 上运行 tmux,我可以永久保持登录 IRC 的状态——我在 Pi 上启动 tmux,然后从我碰巧使用的任何计算机登录。当我注销时,tmux 继续运行,耐心地等待我从不同的计算机重新连接到会话。

GNU Screen

GNU Screen terminal

与 tmux 类似,GNU Screen 也是一个 shell 复用器。您可以从正在运行的会话中分离和重新连接,并且可以水平和垂直拆分屏幕。

Screen 比 tmux 稍微笨拙一些。它的默认按键绑定是 Ctrl-A,这也恰好是 Bash 用于转到行首的键盘快捷键。这意味着,如果您正在运行 Screen,您必须按 Ctrl-A 两次而不是一次才能转到行首。就我个人而言,我使用 $HOME/.screenrc 中的这一行将触发键重新定义为 Ctrl-J

escape ^jJ

Screen 的拆分功能运行良好,但它缺少 tmux 所缺少的一些便利性。例如,当您拆分 shell 时,新的 shell 不会在另一个面板中启动。您必须使用 Ctrl-A Tab(或者如果您像我一样重新定义了键盘快捷键,则使用 Ctrl-J)导航到另一个空间,并使用 Ctrl-A C 手动创建一个新的 shell。

与 tmux 不同,当您退出 shell 时,拆分不会消失,这在某些情况下是一个非常好的设计功能,但有时也很麻烦,因为它迫使您手动管理拆分。

尽管如此,Screen 仍然是一个可靠且灵活的应用程序,如果您发现 tmux 对您不可用,您可以运行它。

以下是基本拆分命令,使用默认键盘快捷键

  • Ctrl-A | 用于垂直拆分(左侧一个 shell,右侧一个 shell)
  • Ctrl-A S 用于水平拆分(顶部一个 shell,底部一个 shell)
  • Ctrl-A Tab 使另一个 shell 处于活动状态
  • Ctrl-A ? 获取帮助
  • Ctrl-A d 从 Screen 分离,使其在后台运行(使用 screen -r 重新进入)

Konsole

Konsole screen

Konsole 是与 KDE Plasma 桌面捆绑在一起的终端。与 KDE 本身一样,Konsole 以高度可定制和强大而闻名。

其众多功能之一是能够拆分其窗口,类似于 tmux 和 GNU Screen。由于 Konsole 是图形终端,您可以使用鼠标而不是键盘来控制其分屏功能。

拆分功能位于 Konsole 的 View 菜单中。您可以水平或垂直拆分窗口。要更改哪个面板处于活动状态,只需单击它即可。每个面板都是一个唯一的终端,因此它可以有自己的主题和选项卡。

与 tmux 和 GNU Screen 不同,您无法从 Konsole 分离和重新连接。与大多数图形应用程序一样,您在物理上位于 Konsole 前时使用它,并且当您离开时,您会失去对其的访问权限(除非您使用远程桌面软件)。

Emacs

Emacs rpg

Emacs 并非完全是终端复用器,但其界面支持拆分和调整大小,并且它具有内置终端。

如果您每天都在使用 Emacs,那么在本质上不同的应用程序之间拆分窗口的能力意味着您永远不必离开您最喜欢的文本编辑器的熟悉和舒适的环境。此外,由于 Emacs eshell 模块是用 eLISP 实现的,因此您可以使用与 Emacs 本身相同的命令与之交互,从而可以轻松复制和粘贴长文件路径或命令输出。

如果您在图形窗口中使用 Emacs,则可以使用鼠标执行某些操作。使用键盘快捷键更快,并且有些是或多或少需要的。例如,您可以通过单击面板来更改哪个面板处于活动状态,并且可以使用鼠标调整分屏的比例。

以下是重要的键盘快捷键

  • Ctrl-X 3 用于垂直拆分(左侧一个 shell,右侧一个 shell)
  • Ctrl-X 2 用于水平拆分(顶部一个 shell,底部一个 shell)
  • Ctrl-X O 使另一个 shell 处于活动状态(您也可以使用鼠标执行此操作)
  • Ctrl-X 0 (那是零)关闭当前面板

与 tmux 和 GNU Screen 类似,只要您运行 emacs-client,您就可以从 Emacs 分离和重新连接。

窗口管理器

Ratpoison split screen

如果您认为可以拆分屏幕并加载终端的文本编辑器很棒,请想象您的桌面也具有相同的功能。有些 Linux 桌面,例如 RatpoisonHerbsluftwm、i3、Awesome,甚至启用特定设置的 KDE Plasma 桌面,都将每个应用程序窗口呈现为桌面网格中的固定平铺。

窗口不是浮动在您的桌面“之上”,而是保持在可预测的位置,因此您可以从一个窗口更改为另一个窗口。您可以在网格中打开任意数量的终端,模拟终端复用器。事实上,您甚至可以在桌面复用器中加载终端复用器。

并且没有什么可以阻止您在该桌面复用器中加载带有拆分缓冲区的 Emacs。没有人知道如果您进一步深入会发生什么,并且大多数 Linux 用户都同意最好不要弄清楚。

与 tmux 和 GNU Screen 不同,除非您算上使用远程桌面软件,否则您无法从桌面分离和重新连接。

其他选项

信不信由你,这些不是您在 Linux 上拆分屏幕的唯一选择。还有其他终端模拟器,例如之前的 Tilix 和 Terminator,它们可以拆分为多个部分,以及具有嵌入式终端组件的应用程序等等。在评论中告诉我们您最喜欢的拆分工作区的方式。

接下来要阅读的内容

使用 tmux 创建您梦想中的控制台

您可以使用 tmux 做很多事情,尤其是当您将 tmuxinator 添加到组合中时。在关于在开源中提高工作效率的 20 种方法的系列文章的第十五篇中查看它们……

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时从事这两个行业。

28 条评论

我从未对全屏拆分终端感到着迷。我只是根据需要打开尽可能多的终端,并让它们级联排列。如果碰巧我需要它们并排排列,我总是可以拖动它们。永远没有真正的必要将所有终端都放在一个窗口中,因为可悲的是,我们的眼睛一次只能专注于一个元素。因此,尽管技术允许我们用信息填充屏幕,但生物学决定了您并没有真正看到它。
此外,screen 和 Tmux 不仅仅用于拆分终端,它们还是一个时代的遗物,在那个时代,您只有一个窗口和一个终端,访问多个进程的唯一方法是使用复用器。如今,嗯,我们不需要这个了。当然,screen/tmux 有有效的用途,但在显示方面较少,除非您在帧缓冲区环境中在没有 X 的情况下运行。

Erez,很棒的观点。

我认为拆分屏幕对某些用户有吸引力,因为它使您可以轻松地交叉引用其他窗格中的信息,而无需将所有内容都放在单独的窗口中。这是一个细微的差别,但我知道在 Emacs 中,我很欣赏我可以轻松流畅地从一个缓冲区移动到另一个缓冲区,而无需依赖窗口管理器。

至于 screen 和 Tmux 的其他用途,本文中“忽略”了它们,因为我专注于专门拆分终端。我使用 Tmux 做的事情远不止拆分屏幕。也许有一天我会写一篇关于它的文章!

回复 ,作者:Erez Schatz

有趣的是您提到了 emacs,我也在每个缓冲区单个框架的设置中使用 emacs。虽然这在旧时代曾经是一团糟,但现代 GUI(如 Gnome 和 MacOSX)允许通过 Alt/command-Tab 在程序之间以及 Alt/Command-` 在同一程序的窗口之间进行更好的导航。与往常一样,窗口管理器是管理窗口的最佳工具。

回复 ,作者:sethkenlon

我的理解是,注意力更加细致入微。我们在没有直接关注(或强化,就此而言——参见 Bobo 娃娃实验)的情况下学习,并在没有关注的情况下内化上下文(想想如果我们的周边视觉中出现运动就做出反应)。

可以说上下文是有帮助的,任何在一个窗口中观看文件,同时在另一个窗口中运行命令的人都可以体会到分屏的优点。

回复 ,作者:Erez Schatz

的确,我倾向于将 tmux 与 vim 一起用作 IDE。我一半的屏幕被我正在编辑的源代码占据,另一半(或更少)是终端,我在终端上测试程序。

经常通过 ssh 在没有图形界面的远程服务器上工作,这个解决方案对我来说是完美的。

回复 ,作者:mbbroberg

您的眼睛移动速度比手指快得多。并且通过 alt-tab 切换窗口是不可扩展的,除非您的窗口管理器允许您使用特定的热键切换到特定窗口,而不必在切换两个 vscode 实例或类似内容时考虑“我的 API 代码在哪个 VSCode 实例中”。

您也没有考虑“观看”事物。您可能有一个程序在终端实例中输出内容。您可以在眼角的“运动”中“看到”它,并将您的注意力吸引到问题上。如果它在另一个窗口后面,则不可能发生这种情况。窗口管理器当然可以对此有所帮助,在我的桌面上,我可以使用 windows+left/right/etc。但这在您 shell 进入服务器或其他内容时不起作用,有时在可调整大小的终端窗口中拥有它会很好。

在我的程序员工作中,所有这些都绝对不是边缘情况。

回复 ,作者:Erez Schatz

非常内容丰富的文章!
继续写作

Emacs 是最好的

我从未赶上这种拆分终端/屏幕的潮流。使用 screen,我创建更多桌面,以便应用程序可以全屏显示。在终端中,我创建选项卡。

我最喜欢的用于管理拆分控制台屏幕的程序是 byobu。在幕后它使用 tmux,但它似乎更容易使用。

它也具有完整的鼠标支持,这意味着当您不记得那些奇怪的键盘快捷键时,可以轻松地调整大小并在拆分之间导航!

自从大约 5 年前深入研究虚拟化以来,终端拆分一直是我的(操作)生活方式。我使用 Remmina、RDC 或 Tilix(终端模拟器)。我通常有 4 个终端用于本地管理或管理 VM、嵌套 VM 和 LXC 容器的任意组合。

我将 Remmina 用于已建立的资源;地址基本上是固定的。Tilix 对于更流畅的测试和开发环境非常灵活,并且具有广泛的可配置性,可以提供充足的视觉提示,指示您所在的位置。

就终端拆分而言,对我来说主要价值在于这给了我一个相当不错的(尽管是临时的)“单窗格”视图,了解我正在处理的内容。

感谢您写了一篇好文章 Seth。

感谢您的阅读和全面的评论。我喜欢听取其他人的工作流程。

回复 ,作者:Craigo

令人费解的是,文章或评论中都没有提及为什么 tmux/screen、它们的包装器 byobu 或异步和延迟容忍的 mosh(甚至没有提及)受欢迎,例如可以幸免于断开连接甚至可以支持共享的远程会话。

即使您只想关注窗口功能,显而易见的用例也像任何平铺窗口管理器(包括 Emacs)一样,允许一次处理多个应用程序,就像图形桌面一样,包括最大化窗口和远程访问等功能。

总结;主要用例是通过远程方式进行开发工作,并进行窗口管理。

我明白您的意思。我们有其他文章讨论 Tmux 及其所有远程优势,所以我希望专注于选项而不是工作流程。但我认为您是对的:更多关于如何使用这些工具(无论是“守护进程化”您的登录还是镜像您的输入,还是仅仅用于窗口管理)的文档是合理的。关注这个空间(其中“这个”= opensource.com)

回复 ,作者:S (未验证)

没有提及能够将命令广播到所有屏幕或屏幕组?

对于本文,我专注于选项而不是工作流程。但这确实是一个很棒的功能。我经常在技术演示期间使用它,这样我可以在一个窗口中打开笔记,并将同步的 Tmux 会话广播给观众。

回复 ,作者:Ben88888 (未验证)

我在本地使用 Terminator,在远程服务器上使用 byobu。
正如 Matt Kurter 上面所说,Byobu 非常方便。而且非常容易学习,因为它使用功能键来管理分屏。因此,如果您不记得要按的正确键,您可以尝试。它也是完全可定制的。

我需要在本地使用 terminator,因为如果我在本地使用 byobu,然后 ssh 连接到服务器,则不容易管理一个套在另一个里面的两个复用器。
如果有人有巧妙的解决方案,请告诉我。

我认为像 Tmux 这样的拆分终端工具在使用真正的终端 (TTY) 时更有用。
无需使用终端模拟器(例如 Konsole,我的选择),它们也许可以使用自己的选项来做到这一点。

总是很有趣!! :)

祝您黑客愉快!

我使用过 screen 和 byobu。我从来没有拆分过屏幕,我只是使用 Ctrl-A + C 创建一个新的屏幕,然后使用 Ctrl-A N 和 P 在两者之间切换。与 ssh 配对使用,最好在家中准备一个终端,然后从工作地点连接到已运行的 screen,并在退出时分离。

上面没有提到的一件事是,可以在某些多终端复用器中同步击键(我主要使用 tmux,偶尔使用 byobu)。

我打开 4 个终端(每个终端在一个象限中),然后 ssh 连接到 4 个单独的服务器。然后我输入我想要的内容一次(例如,更新每个系统上的所有软件包),所有 4 个会话都同时更新,我可以同时看到所有会话的输出。

如果其中一个会话有问题,我可以轻松地取消同步击键,修复该会话,然后再次同步(如有必要)。

这比重复命令 4 次更有效率。

guake 也是一个选择

还有一个古老而简单的 splitvt 命令。

还有 Terminus(但不是那个用 Electron 构建的令人厌恶的东西)。它将 Terminator 和 Guake 组合在一个程序中。https://www.rastersoft.com/programas/terminus.html

在工作中,我使用远程服务器进行开发,我通过 SSH 连接到该服务器。
连接后,我倾向于在我的项目的根目录中启动 Neovim,并且几乎永远不会退出它。这是因为 nvim 的内置终端模拟器功能。我只需键入“:split | term”,这样我就有了窗口,其中包含文件和同一 nvim 实例中的终端。这种解决方案使得复制终端命令的输出非常容易,因为您只需使用 nvim 的寄存器即可。此外,使用“gF”从终端窗口(例如,由 grep -r、ack、ag 或 find 找到的窗口)打开文件非常方便。
当然,我可以打开多个终端实例,并将它们按我想要的方式排列在选项卡和窗口中。此外,保存和加载会话(选项卡和窗口布局以及文件和终端缓冲区都保留)为我作为开发人员提供了完美的工作流程。

我发誓我每天都在使用拆分终端(尤其是 Terminator)。
我懒得调整窗口大小,所以我只是拆分全屏终端窗口。
另外,附加功能是一种在一个终端上同时键入命令并将其发送到所有打开的终端的方法。这绝对是 terminator 的杀手级功能。
对您的终端会话进行分组并将命令发送到所有打开的终端,简单快捷!

所有这些都是很好的功能,但有一件事是我离不开的,那就是使用 Terminator 进行分屏。此外,您可以对这些拆分终端进行分组,并且可以一次将命令发送到所有终端。
此外,terminator 的 GUI 非常直观且易于拆分。这些绝对是我在日常工作中坚持使用它的原因。

知识共享许可本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.