在Ubuntu服务器上做运维,最怕的就是SSH连接断了、终端关了,正在跑的任务全没了。tmux就是解决这个问题的终极工具——它能让你在一个终端里开多个会话,每个会话还能分屏显示多个窗口,断开连接后重新接上,一切原样恢复。说白了,tmux就是终端里的"虚拟桌面管理器",学会它,你的运维效率直接翻倍。

tmux全称Terminal Multiplexer,是一个开源的终端复用器。它的核心能力就三点:会话持久化、窗口分屏、多任务并行。不管你是在本地操作Ubuntu桌面,还是远程SSH连到云服务器,tmux都能让你同时监控日志、编辑配置、跑脚本,互不干扰。下面我从安装、基础操作、分屏技巧、会话管理到高级配置,一次性讲透。

一、Ubuntu上安装tmux,一步到位

Ubuntu的官方仓库里直接有tmux,不需要额外源。打开终端执行:

sudo apt update
sudo apt install tmux -y

装完验证版本:

tmux -V

建议装2.7以上版本,新版本支持更多分屏布局和更好的鼠标支持。如果你用的是Ubuntu 22.04 LTS,默认装的就是3.x版本,功能非常完善。

二、tmux核心概念:会话、窗口、面板

很多人上来就操作,结果搞混了三个层级。我直接给你理清楚:

会话(Session):最顶层,相当于一个独立的工作空间。你可以创建多个会话,比如"web运维"、"数据库维护"、"监控任务",每个会话之间完全隔离。

窗口(Window):会话里面的标签页。一个会话可以有多个窗口,每个窗口可以有自己的名字,方便快速切换。

面板(Pane):窗口里面的分屏区域。一个窗口可以水平或垂直切成多个面板,每个面板独立运行一个命令。

记住这个层级关系:会话 > 窗口 > 面板。所有操作都围绕这三层展开。

三、基础操作:创建会话与常用快捷键

tmux所有操作都需要先按"前缀键",默认是Ctrl+b。按下之后再按其他键才生效。这个习惯必须养成,不然你按什么都没反应。

创建一个新会话:

tmux new -s mywork

这里mywork是会话名,你可以随便起。创建后你会看到底部出现绿色状态栏,说明已经进入tmux了。

常用快捷键列表,我直接给你最实用的:

Ctrl+b c        → 新建窗口
Ctrl+b n        → 下一个窗口
Ctrl+b p        → 上一个窗口
Ctrl+b 0-9      → 切换到指定窗口
Ctrl+b w        → 列出所有窗口
Ctrl+b d        → 脱离当前会话(后台运行)
Ctrl+b s        → 切换到其他会话
Ctrl+b $        → 重命名当前窗口
Ctrl+b %        → 垂直分屏
Ctrl+b "        → 水平分屏
Ctrl+b 方向键   → 切换面板
Ctrl+b x        → 关闭当前面板
Ctrl+b z        → 当前面板全屏/恢复

脱离会话这个操作特别关键。你SSH连着服务器跑任务,突然要下班了,直接按Ctrl+b d,会话在后台继续跑,你关掉SSH完全没问题。下次连上来用tmux attach就能接回去。

四、分屏操作:让一个终端顶四个用

分屏是tmux最实用的功能。运维的时候你经常需要一边看日志一边改配置,一边监控系统资源一边跑部署脚本,分屏直接解决。

水平分屏(上下两块):

Ctrl+b "

垂直分屏(左右两块):

Ctrl+b %

分屏之后怎么调整大小?按住Ctrl+b,然后按住Alt键配合方向键,可以精确调整面板尺寸。或者更简单的方式:

Ctrl+b :resize-pane -U 10    → 上面板缩小10行
Ctrl+b :resize-pane -D 10    → 下面板扩大10行
Ctrl+b :resize-pane -L 10    → 左边板缩小10列
Ctrl+b :resize-pane -R 10    → 右边板扩大10列

如果你想把一个面板再细分,比如把右边那块再切成上下两块,先用方向键切换到右边面板,然后再按Ctrl+b %就行了。tmux支持嵌套分屏,理论上你可以切出任意布局。

还有一个实用技巧:把当前面板的内容复制到另一个面板。先进入复制模式:

