tmux 如何在你的 Linux 终端中激发乐趣

使用 tmux 像近藤麻理惠一样整理你的终端。
152 位读者喜欢这篇文章。
Linux keys on the keyboard for a desktop computer

让我来描述一下场景:有一天,我正在调试一个耗时的特征生成器进程。我在我的 Mac 上打开了一个终端,并连接到我的远程 Linux 虚拟机 (VM),进程将在那里启动。我用脚本检查了一些东西,一切看起来都很好。但是当我启动进程时,差不多到了下班回家的时候了。关闭我的笔记本电脑会杀死我的 shell,这将杀死进程。这个过程需要很长时间,与其等到回家后才能调试结果,不如重新启动它并等待它完成。我开始接受我不得不加班的事实,并且对事态的这种转变感到不高兴。

一位同事注意到了我的沮丧,问他如何提供帮助。我解释了我的问题,说一定有一种方法可以在我关闭终端后继续运行进程,因为它是在远程 VM 上。我担心它必须连接到我的 shell 才不会死掉。然后他向我介绍了 tmux

使用 tmux 远程运行脚本

首先,我执行了 tmux 的 yum 安装。然后我通过输入命令 tmux 启动了一个 tmux 会话。我可以在这个 tmux 会话中做我在普通 shell 中所做的一切。由于我刚刚启动了进程,我在原始终端中杀死了它。然后我转到 tmux 会话并再次启动脚本来运行该进程。最后,我像典型的下班结束一样让我的笔记本电脑进入睡眠状态。

当我再次打开笔记本电脑时,正如我预期的那样,我的终端 shell 已与我的 VM 断开连接。我重新登录到 shell 上的 VM,但它是空白的,就像您刚启动 shell 时通常一样。我的第一反应是恐慌,但后来我了解到我只需要重新访问我的 tmux 会话,因为它只是在后台嗡嗡作响。

要重新连接到我的 tmux 会话,我输入 tmux ls 以列出我打开的所有会话。只有一个会话,会话 0。要返回该会话,我只需执行 tmux attach -t 0。瞧,会话出现了,我的脚本仍在运行。我欣喜若狂,并很快想学习 tmux 还能做什么。

使用 tmux 作为窗口管理器

我从不关闭浏览器选项卡,也从不关闭窗口,因此我可能在任何时候都有大约 20 个左右的终端打开并运行。近藤麻理惠 可能在我打开新窗口时感受到了原力的扰动。但是,我不是打开四个都连接到同一 VM 的终端,并试图跟踪它们以及它们在我的终端列表中的位置,而是使用 tmux,我可以打开一个连接到 VM 的终端,并在该终端中设置四个窗格。这真的非常方便。例如,我经常在 VM 上启动一个进程,然后需要去编辑某个地方的属性文件。由于第一个进程仍在运行,我打开另一个终端来编辑文件。然后我意识到我需要运行第二个进程,同时在另一个窗口中 tailing 日志,以了解如何编辑我刚刚打开的属性文件。如果没有 tmux,这将创建三个永远不会关闭的终端。

tmux 尤其对于运行 Docker 和 Kubernetes 来说是救命稻草。将容器专用于其自身的窗格而不是打开新终端非常有帮助。主窗格允许我监控容器的运行状况。每当我需要进入容器时,我可以轻松打开一个新窗格。如果我愿意,我甚至可以同时在每个容器上运行 docker-compose updocker-compose down,并且在执行此操作时只打开一个终端。

窗格已经格式化并彼此相邻,因此我不必收集所有连接到同一个 VM 的终端,并尝试将它们拖放到显示器上彼此相邻的位置——只是为了在需要打开新终端时再次执行所有操作。tmux 甚至允许您动态调整各个窗格的大小!当您完成窗格操作后,很容易关闭窗格。您没有关闭与 VM 的终端连接;您可以重新打开窗格。这有助于我保持桌面清洁,而不是用遗忘的终端弄乱它。

重新映射 tmux 前缀

