@[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