tmux
是一个在终端(terminal)窗口中运行的终端复用工具,允许在其中运行多个终端。
tmux
主要有两个用途:
- 登录到远程服务器,在
tmux
中而非直接在终端中运行程序,可以避免远程服务器上的程序因网络连接中断而退出。 - 通过
tmux
的分屏功能,在一个终端界面中同时使用多个程序和shell。
安装tmux
Ubuntu/Debian
$ sudo apt install tmux
RHEL/CentOS/Fedora
$ sudo yum install tmux
MacOS
$ brew install tmux
安装完成后,通过以下命令查看tmux
的版本:
$ tmux -V
tmux 2.6
tmux基本概念
tmux
有三个基本概念。
会话(session):包含有一个或多个窗口(window),会话中的窗口都相互独立。
窗口(window):包含一个或多个面板(pane),会话中的每个面板都相互独立。
面板(pane):每个面板都有且仅包含一个终端,每个终端运行一个程序或shell,显示在一个窗口中。
基本使用
查看当前系统中运行的tmux会话
$ tmux ls
idle: 1 windows (created Wed Oct 11 14:42:18 2023)
homework: 2 windows (created Wed Oct 11 14:43:35 2023) (attached)
上面的结果显示,当前系统中有两个tmux
会话,分别是"idle"和"homework",其中"homework"会话有两个窗口,处于attached状态,即tmux
客户端有连接到这个回话上。"idle"这个会话处于detached状态。
开始一个新的会话
当没有任何特殊要求时,可以直接使用不带任何参数的tmux
来新建一个会话时,指令如下:
tmux
会话名称以数字命名,从0开始,依次递增。为了使各个会话有具体含义便于区分,可以使用tmux new -s name
指令创建一个新的会话,会话以"name"进行命名。
例如新建一个homework
会话:
$ tmux new -s homework
连接到指定的会话
登录到远程服务器,通过ssh方式登录到服务器运行程序时,可能会因为网络链接问题导致连接断开,运行的程序会因为连接会话断开而中断。当在远程服务器上使用tmux
,然后在tmux
中运行程序时则可以避免此问题的发生。如果因为网络连接断开丢失会话,可以等网络恢复后重新连接你所工作的会话,使用tmux attach -t name
指令,例如连接到homework
会话:
$ tmux attach -t homework
更加简单的方法是使用tmux a -t name
指令,例如:
$ tmux a -t homework
tmux 常用指令集合
tmux
操作通常由前缀(prefix)和指令(command)组成,前缀是一个/组按键,用于告诉tmux
后面的指令是给tmux
的,而不是给当前运行的程序的。默认情况下,前缀是Ctrl+b
,也可以通过修改配置文件修改前缀。
tmux
常用指令分类。
与会话相关的指令有:
指令 | 说明 |
---|---|
prefix d | 分离当前会话 |
prefix s | 列出所有会话 |
prefix $ | 重命名当前会话 |
与窗口操作相关的指令:
指令 | 说明 |
---|---|
prefix c | 创建一个新的窗口 |
prefix p | 切换到上一个窗口 |
prefix n | 切换到下一个窗口 |
prefix w | 从列表中选择一个窗口 |
prefix , | 重命名当前窗口 |
prefix & | 关闭当前窗口 |
prefix % | 将当前窗口垂直分割 |
prefix " | 将当前窗口水平分割 |
与面板相关的操作指令:
指令 | 说明 |
---|---|
prefix q | 显示面板编号,按下编号可以切换到对应的面板 |
prefix o | 切换当前窗口中的面板 |
prefix → | 切换到左边的面板 |
prefix ← | 切换到右边的面板 |
prefix ↓ | 切换到下方的面板 |
prefix ↑ | 切换到上方的面板 |
与tmux
本身相关的指令:
指令 | 说明 |
---|---|
prefix ? | 显示tmux keys,即tmux的所有快捷键 |
prefix : | 进入命令行模式,可以输入tmux指令 |
prefix [ | 进入复制模式,可以使用vi的方式复制文本 |
prefix ] | 粘贴复制的文本 |
prefix t | 显示时间 |
prefix i | 显示tmux信息 |
以下显示了几个相关命令界面样式: