前言
你是否遇到过这些情况?
- 用SSH连上远程服务器,正在执行一个需要数小时的任务,突然网络断开,一切前功尽弃。
- 想在一个终端里同时查看日志、编辑代码、执行命令,不得不打开好几个终端窗口,来回切换,手忙脚乱。
- 和同事协作排查问题,想让他实时看到你的终端操作,却只能通过截图或共享屏幕,效率低下。
如果这些场景让你感同身受,那么 tmux 就是你一直在寻找的解决方案。
tmux
什么是tmux?为什么需要它?
tmux 的全称是T erminal Mu ltiplexer(终端复用器)。它是一个强大的工具,允许你在一个单一的终端窗口中创建、访问和控制多个"虚拟"终端。
GitHub:https://github.com/tmux/tmux
文档:https://github.com/tmux/tmux/wiki/Getting-Started
核心好处:
1.会话保持(Session Persistence):
arduino
这是tmux最重要的特性。可以在服务器上开启一个tmux 会话,运行任务,然后安全地断开连接
服务器上的会话和任务会一直在后台运行。当重新连接后,可以"附加"(attach)回之前的会话,一切都还在原来的位置,就像从未离开过
这对于长时间运行的任务和不稳定的网络环境来说是救星
2.多任务处理(Windows & Panes):
可以在一个tmux会话中创建多个窗口(Windows),每个窗口就像一个独立的全屏终端
还可以将一个窗口分割成多个小窗格(Panes),实现分屏效果
比如,左边用 Vim 编辑代码,右上角实时查看日志,右下角执行 Git 命令,所有这些都在同一个屏幕内完成
3.结对编程(Session Sharing):
多个用户可以连接到同一个tmux会话,实时看到相同的屏幕内容,并进行操作。这对于远程协作和教学非常有用
核心概念
在开始之前,理解tmux的三个核心层级结构至关重要,这会对所有命令有更清晰的认识。
它们的层级关系是:Session > Window > Pane。
会话 (Session):
arduino
一个Session相当于一个独立的工作区,包含了多个窗口
可以创建多个Session,比如一个用于开发项目A,一个用于管理服务器
Session在后台独立运行,可以随时"分离"(detach)和"附加"(attach)
窗口 (Window):
sql
一个Window相当于浏览器里的一个标签页,它占据整个终端屏幕
在一个 Session中可以有多个Window,可以轻松地在它们之间切换
窗格 (Pane):
sql
一个Pane是Window分割出来的小块区域
一个Window可以被水平或垂直分割成多个Pane,每个Pane都是一个独立的伪终端,有自己的shell提示符
总结概述:
程序在终端的窗格中运行,每个窗格属于一个窗口
每个窗口都有一个名称和一个活动窗格
窗口链接到一个或多个会话
每个会话都有一个窗口列表,每个窗口都有一个索引
会话中的一个窗口是当前窗口
会话附加到一个或多个客户端,或者分离(不附加到任何客户端)
每个客户端都附加到一个会话
安装tmux
tmux几乎是所有Linux发行版的标准软件包。可以用系统的包管理器轻松安装。
-
在 Debian/Ubuntu 上:
bashsudo apt update sudo apt install tmux
-
在 CentOS/RHEL/Fedora 上:
bashsudo yum install tmux # 或者 sudo dnf install tmux
或者
bashsudo dnf install tmux
基本操作
前缀键 (Prefix Key)
tmux的所有快捷键都需要先按下一个
前缀键
,然后再按功能键。默认的前缀键是Ctrl + b
。
操作流程:
- 按住
Ctrl
键,再按b
键。 - 松开这两个键。
- 紧接着按下功能键(比如
c
、%
、d
等)。
在下文中,使用 [Prefix]
来代表 Ctrl + b
。
帮助键
每个默认的 tmux 按键绑定都有一个简短的描述,以帮助记住按键的功能。
快捷键:[Prefix]
+ ?
:进入查看模式以帮助信息
快捷键:Ctrl + Z
:退出查看
状态行
连接 tmux 客户端后,屏幕底部会显示一条状态行。默认状态行显示为绿色
状态行内容如下:
css
左侧为附加会话的名称:[0]
中间是会话中的窗口列表及其索引,例如,一个窗口ksh在索引 0 处调用:0:ksh
右侧是引号中的窗格标题(默认为运行 tmux 的主机名称)以及时间和日期

