Tmux核心概念
架构理解
会话(Session) → 窗口(Window) → 窗格(Pane)
- 会话(Session):独立的工作环境(如"数据分析任务")
- 窗口(Window):会话中的全屏工作区(如"数据清洗"窗口)
- 窗格(Pane):窗口内的分屏(如同时查看日志和运行命令)
安装Tmux
# Ubuntu/Debian
sudo apt install tmux
# CentOS/RHEL
sudo yum install tmux
# MacOS
brew install tmux
案例:运行Python程序并保持后台执行
场景需求
在服务器上运行main.py
:
- 关闭SSH窗口后程序继续运行
- 重新登录后能看到实时控制台输出
- 可以随时查看历史输出
解决方案
# 1. 创建名为python-app的会话
tmux new -s python-app
# 2. 在tmux会话中运行程序
python main.py
# 3. 分离会话(程序继续后台运行)
# 按下 Ctrl+B,然后按 D
# 4. 关闭终端窗口(程序继续运行)
# ---------- 重新登录后 ----------
# 5. 查看所有会话
tmux ls
# 输出:python-app: 1 windows (created Tue Jun 11 14:30:00 2025)
# 6. 重新连接会话
tmux attach -t python-app
高效Tmux操作指南
会话管理(核心功能)
操作 | 命令 | 快捷键 |
---|---|---|
创建命名会话 | tmux new -s <name> |
- |
分离当前会话 | tmux detach |
Ctrl+B D |
列出所有会话 | tmux ls |
- |
连接指定会话 | tmux attach -t <name> |
- |
重命名当前会话 | tmux rename-session <name> |
Ctrl+B $ |
关闭指定会话 | tmux kill-session -t <name> |
- |
窗口操作(任务分组)
操作 | 命令 | 快捷键 |
---|---|---|
新建窗口 | tmux new-window |
Ctrl+B C |
重命名当前窗口 | tmux rename-window <name> |
Ctrl+B , |
切换到上一个窗口 | - | Ctrl+B P |
切换到下一个窗口 | - | Ctrl+B N |
窗口列表 | - | Ctrl+B W |
关闭当前窗口 | - | Ctrl+B & |
窗格操作(分屏管理)
操作 | 命令 | 快捷键 |
---|---|---|
垂直分割 | tmux split-window -h |
Ctrl+B % |
水平分割 | tmux split-window -v |
Ctrl+B " |
切换窗格 | - | Ctrl+B ↑↓←→ |
关闭当前窗格 | - | Ctrl+B X |
全屏当前窗格 | - | Ctrl+B Z |
交换窗格位置 | tmux swap-pane -U/-D |
- |
常见问题解决方案
Q:恢复会话时提示"会话不存在"?
# 检查所有会话
tmux ls
# 如果会话确实存在但无法连接,尝试
tmux attach -t <name> || tmux new -s <name>
Q:程序崩溃后如何自动重启?
# /etc/systemd/system/myapp.service
[Unit]
Description=Python Application
[Service]
User=ubuntu
WorkingDirectory=/path/to/app
ExecStart=/usr/bin/python3 main.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
Q:如何查看Tmux中运行的程序?
# 在tmux会话外查看进程
ps aux | grep main.py
# 在tmux会话内查看
Ctrl+B : 然后输入 list-panes -a
文章评论