我最近了解到我可以重新映射 tmux 前缀,使事情变得更加容易。在执行 tmux 命令(例如,创建新窗格、调整窗格大小或在终端中复制和粘贴一些文本)之前,您必须输入特定的按键模式,以让 tmux 知道您即将调用 tmux 命令,而不是任何普通的 Linux 命令。默认前缀是 CTRL+b。例如,水平邻接当前窗格打开新窗格的命令只是 %,但为了让 tmux 监听,您必须输入 CTRL+b+%CTRL+b 对我来说有点笨拙,所以我将其重新映射为反引号 (`)。重新映射的前缀使事情比必须敲击两个位置不太方便的键更顺畅。现在,如果我想要一个新窗格,我只需键入 `+%,瞧!

从开始到结束的 tmux

我在任何新的 Linux VM 上做的第一件事就是安装 tmux。我在连接到 Linux VM 的任何终端中做的第一件事就是启动 tmux 会话!我甚至在安装 tmux 后拍摄我的基本 VM 快照,这样如果我需要恢复到快照,我就不必重新安装 tmux。每当我重新登录 Linux VM 时,我总是执行 tmux ls 来查找我之前的 tmux 会话,然后连接到它并继续我上次离开的地方。

接下来阅读什么
标签

12 条评论

我最近从 ``screen`` 切换到 ``tmux``,从那以后生活变得愉快了 33%。

我非常认同这篇文章。

考虑到某个演示文稿的历史,我非常惊讶以上人员没有撰写这篇文章。

自从我在 gnu 与 bsd 工具的比较中发现 tmux 以来,我就一直对它赞不绝口。

回复 作者 sethkenlon

实际上,这听起来像是一个很棒的文章主题。

回复 作者 cobra2

您正在运行 macOS。如果我没记错的话,它自带 Ruby 解释器...
接下来查看 Tmuxinator

https://github.com/tmuxinator/tmuxinator

只是想知道...tmux 能做到 screen 做不到的事情吗?我已经使用 screen
多年,并且非常喜欢我创建的自定义状态行。什么会
说服我切换到 tmux?

老实说,不多。在有一天我即将在 Linux Conf AU 上发表演讲并意识到我需要一个终端的“演示模式”之前,GNU screen 是我的主要驱动程序。我希望保持终端全屏,但也能来回切换我的笔记。Tmux 可以做到这一点:您可以在一个终端窗口中打开 tmux,将其放在一个屏幕(或计算机,就此而言)上,然后从另一个终端连接到同一个 tmux 会话 - 并且您在一个终端中输入的任何内容都会实时显示在另一个终端上。

从那时起,我决定这种灵活性对我来说非常好,所以我主要切换到 tmux(这样我可以更好地了解它)。但这可能是一个相当小众的用例,因此可能无法说服您使用 tmux 而不是 GNU Screen。

再次说明,它不必是从一个到另一个的全面切换。它们都是自由软件,它们和平共处。您可以根据需要使用其中一个或另一个!

回复 作者 carltm

有些人会认为这种行为是连接到同一会话的缺点:使用“screen”,多人可以连接到同一会话,但具有不同的、独立的视图。使用 tmux,所有内容都在会话内共享。

要在 tmux 中模拟 screen 行为,您必须告诉 tmux 在与原始会话相同的会话组中启动新会话。请参阅 tmux 的手册页,“new-session -t”。

回复 作者 sethkenlon

我不知道您是否在区域/窗格布局方面做了很多工作。在 tmux 和 screen 中,您都可以将窗格/区域拆分为复杂的布局。不同之处在于,当您分离并在以后重新连接时,tmux 会记住它。当您分离时,Screen 会忘记布局。如果您将其用于开发和监控,这可能会很痛苦。

回复 作者 carltm

你们似乎完全忽略了 byobu 的存在,byobu 是一组用于 GNU Screen 和 tmux 的配置文件,它使一切都变得容易得多。自 2012 年以来,它一直是 ubuntu-server 的一部分,自 2014 年左右以来可以从其他发行版安装。试试看,F9 是调出帮助菜单的键!

不错,还没听说过 byobu。我必须试一试。

回复 作者 Graham Cantin (未验证)

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