Featured image of post Tmux终端复用

Tmux终端复用

一、安装

1sudo apt update && sudo apt install -y tmux
2tmux -V   # 确认版本,推荐 3.x

二、配置文件

创建 ~/.tmux.conf,以下是现代版配置(修复了你原文中 deprecated 的写法):

 1cat > ~/.tmux.conf << 'EOF'
 2# ── 前缀键改为 Ctrl+a ─────────────────────────────
 3unbind C-b
 4set -g prefix C-a
 5bind C-a send-prefix          # 双击 Ctrl+a 发送原始 Ctrl+a
 6
 7# ── 基础设置 ──────────────────────────────────────
 8set -g default-terminal "screen-256color"
 9set -g history-limit 50000    # 回滚缓冲加大,渗透时日志多
10set -g base-index 1           # 窗口从1开始编号(更直觉)
11setw -g pane-base-index 1
12set -g escape-time 0          # 消除 ESC 延迟,vim用户必备
13set -g focus-events on
14
15# ── 鼠标支持 ──────────────────────────────────────
16set -g mouse on               # 鼠标拖边框调整大小、点击切换
17unbind-key -n MouseDown3Pane  # 禁用鼠标右键菜单 与终端的邮件复制冲突
18
19# ── Alt+方向键切换 pane(无需前缀) ───────────────
20bind -n M-Left  select-pane -L
21bind -n M-Right select-pane -R
22bind -n M-Up    select-pane -U
23bind -n M-Down  select-pane -D
24
25# ── 分屏快捷键更直觉(| 和 - )─────────────────────
26bind | split-window -h -c "#{pane_current_path}"
27bind - split-window -v -c "#{pane_current_path}"
28unbind '"'
29unbind %
30
31# ── 重载配置 ──────────────────────────────────────
32bind r source-file ~/.tmux.conf \; display "Config reloaded!"
33
34# ── 颜色主题(抹茶绿)─────────────────────────────
35set -g pane-border-style fg=colour240
36set -g pane-active-border-style fg=colour107        # 抹茶绿边框
37
38set -g status-style bg=colour236,fg=colour250
39set -g status-justify centre
40set -g status-left  "#[fg=colour107,bold] #S "       # session名 抹茶绿
41set -g status-right "#[fg=colour108]%H:%M  #[fg=colour245]%d-%b"  # 24小时制
42
43setw -g window-status-current-style fg=colour236,bg=colour107,bold  # 当前窗口绿底
44setw -g window-status-current-format " #I:#W "
45setw -g window-status-style fg=colour143,bg=colour236               # 其他窗口淡绿
46setw -g window-status-format " #I:#W "
47EOF

应用配置:

1tmux source-file ~/.tmux.conf
2# 或者直接开一个新 session 测试
3tmux

三、核心概念(先理解再用)

tmux
 └─ Session(会话)  ← 可以 detach 后台保活
     └─ Window(窗口)  ← 类似浏览器标签页
         └─ Pane(面板)  ← 同一窗口内分屏

四、常用操作速查(基于上面配置)

Session 管理

操作命令
新建有名字的 sessiontmux new -s pentest
重命名当前session
列出所有 sessiontmux ls
重新连接 sessiontmux attach -t pentest
在 tmux 内脱离Ctrl+a d
杀掉 sessiontmux kill-session -t pentest

Window 操作

操作快捷键
新建窗口Ctrl+a c
切换到下一个窗口Ctrl+a n
切换到上一个窗口Ctrl+a p
按编号切换Ctrl+a 1/2/3...
重命名当前窗口Ctrl+a ,

Pane 操作

操作快捷键
垂直分屏(左右)Ctrl+a |
水平分屏(上下)Ctrl+a -
切换 paneAlt+方向键(无需前缀)
最大化/还原当前 paneCtrl+a z
调整 pane 大小Ctrl+a(长按)+ 方向键
关闭当前 paneexitCtrl+d
显示编号切换Ctrl+a q 然后按数字
向前/后置换 paneCtrl+a { / Ctrl+a }

复制模式(查看输出日志必用)

操作快捷键
进入复制模式(可滚屏)Ctrl+a [
退出复制模式q
向上/下翻页PgUp / PgDn
搜索/ 输入关键词
tmux 复制模式默认是 emacs 键位/ 搜索是 vi 键位,需要先开启。

~/.tmux.conf 加一行:

1setw -g mode-keys vi

然后 Ctrl+a r 重载配置。

之后复制模式的完整键位:

操作快捷键
进入复制模式Ctrl+a [
向下搜索/ 输入关键词 回车
向上搜索? 输入关键词 回车
下一个匹配n
上一个匹配N
退出q
开始选中Space
复制选中Enter
粘贴Ctrl+a ]
顺便推荐再加两行,让复制模式体验更好:
1setw -g mode-keys vi
2bind -T copy-mode-vi v send -X begin-selection      # v 开始选中(像 vim)
3bind -T copy-mode-vi y send -X copy-selection-and-cancel  # y 复制

这样选文本的方式就和 vim visual mode 完全一致了。

五、渗透测试实战用法

推荐的 session 分组方式:

1# 新建一个 pentest session,窗口按阶段命名
2tmux new -s pentest
3Ctrl+a ,  → 命名为 "recon 信息收集"
4
5Ctrl+a c  → 新窗口
6Ctrl+a ,  → 命名为 "exploit 漏洞利用"
7
8Ctrl+a c  → 新窗口
9Ctrl+a ,  → 命名为 "shell 终端维持"

典型 exploit 窗口布局:

Ctrl+a |   # 左右分屏
左边跑 nmap/扫描
右边 Ctrl+a - 再上下分,上面写 payload,下面监听 nc/msf

断线保活(最重要的 feature):

1# SSH 断了不怕,session 还在
2tmux attach -t pentest   # 重连即恢复

六、验证效果

1tmux new -s test
2# 按 Ctrl+a |  → 左右分屏
3# 按 Ctrl+a -  → 当前pane再上下分
4# 按 Alt+方向键 → 在三个pane间切换
5# 按 Ctrl+a z  → 最大化某个pane
6# 按 Ctrl+a r  → 热重载配置