终端复用器 tmux 入门
通过 SSH 远程连接服务器执行一个耗时较长的任务时,如果网络断开或者主动关闭了终端窗口,正在运行的程序通常会随之被终止。tmux(Terminal Multiplexer,终端复用器)解决的正是这个问题:它把“正在运行的终端会话”和“当前用来查看它的终端窗口”解耦开,会话本身独立运行在后台,终端窗口断开之后,会话仍然继续运行,之后可以重新连接回去。
sudo apt install tmux会话:tmux 的核心概念
Section titled “会话:tmux 的核心概念”会话(Session)是 tmux 里独立运行的一个环境,包含了其中执行的所有命令、正在运行的程序及其状态。会话的关键特性是它的生命周期不依赖于某个具体的终端窗口——启动会话的终端窗口关闭,或者 SSH 连接断开,只要 tmux 服务本身仍在运行(通常在远程服务器上就是持续运行的),这个会话就依然存在,可以之后重新连接回去查看。
tmux new -s work # 新建一个名为 work 的会话tmux ls # 列出当前所有会话tmux attach -t work # 重新连接到名为 work 的会话tmux kill-session -t work # 终止指定会话- 通过 SSH 登录远程服务器,执行
tmux new -s work新建一个会话 - 在这个会话里启动一个耗时较长的任务(比如一次大规模数据处理)
- 按下前缀键(默认是
Ctrl+b)再按d,从当前会话“脱离”(Detach)——注意这不是关闭会话,任务仍在会话里继续运行 - 断开 SSH 连接、关闭终端,这些操作都不会影响会话内正在运行的任务
- 之后重新登录服务器,执行
tmux attach -t work,回到之前的会话,任务的执行状态和输出都完整保留
前缀键:tmux 内所有快捷键的入口
Section titled “前缀键:tmux 内所有快捷键的入口”tmux 内的快捷键都需要先按前缀键(默认 Ctrl+b),松开后再按下一个具体按键,两者不是同时按下。这样设计是为了避免和 Shell 本身、或者 Shell 里正在运行的程序的快捷键冲突——只有先按了前缀键,tmux 才会把接下来的按键当作是发给自己的指令,否则会正常传递给当前面板里运行的程序。
窗口与面板:会话内部的进一步划分
Section titled “窗口与面板:会话内部的进一步划分”一个会话内部可以再划分出多个窗口(Window,类似浏览器里的标签页,同一时刻只显示一个),每个窗口内又可以再划分出多个面板(Pane,同一屏幕内并排显示的多个终端区域):
| 操作 | 快捷键(先按前缀键) |
|---|---|
| 新建窗口 | c |
| 切换到下一个/上一个窗口 | n / p |
| 垂直分割出新面板 | % |
| 水平分割出新面板 | " |
| 在面板之间切换 | 方向键 |
| 关闭当前面板 | x |
为什么这很重要
Section titled “为什么这很重要”这个主题是构建可靠 Linux 开发流程的重要组成部分。对它有清晰的理解,会让后续任务变得更容易,因为你能更快地判断某一步是否缺失或使用不当。
- 在安全的测试环境中尝试这里展示的命令和配置。
- 比较这些概念在不同发行版或工具之间的适用差异。
- 记下一次实践中哪些步骤成功,哪些失败,这样下次遇到问题时更容易定位。
- 将这篇文章与系列中相关内容结合起来,加深整体理解。
- 跳过验证步骤,默认系统已经配置正确。
- 不对命令中的路径、软件包名称或工具版本进行适配,直接复制粘贴执行。
- 把这个主题当成孤立的技巧,而不是整个开发流程的一部分。