tmux核心概念
- 会话(Session):会话是 tmux 的核心,所有任务都在会话内运行
- 窗口(Window):窗口可理解为会话内的“任务分组”,每个窗口对应一个独立的终端环境(目录、进程互不干扰)。
- 窗格(Panel):窗口的一个子区域,用于并排显示多个终端,窗格可以水平或垂直分割
tmux 安装教程
Tmux 一般需要自己安装
# Ubuntu 或 Debian$ sudo apt-get install tmux# CentOS 或 Fedora$ sudo yum install tmux# Mac$ brew install tmux
安装完成后,键入tmux命令,就进入了 Tmux 窗口,通过Tmux窗口,我们可以知道底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称),右侧是系统信息。
tmux 常用命令
会话管理常用命令
#!/bin/bash# 1. 创建命名会话(企业规范:业务/环境命名,如 prod/test/dev)tmux new -s prod-web # 生产环境web服务会话tmux new -s test-biz # 测试环境业务服务会话tmux new -s dev-analysis # 开发数据分析会话# 2. 查看所有已存在tmux会话列表tmux lstmux list-sessions# 3. 接入/附着到指定命名会话tmux a -t prod-webtmux attach -t test-biz# 4. 后台脱离当前会话(不关闭程序,会话常驻服务器)# 快捷键:Ctrl+b 松开后 按 d# 5. 后台静默创建会话并直接后台运行(不进入界面)tmux new -s cron-task -d# 6. 在指定会话中新建窗口并执行后台命令tmux new-window -t prod-web:1 "tail -f /var/log/nginx/error.log"tmux new-window -t prod-web:2 "java -jar app.jar"# 7. 批量关闭/销毁指定会话tmux kill-session -t test-biz # 销毁单个指定会话tmux kill-session -a -t prod-web # 关闭除prod-web外所有其他会话# 8. 重命名已有会话tmux rename-session old-name new-name# 9. 列出会话详细信息(企业排查用)tmux show-sessions# 10. 强制关闭所有tmux会话(运维清理环境)tmux kill-server# 11. 判断会话是否存在,不存在则自动创建(企业脚本常用)tmux has-session -t auto-task 2>/dev/null || tmux new -s auto-task -d
窗口命令快捷键中英对照
C-b Space 切换下一个布局C-b ! 将当前窗格拆分到新窗口C-b " 垂直分割窗口C-b # 列出所有粘贴缓冲区C-b $ 重命名当前会话C-b % 水平分割窗口C-b & 关闭当前窗口C-b ' 通过索引选择窗口C-b ( 切换到上一个客户端C-b ) 切换到下一个客户端C-b , 重命名当前窗口C-b - 删除最近的粘贴缓冲区C-b . 移动当前窗口C-b / 查看按键绑定说明C-b 0 选择编号 0 窗口C-b 1 选择编号 1 窗口C-b 2 选择编号 2 窗口C-b 3 选择编号 3 窗口C-b 4 选择编号 4 窗口C-b 5 选择编号 5 窗口C-b 6 选择编号 6 窗口C-b 7 选择编号 7 窗口C-b 8 选择编号 8 窗口C-b 9 选择编号 9 窗口C-b : 打开 Tmux 命令行C-b ; 跳转至上次激活窗格C-b = 从列表选择粘贴缓冲区C-b ? 查看所有快捷键列表C-b C 自定义配置选项C-b D 选择并分离会话客户端C-b E 自动均匀分布所有窗格C-b L 切换到最近使用的客户端C-b M 清除标记的窗格C-b [ 进入复制模式C-b ] 粘贴最近缓冲区内容C-b c 新建 Tmux 窗口C-b d 分离当前会话C-b f 搜索定位窗格C-b i 显示窗口详细信息C-b l 切换到上一个使用的窗口C-b s 从列表选择会话C-b t 显示时钟小工具C-b w 从列表选择窗口C-b x 关闭当前激活窗格C-b z 最大化 / 还原当前窗格C-b { 与上方窗格交换位置C-b } 与下方窗格交换位置C-b ~ 查看系统消息日志C-b DC 重置窗口可视区域跟随光标C-b PPage 进入复制模式并向上翻页C-b Up 选择上方相邻窗格C-b Down 选择下方相邻窗格C-b Left 选择左侧相邻窗格C-b Right 选择右侧相邻窗格C-b M-1 设置水平均分布局C-b M-2 设置垂直均分布局C-b M-3 设置主窗格水平布局C-b M-4 设置主窗格垂直布局C-b M-5 设置平铺布局C-b M-6 设置镜像主水平布局C-b M-7 设置镜像主垂直布局C-b M-n 切换到下一个有通知的窗口C-b M-o 反向循环切换窗格C-b M-p 切换到上一个有通知的窗口C-b M-Up 向上大幅调整窗格尺寸C-b M-Down 向下大幅调整窗格尺寸C-b M-Left 向左大幅调整窗格尺寸C-b M-Right 向右大幅调整窗格尺寸C-b C-b 向终端发送一次前缀键C-b C-o 正向循环切换窗格C-b C-z 挂起当前终端客户端C-b C-Up 向上微调窗格尺寸C-b C-Down 向下微调窗格尺寸C-b C-Left 向左微调窗格尺寸C-b C-Right 向右微调窗格尺寸C-b S-Up 窗口可视区域上移C-b S-Down 窗口可视区域下移C-b S-Left 窗口可视区域左移C-b S-Right 窗口可视区域右移
tmux 使用场景
SSH 远程服务器保活
SSH 连服务器跑长时间任务(编译、备份、模型训练、批量脚本),关闭终端、断网、电脑休眠,任务不中断,重连可恢复。
# 1. 登录服务器ssh user@服务器IP# 2. 新建命名会话(推荐命名,方便记忆)tmux new -s work# 3. 在 tmux 里执行耗时任务,例如:# 编译源码make -j16# 数据库备份mysqldump -uroot -p dbname > backup.sql# 长时间爬虫/Python脚本python crawl_long_time.py# 4. 临时脱离会话(任务后台继续跑)# 按键:Ctrl+b 松开后 按 d# 5. 下次重新 SSH 登录,恢复会话tmux attach -t work# 6. 查看所有 tmux 会话tmux ls
单终端分屏开发 / 运维
可以更好的在一个终端中管理不同任务
多会话隔离多项目
通过不同会话隔离不同的项目
# 新建项目1会话tmux new -s project_a# 脱离:Ctrl+b d# 新建项目2会话tmux new -s project_b# 查看所有会话tmux ls# 切换接入指定会话tmux a -t project_atmux a -t project_b# 销毁无用会话tmux kill-session -t project_a
后台常驻守护进程 / 脚本
后台进程持久化
# 创建常驻会话tmux new -s server_daemon# 执行常驻程序java -jar app.jar# 或node app.js# 或自定义监控脚本sh monitor.sh# 脱离后台挂着:Ctrl+b d# 后续随时 attach 看日志、重启程序tmux a -t server_daemon
多人共享终端协作排障
可以通过tmux进行多人协作
# 用户A 创建共享会话 tmux new -s share # 用户B、C 登录同一服务器,接入同一会话 tmux a -t share