// 红队渗透 · 2024-11-01

一文玩转 tmux:强大的终端复用工具

@[TOC](内容预览 ≧∀≦ゞ

在渗透测试过程中,我们常常需要同时监控多个终端,每个终端可能都在执行不同的任务:有的用来查看信息,有的用于连接服务器,有的负责监听端口,等等。tmux 是一个强大的终端复用工具,能够帮助我们高效地管理这些任务。它支持将多个会话和窗口整合在一个界面中,支持多种分屏布局,还能够保持会话独立。此外,tmux 自带于 Kali Linux 中,因此,其非常适合渗透测试环境。本文将带你系统学习 tmux 的核心概念与操作技巧,带你快速上手。


一、tmux 工作机制

tmux 的工作机制可以分为三大部分:会话(Session)、窗口(Window)和面板(Pane)。每个部分都有其独特功能和作用:

  • 会话(Session):一个独立的工作实例。每个会话可以包含多个窗口,且可以独立于其他会话运行。即使 SSH 连接断开,tmux 也能保持会话的完整状态,保障程序不会中断。重新连接时,只需恢复会话即可。
  • 窗口(Window):会话中的窗口类似于多标签页,允许在同一会话中分割出不同的任务区。每个窗口可以包含多个面板,并且可以随时切换。
  • 面板(Pane):窗口中的分屏区域,每个面板都可以执行不同的任务。你可以在一个窗口中分割出多个面板,以便在同一屏幕下查看和操作多个任务。

会话 > 窗口 > 面板

二、进入 tmux 前的准备

在启动 tmux 会话之前,建议先进入目标工作目录。因为在 tmux 内新建的所有窗口和面板都会继承启动时的工作目录,这样可以减少手动切换路径的繁琐操作。

三、tmux 会话管理

在 tmux 中,管理会话是最核心也是最基础的功能之一,掌握会话管理能极大提高操作效率。以下是 tmux 常用的会话管理命令和快捷键:

会话管理命令

  • 新建会话:

    • 命令:tmux new -s <会话名> [-n 窗口名]
    • 说明:新建一个指定名称的会话,可选参数 -n 用于指定初始窗口的名称。
    • 使用场景:在终端外新建 tmux 会话,便于将不同任务组织在独立的会话中。
  • 恢复会话:

    • 命令:tmux attach -t <会话名> 或 tmux at -t <会话名>
    • 说明:恢复到已存在的会话,让你重新回到之前的工作环境。
    • 使用场景:当暂时离开会话后,通过该命令继续之前的工作,避免重新配置窗口和窗格。
  • 列出所有会话:

    • 命令:tmux ls
    • 说明:查看当前所有的会话及其状态,显示会话名、窗口数等信息。
    • 使用场景:有多个会话时,列出所有会话帮助定位特定会话的名称和状态。
  • 删除会话:

    • 命令:tmux kill-session -t <会话名>
    • 说明:关闭指定的会话,释放资源。
    • 使用场景:在会话任务完成后手动删除不再需要的会话。
  • 关闭所有会话:

    • 命令:tmux kill-server
    • 说明:彻底关闭 tmux 服务及所有会话。
    • 使用场景:退出 tmux 前清理所有会话,非常适合不再需要保持任何会话时使用。

会话管理快捷键

在 tmux 会话内有大量的快捷键,所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl + b,按下后会进入命令模式。以下是一些常用的会话管理快捷键:

  • 分离当前会话:Ctrl + b 后按 d或者输入 tmux detach
    • 将当前会话转为后台运行,允许你暂时离开而不终止会话,稍后可以通过恢复会话继续工作。
  • 重命名当前会话:Ctrl + b 后按 $
    • 弹出重命名提示,允许你为当前会话指定一个更易于识别的名称。
  • 列出所有会话:Ctrl + b 后按 s
    • 显示当前所有会话的列表,便于选择并切换到其他会话。

这些快捷键中第一个比较常用,其他的相对比较少用。

会话内和会话外命令的区别

  • 会话外命令:这些命令是在终端中直接输入 tmux 命令(如 tmux new -s <会话名>)来创建、恢复或删除会话。它们通常用于管理会话的整体结构和操作,适合在 tmux 之外进行会话的创建和删除。

  • 会话内命令:当你已经进入 tmux 会话后,可以通过前缀键(默认是 Ctrl + b)激活命令模式。例如,按 <prefix> + ? 可以查看帮助信息。会话内命令主要用于窗口和面板的管理,例如切换窗格、重命名窗口等,便于在会话中高效操作。

  • 命令模式快捷键:在 tmux 中,使用 <prefix> + : 快捷键可以迅速进入命令输入模式,这与在普通终端中直接输入 tmux 命令相同。通过这种方式,你可以在当前会话中执行各种 tmux 命令,无需退出会话,从而提升工作效率。

在这里插入图片描述在掌握了上述基础操作后,大家可能会好奇,如何实现如图所示的终端布局效果呢?别急,接下来让我们进入 tmux 的进阶操作部分——窗口与面板管理。

四、tmux 窗口和面板管理

在 tmux 中,窗口和面板是实现多任务处理的核心。它们允许用户在同一会话中高效地分隔和管理不同的任务或项目。以下是窗口和面板管理的一些方法和技巧:

新建和管理窗口

tmux 允许在同一会话中创建多个窗口,这非常适合分隔不同的任务或项目。以下是一些常用的窗口管理快捷键:

  • 新建窗口:Ctrl + b,c

    • 这个命令会在当前会话中创建一个新的窗口,便于开展新任务。
  • 重命名窗口:Ctrl + b,,

    • 此操作允许用户为当前窗口指定一个更易于识别的名称,适合用于标记任务或项目。
  • 删除窗口:Ctrl + b,&

  • 切换窗口:

    • 下一个窗口:Ctrl + b,n
    • 上一个窗口:Ctrl + b,p
    • 指定窗口:Ctrl + b,数字
    • 选择窗口列表:Ctrl + b,w
      • 显示所有窗口的列表,便于选择并切换到特定窗口。

分割窗口为面板

虽然 Kali Linux 自带的终端也支持分屏功能,但 tmux 的分屏功能更加灵活和强大。通过分割窗口,可以在同一屏幕中显示多个任务,支持以下分割方式:

  • 水平分割:Ctrl + b ,"
  • 垂直分割:Ctrl + b , %

为了更方便地记忆,可以将分割命令重新绑定为更直观的快捷键(文末有完整配置文件分享哦~):

bind | split-window -h  # 水平分割
bind - split-window -v  # 垂直分割

只需按 Ctrl + b 后再按 | 或 -,即可快速在窗口内进行水平或垂直分割。

建议布局:可以先水平分割,再进行垂直分割,根据实际工作需要灵活调整面板布局,形成符合个人操作习惯的分屏风格。

切换面板

在多个面板间的切换操作简便而高效:

  • 方向键切换:Ctrl + b,然后使用方向键选择目标面板
  • 快速切换:Ctrl + b,o
    • 在面板间循环切换,适合快速浏览各个面板。

使用 o 快捷键切换面板,可避免使用方向键,尤其适合希望保持手指在主键盘区域的用户。

面板放大与恢复

当某个面板需要更大空间进行操作时,可以将其放大为全屏,再切换回来:

  • 放大/恢复面板:Ctrl + b,z
    • 这个命令可以让当前面板填满整个窗口,便于专注于重要任务。

调整面板大小

在多面板布局下,调整面板的大小以满足不同的工作需求:

  • 常规调节:Ctrl + b,Alt + 方向键

  • 精细调节:Ctrl + b,Ctrl + 方向键

关闭面板

对于不再需要的面板,可以快速关闭,以保持工作区的整洁:

  • 关闭面板:在目标面板中输入 exit 并回车,即可关闭当前面板。

  • 快速关闭当前面板:Ctrl + b,x

    • 此操作将弹出确认对话框,确认后即可关闭当前面板。

通过上述管理窗口和面板的技巧,tmux 用户能够高效地进行多任务处理,提升工作效率。

五、分屏状态下的内容复制问题

在分屏状态下,查看屏幕上方的历史信息或复制内容时,直接滚动鼠标往上可能无法生效,可以通过以下操作实现复制:

  • 鼠标复制:按住 Shift 键并用鼠标选择内容,选中后可右键或使用 Ctrl + Shift + C 完成复制。

  • 全屏复制:当窗口内存在多个面板时,复制操作可能会包括其他面板内容。为避免这种情况,可先将目标面板放大(Ctrl + b, z),执行复制后再按 Ctrl + b, z 恢复面板原状。

此外,tmux 还带有功能丰富的复制模式,受限于篇幅本文不再详细展开,感兴趣的小伙伴可以自行探索这一功能。

⭐常用快捷键总结

以下是我总结的针对新手的推荐记忆快捷键表,按会话、面板和窗口分类,并将最常用的快捷键排在前面,方便快速查阅和学习。所有快捷键中前缀键统一使用<prefix>表示。

分类 功能 快捷键 说明
会话 分离当前会话 <prefix> + d 将当前会话转为后台运行
恢复会话 tmux at -t <会话名> 恢复已存在的会话,返回之前的工作环境
列出所有会话 tmux ls 查看当前所有会话及其状态
新建会话 tmux new -s <会话名> 创建新的会话,指定会话名称
删除会话 tmux kill-session -t <会话名> 关闭指定的会话,释放资源
关闭所有会话 tmux kill-server 关闭所有会话,彻底退出 tmux
窗口 新建窗口 <prefix> + c 在当前会话中创建新窗口
重命名窗口 <prefix> + , 为当前窗口指定一个易识别的名称
删除窗口 <prefix> + & 关闭当前窗口
切换到下一个窗口 <prefix> + n 切换到下一个窗口
切换到上一个窗口 <prefix> + p 切换到上一个窗口
指定窗口切换 <prefix> + 数字 切换到指定编号的窗口
选择窗口列表 <prefix> + w 显示所有窗口的列表,便于选择
面板 水平分割 <prefix> + " 将当前窗口水平分割为两个面板
垂直分割 <prefix> + % 将当前窗口垂直分割为两个面板
切换面板 <prefix> + o 在面板间循环切换
放大/恢复面板 <prefix> + z 将当前面板放大为全屏,便于专注于某个任务
关闭面板 <prefix> + x 关闭当前面板,也可直接输入exit
调整面板大小 <prefix> + Alt + 方向键 调整面板大小

注意:以上操作中,除了可以使用快捷键外,很多操作也可以通过鼠标实现。此表格主要列出常用的键盘快捷键,方便记忆和查阅。

附:tmux 配置文件快速上手

在使用 tmux 时,通过合理配置可以显著提升日常体验。tmux 的配置文件位于 ~/.tmux.conf,我们可以将常用设置写入该文件来持久优化使用体验。

未设置重载配置文件的快捷键时,默认情况下可以通过手动命令重新加载配置文件:

tmux source-file ~/.tmux.conf

下面是我个人推荐的配置文件,供大家参考:

# 设置一个备用的指令前缀键(按键更快些)
set-option -g prefix2 `

# 添加重载配置文件指令为: r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded!"

# 使用 256 色终端
set -g default-terminal "screen-256color"

# 设置窗口和窗格编号从 1 开始
set -g base-index 1
set -g pane-base-index 1

# 启用鼠标支持,方便切换窗格、调整大小和滚动
set -g mouse on

# 删除窗口后自动重新编号,保持编号连续性
set-option -g renumber-windows on

# 启用自动重命名,根据运行的命令动态调整窗口名称
setw -g automatic-rename on

# 设置复制模式为 vi 风格
setw -g mode-keys vi

# 添加窗口分割快捷键
bind | split-window -h
bind - split-window -v

# 增加历史记录保存数
set -g history-limit 10000

# 使用 Vim 风格的上下左右键选择窗格
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

在修改前缀键时,请谨慎选择,确保避免与常用快捷键等产生冲突。


总结

tmux 是一款强大的终端复用工具,适合需要多任务处理的渗透测试人员。掌握 tmux 的基础操作和分屏技巧,不仅能提高渗透测试的工作效率,还能优化工作流程。如果你还没有尝试过 tmux,不妨跟随本文一起动手实操一次,感受一下它的强大功能。

原文 https://blog.csdn.net/2301_79518550/article/details/143440462