跳转到内容
启涵的小破站
返回

tmux 实战笔记

为什么用 tmux

SSH 断了,进程还在跑。开十几个标签页切来切去眼花,tmux 一个窗口搞定。省事。

基本操作

默认前缀键 Ctrl+b,后面简写成 Prefix

会话管理

# 新建会话
tmux new -s work

# 离开会话(进程继续跑)
Prefix + d

# 列出所有会话
tmux ls

# 重新连接
tmux attach -t work

# 删除会话
tmux kill-session -t work

SSH 断了直接 tmux attach 回来,编译、下载、跑脚本都不会中断。

窗口分割

# 上下分割
Prefix + "

# 左右分割
Prefix + %

# 切换面板
Prefix + 方向键

# 调整大小
Prefix + Ctrl + 方向键

# 关闭当前面板
Prefix + x

一个窗口里同时看日志、改代码、跑命令,不用切标签页。

窗口管理

# 新建窗口
Prefix + c

# 切换窗口
Prefix + 数字

# 重命名窗口
Prefix + ,

# 关闭窗口
Prefix + &

把不同项目放在不同窗口,work、test、deploy 分开管,清楚。

实际场景

服务器维护

# 第一个面板:监控日志
tail -f /var/log/nginx/access.log

# 第二个面板:htop 看资源
htop

# 第三个面板:改配置
vim /etc/nginx/nginx.conf

一屏看完,不用开三个 SSH 连接。

开发调试

# 上面编辑器
vim main.py

# 下面跑程序
python main.py

# 右边看日志
tail -f app.log

改完代码,切到下面窗口直接跑,不用退出编辑器。

长时间任务

# 启动编译
make build

# 离开会话
Prefix + d

# 关掉电脑,回家
# 第二天回来
tmux attach

# 编译还在跑,或者已经结束了

编译、备份、数据迁移这种耗时操作,扔在 tmux 里不用守着。

配置优化

创建 ~/.tmux.conf

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

# 从 1 开始编号(0 太远)
set -g base-index 1
setw -g pane-base-index 1

# 鼠标支持
set -g mouse on

# 状态栏
set -g status-style bg=black,fg=white
set -g status-left '[#S] '
set -g status-right '%H:%M %d-%b-%y'

# 分割线颜色
set -g pane-border-style fg=colour238
set -g pane-active-border-style fg=colour39

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

改完运行:

tmux source ~/.tmux.conf

或者在 tmux 里按 Prefix + r

快捷键速查

操作快捷键
上下分割Prefix + "
左右分割Prefix + %
切换面板Prefix + 方向键
新建窗口Prefix + c
切换窗口Prefix + 0-9
离开会话Prefix + d
滚动查看历史Prefix + [ 然后用方向键
退出滚动模式q

常见问题

颜色显示不对

编辑 ~/.bashrc~/.zshrc

export TERM=screen-256color

重新登录或 source ~/.bashrc

复制粘贴不方便

进入复制模式:

Prefix + [
# 移动到起始位置
空格开始选择
# 移动到结束位置
Enter 复制
# 粘贴
Prefix + ]

或者直接开鼠标模式,选中自动复制。

会话太多管不过来

# 批量删除
tmux kill-session -a  # 删除除当前会话外的所有会话

# 或者写个脚本清理旧会话
tmux ls | grep -v attached | cut -d: -f1 | xargs -I {} tmux kill-session -t {}

配合其他工具

vim

在 tmux 里用 vim,Esc 延迟问题:

# ~/.tmux.conf
set -sg escape-time 0

SSH 跳板机

# 本地先启动 tmux
tmux

# 在 tmux 里 SSH
ssh user@server

# 服务器上再启动 tmux
tmux

本地断了服务器会话还在,服务器 SSH 断了任务还在跑。

什么时候不用 tmux

SSH 断线保活、多窗口协作、长时间任务,这些场景 tmux 好用。其他时候直接 SSH 就够了。


分享本文:

下一篇
Docker Compose 生产环境部署指北

加载评论区中...