Tmux 入门 + 常用命令 (解决 ssh 远程终端断连 - 实现 Linux终端多任务 + 多窗口)
Tmux (Terminal Multiplexer) 是一款功能强大的终端复用器,它早已成为许多开发者工具箱中的必备利器(作者是在ssh连接服务器过程中遇到断连终端丢失问题后,才开始接触到 Tmux)
tmux:终端多任务管理 - B站Tmux播放最高的视频 - TheCW
一、Tmux 是什么?
1.1 理解会话 (Session) 与进程
我们日常使用命令行的模式通常是:打开一个终端窗口 (terminal window),在其中输入命令并与计算机交互。这个过程,我们称之为一次“会话 (session)”。
会话有一个关键特性:窗口与其中运行的进程是绑定的。一旦我们关闭窗口,会话便会终结,而会话内启动的所有进程,无论是否执行完毕,都会被强制终止。
一个经典的场景是:当我们通过 SSH 登录远程服务器,在一个终端窗口中执行耗时任务时,如果网络连接意外断开,重新登录后会发现之前的任务已经消失了。这是因为上一次的 SSH 会话已经随着连接断开而终止,其内部的进程也随之退出了。
为了解决这个问题,我们需要一种机制,让会话与窗口“解绑” (detach)。这样,即使窗口关闭,会话及其内部的进程也能在后台持续运行,等待我们下一次按需“接入” (attach) 回来。
1.2 Tmux 的核心作用
Tmux 正是实现会话与窗口“解绑”的专业工具,它能将二者彻底分离,并带来诸多好处:
- 多任务并行:允许在单个终端窗口中创建并访问多个独立的会话,非常适合同时处理多个命令行任务。
- 会话持久化:可以让新的窗口接入到已存在的会话中,即使断开连接,后台任务依然运行,随时可以恢复工作现场。
- 协同共享:支持多个客户端连接到同一个会话,实现多人实时共享屏幕和操作,便于远程协作和教学。
- 灵活布局:支持将一个窗口任意拆分为多个窗格 (pane),可以垂直或水平排列,自由组织工作区。
尽管市面上还有 GNU Screen 等类似的终端复用工具,但 Tmux 凭借其更现代的设计、更强大的功能和更友好的用户体验,成为了目前更受欢迎的选择。
二、基础用法
2.1 安装
Tmux 通常需要手动安装。您可以根据自己的操作系统,使用对应的包管理器进行安装。
# Ubuntu 或 Debian
$ sudo apt-get install tmux# CentOS 或 Fedora
$ sudo yum install tmux# macOS
$ brew install tmux
2.2 启动与退出
安装完成后,在终端中输入 tmux
命令即可进入 Tmux 环境。
$ tmux
启动后,您会看到一个全新的界面,其底部有一条状态栏。状态栏左侧显示当前窗口信息(编号和名称),右侧则显示系统信息。
要终止(退出) Tmux,可以按下 Ctrl+d
快捷键,或者直接输入 exit
命令
操作 | 命令 | 效果 | 适用场景 |
---|---|---|---|
分离会话 | Ctrl+b 然后按 d | 会话在后台继续运行,可以随时恢复。 | 最常用。暂时离开,让任务在后台继续执行(如编译代码、下载文件、运行服务器)。 |
退出/终止 | Ctrl+d 或 exit | 关闭当前窗格/窗口,如果是最后一个则整个会话被删除。 | 彻底完成了所有工作,想完全关闭这个会话。 |
2.3 前缀键 (Prefix Key)
Tmux 的所有快捷键都需要通过一个“前缀键”来激活。默认的前缀键是 Ctrl+b
。这意味着,您需要先按下 Ctrl+b
,松开后再按下一个指定键,才能触发相应的功能。
例如,查看帮助文档的快捷键是 ?
。在 Tmux 窗口中,您需要先按下 Ctrl+b
,然后再按下 ?
,帮助信息就会显示出来。阅览完毕后,按 Esc
或 q
键即可退出帮助页面。
2.4 状态行 (Status Line)
连接 tmux 客户端后,屏幕底部会显示一条状态行
默认状态行显示为绿色
状态行内容如下:
三、会话管理 (Session)
3.1 新建会话
直接启动 Tmux 时,会话会以数字 0, 1, 2… 自动编号。为了便于管理,我们推荐在创建时为会话命名。
# 新建一个名为 <session-name> 的会话
$ tmux new -s <session-name>
3.2 分离会话
在 Tmux 窗口中,按下 Ctrl+b
后再按 d
,或者直接输入 tmux detach
命令,即可将当前会话与窗口分离(会话将在后台继续运行)。
$ tmux detach
分离后,您会返回到常规的终端界面。此时,可以使用 tmux ls
命令查看所有正在后台运行的 Tmux 会话。
$ tmux ls
# 或者使用别名
$ tmux list-sessions
3.3 接入会话
当需要恢复工作时,使用 tmux attach
命令重新接入指定的会话。
# 按编号接入
$ tmux attach -t 0# 按名称接入
$ tmux attach -t <session-name>
3.4 终止会话
使用 tmux kill-session
命令可以彻底关闭并删除一个会话。
# 按编号终止
$ tmux kill-session -t 0# 按名称终止
$ tmux kill-session -t <session-name>
3.5 切换会话
当您已经在一个 Tmux 会话中时,可以使用 tmux switch
命令直接跳转到另一个会话。
# 按编号切换
$ tmux switch -t 0# 按名称切换
$ tmux switch -t <session-name>
3.6 重命名会话
使用 tmux rename-session
命令可以为已存在的会话重命名。
# 将 0 号会话重命名为 <new-name>
$ tmux rename-session -t 0 <new-name>
3.7 会话常用快捷键
Ctrl+b
d
:分离当前会话。Ctrl+b
s
:以列表形式显示所有会话,可通过方向键选择并切换。Ctrl+b
$
:重命名当前会话。
四、极简操作流程
总结一下,Tmux 最核心的工作流如下:
- 新建会话:
tmux new -s my_project
- 执行任务:在 Tmux 窗口中运行所需程序。
- 分离会话:按下
Ctrl+b
d
,安全下线。 - 恢复工作:下次登录后,执行
tmux attach -t my_project
重新连接。
五、窗格操作 (Pane)
Tmux 允许将一个窗口分割成多个独立的窗格 (pane),每个窗格都可以运行不同的命令,这是其强大之处。
5.1 划分窗格
Ctrl+b
%
:将当前窗格左右均分为两个。Ctrl+b
"
:将当前窗格上下均分为两个。
5.2 移动光标
Ctrl+b
方向键
:根据箭头方向(↑
↓
←
→
)在窗格间切换光标。Ctrl+b
o
:按顺序循环切换到下一个窗格。Ctrl+b
;
:切换到上一个激活的窗格。
5.3 调整窗格
Ctrl+b
{
:将当前窗格与上一个窗格交换位置。Ctrl+b
}
:将当前窗格与下一个窗格交换位置。Ctrl+b
z
:将当前窗格最大化/恢复原状 (zoom)。Ctrl+b
x
:关闭当前窗格(会提示确认)。Ctrl+b
!
:将当前窗格独立为一个新窗口。Ctrl+b
q
:短暂显示所有窗格的编号。
六、窗口管理 (Window)
除了窗格,Tmux 还支持在单个会话中创建多个窗口 (window),类似于浏览器中的标签页。
6.1 新建窗口
Ctrl+b
c
:在当前会话中创建一个新窗口。
6.2 切换窗口
Ctrl+b
p
:切换到上一个窗口。Ctrl+b
n
:切换到下一个窗口。Ctrl+b
w
:以列表形式显示所有窗口,可通过方向键选择并切换。Ctrl+b
[数字]
:直接跳转到指定编号的窗口。
6.3 重命名窗口
Ctrl+b
,
:重命名当前窗口。
七、其他实用命令
以下命令可以在 Tmux 环境外或内部执行,用于获取信息和管理配置。
# 列出所有快捷键及其绑定的 Tmux 命令
$ tmux list-keys# 列出所有 Tmux 命令及其参数
$ tmux list-commands# 显示当前 Tmux 服务器的综合信息
$ tmux info# 重新加载配置文件(默认为 ~/.tmux.conf)
$ tmux source-file ~/.tmux.conf
八、参考链接
Tmux 使用教程 - 阮一峰的网络日志
tmux常用命令及快捷方式 - 知乎