Ctrl+b [

然后用vi风格的键移动光标选择文本,按Enter复制,再切换到目标面板粘贴:

Ctrl+b ]

这个在运维场景下特别有用,比如你在一个面板里看到报错信息,直接复制粘贴到另一个面板里查文档或者问同事。

五、会话管理:后台运行与恢复

脱离会话后,怎么查看后台有哪些会话在跑?

tmux ls

输出类似:

mywork: 1 windows (created Mon Jun 10 09:30:00 2024)
db_maint: 2 windows (created Mon Jun 10 10:15:00 2024)

重新接入某个会话:

tmux attach -t mywork

如果你想同时接入多个会话,用这个:

tmux attach -t mywork -t db_maint

但注意,一个终端只能attach一个会话。如果你想在不同终端窗口分别attach不同会话,那就开多个终端窗口分别执行attach命令。

杀掉一个会话:

tmux kill-session -t mywork

杀掉某个窗口:

Ctrl+b &

系统会问你确认,按y就关了。这些操作在批量管理服务器的时候非常高效。

六、配置文件:让tmux真正好用

tmux默认的快捷键其实不太人性化,比如前缀键Ctrl+b太靠左,按着不舒服。配置文件在:

~/.tmux.conf

如果没有就新建一个。我推荐以下配置,直接提升使用体验:

# 修改前缀键为Ctrl+a,更顺手
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# 启用鼠标支持,点击切换面板
set -g mouse on

# 状态栏样式,256色
set -g default-terminal "screen-256color"
set -g status-style 'bg=#1e1e2e fg=#cdd6f4'

# 窗口索引从1开始
set -g base-index 1
setw -g pane-base-index 1

# 自动重命名窗口为当前命令名
setw -g automatic-rename on

# 分屏快捷键改为更直觉的
bind | split-window -h
bind - split-window -v

# 快速重载配置
bind r source-file ~/.tmux.conf \; display "Config reloaded!"

改完之后在tmux里按前缀键+r就能实时生效,不用退出重进。这个配置里我把前缀键改成了Ctrl+a,这是screen用户的习惯,很多老运维更适应。鼠标支持打开后,你直接点面板就能切换,不用记快捷键。

七、实战场景:运维中怎么用tmux

场景一:同时监控多台服务器。创建一个会话叫"monitor",里面开4个窗口,每个窗口SSH到不同服务器,每个窗口再分屏,一边看top一边看日志。

场景二:部署发布。一个窗口跑部署脚本,另一个窗口实时tail日志,第三个窗口开着数据库客户端随时查状态。三块同时盯着,出问题立刻发现。

场景三:长时间任务。跑数据库迁移、编译大项目、跑备份脚本,这些动辄几小时的任务,用tmux跑着,你该干嘛干嘛,断开连接也不怕。

场景四:团队协作。用tmux attach共享会话,多个人可以同时看到同一个终端操作。虽然不如专业协作工具,但临时排障的时候非常方便。

八、进阶技巧与注意事项

tmux支持脚本化操作,你可以写shell脚本批量创建会话和分屏:

#!/bin/bash
tmux new-session -d -s deploy "cd /var/www && tail -f access.log"
tmux split-window -h -t deploy "vim nginx.conf"
tmux select-pane -t deploy:0.0
tmux attach -t deploy

这个脚本创建一个叫deploy的会话,左边实时看日志,右边编辑配置,执行后直接attach进去。放在~/bin/目录下,以后一键启动。

注意事项:tmux的面板内容不会自动滚动保存,如果你需要完整的历史输出,建议用script命令或者把日志重定向到文件。另外,tmux本身不支持多人同时写同一个面板,想要多人协作编辑还是得用专门的工具。

还有一点,如果你的Ubuntu服务器内存紧张,tmux本身占用极少,但每个面板里跑的进程才是大头。合理规划会话数量,别开几十个会话每个都跑重任务,服务器扛不住。

九、总结:tmux是运维必备技能

tmux不是什么花哨的东西,但它是Linux运维的基本功。会话持久化解决断连问题,分屏多任务解决效率问题,脚本化支持解决自动化问题。不管你是管理一台服务器还是一百台,tmux都能让你的终端工作流清晰、稳定、可恢复。花半小时把快捷键练熟,把配置文件调好,你会发现运维工作顺畅太多了。