启动与会话管理
启动一个新会话
在终端里直接输入:
bash
tmux
这会创建一个新的、未命名的会话,并进入其中。会看到终端底部出现一个绿色的状态栏,这表示已经进入了tmux环境。
默认情况下,第一个会话将被称为0,第二个会话1
启动一个命名会话(推荐)
给会话命名是个好习惯,方便以后管理。
创建一个名为 my_project
的新会话。
bash
tmux new -s my_project
分离会话 (Detach)
当想要暂时离开会话,但让它在后台继续运行时,可以"分离"它。使用快捷键:[Prefix]
+ d
分离后,会回到原来的Shell提示符,但my_project
会话仍在后台运行。
看所有会话
使用tmux ls
命令可以列出当前所有正在运行的tmux会话
bash
[root@localhost ~]# tmux ls
0: 1 windows (created Tue Aug 12 14:08:13 2025) [180x34]
my_project: 1 windows (created Tue Aug 12 14:09:28 2025) [180x34]
附加会话 (Attach)
当准备好回来继续工作时,可以附加到之前分离的会话。 附加成功后,会看到之前会话的所有窗口和窗格,完好如初。
如果只有一个会话,可以直接用
bash
tmux attach
如果有多个会话,需要指定名称
bash
tmux attach -t 0
tmux attach -t my_project
关闭/杀死会话
1.在会话外部:使用命令
bash
tmux kill-session -t my_project
2.在会话内部:关闭所有窗格和窗口,会话会自动结束。
窗口管理
在一个会话中,可以管理多个窗口。
创建新窗口 (Create)
快捷键:[Prefix]
+ c
状态栏上会多出一个新的窗口标签,比如 0:bash
, 1:bash
。
切换窗口
切换到下一个窗口 (Next):[Prefix]
+ n
切换到上一个窗口 (Previous):[Prefix]
+ p
通过编号切换到指定窗口 (比如第1个窗口):[Prefix]
+ 1
重命名窗口 (Rename)
快捷键:[Prefix]
+ ,
此时状态栏会变为可编辑状态,输入新名字后按回车。
给窗口起一个有意义的名字,比如 "Logs"。
关闭当前窗口
快捷键:[Prefix]
+ &
(会提示确认)
或者直接在窗口的 Shell 中输入 exit
。
窗格管理
窗格管理是tmux分屏功能的精髓。
垂直分割 (左右)
快捷键:[Prefix]
+ %
这会将当前窗格一分为二,左右排列。

水平分割 (上下)
快捷键:[Prefix]
+ "
这会将当前窗格一分为二,上下排列。
在窗格间切换
快捷键:[Prefix]
+ 方向键
(↑, ↓, ←, →)
光标会在不同窗格间移动,当前激活的窗格边框会变色。
关闭当前窗格
快捷键:[Prefix]
+ x
(会提示确认)
或者直接在窗格的 Shell 中输入 exit
。
最大化/恢复窗格 (Zoom)
最大化/恢复窗格就是让当前窗格临时占满整个屏幕,以便专注工作
快捷键:[Prefix]
+ z
再按一次 [Prefix]
+ z
即可恢复原来的布局。
常用快捷键速查表
功能分类 | 快捷键 (Ctrl+b + ...) |
描述 |
---|---|---|
会话 | d |
分离当前会话 |
tmux ls (在tmux外) |
列出所有会话 | |
tmux attach -t [name] (在tmux外) |
附加到指定会话 | |
tmux new -s [name] (在tmux外) |
创建命名会话 | |
窗口 | c |
创建一个新窗口 |
w |
列出所有窗口 (可交互选择) | |
p |
切换到上一个窗口 | |
n |
切换到下一个窗口 | |
0-9 |
切换到指定编号的窗口 | |
, |
重命名当前窗口 | |
& |
关闭当前窗口 | |
窗格 | % |
垂直分割 (左右) |
" |
水平分割 (上下) | |
方向键 |
在窗格间移动 | |
z |
最大化/恢复当前窗格 | |
x |
关闭当前窗格 | |
o |
按顺序切换到下一个窗格 |
自定义配置
当熟练之后,可以创建 ~/.tmux.conf
文件来定制 tmux 的行为。例如,很多人觉得 Ctrl+b
不顺手,会改成 Ctrl+a
。
在 ~/.tmux.conf
中加入以下内容:
bash
# 将前缀键从 C-b 改为 C-a
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
# 开启鼠标支持 (滚动, 选择窗格/窗口)
set -g mouse on
修改后,需要让配置生效。可以在 tmux 会话中按 [Prefix]
+ :
进入命令模式,然后输入 source-file ~/.tmux.conf
,或者直接重启 tmux。