Loading...

目录


1.Tmux 是什么

1.1 会话与进程

会话(session):用户与计算机之间的一种临时交互。

会话的核心特征在于窗口与其内启动的进程紧密相连。开启窗口意味着会话的开始;关闭窗口则标志着会话的结束,随之,会话中的进程不论是否执行完毕都将被终止。
SSH 远程登录计算机为例,若在执行命令时网络突然中断,重新登录后将无法找回先前的命令。这是因为之前的SSH会话已终止,其进程也随之消失。
为了克服这一挑战,可以实现会话与窗口的解绑:即使窗口关闭,会话也不会结束,而是继续运行,待需要时可重新绑定至其他窗口。

1.2 Tmux 的作用

Tmux:一个实现会话与窗口解绑的工具。

  • (1)支持在单一窗口内同时访问多个会话,适用于并行运行多个命令行程序。
  • (2)允许新窗口接入已存在会话
  • (3)支持每个会话拥有多个连接窗口,便于多人实时共享会话。
  • (4)提供灵活的窗口垂直和水平拆分功能。

2.基本用法

2.1 Tmux 安装

1
2
3
4
5
6
7
8
# 对于 Ubuntu 或 Debian
sudo apt-get install tmux

# 对于 CentOS 或 Fedora
sudo yum install tmux

# 对于 Mac
brew install tmux

2.2 Tmux 启动与退出

安装完成后,通过输入 tmux 命令即可进入 Tmux 窗口。

1
tmux

此命令将打开 Tmux 窗口,并在底部展示一个状态栏。状态栏左侧显示窗口信息(编号和名称),右侧显示系统信息。

按下 Ctrl+d 或输入 exit 命令即可退出 Tmux 窗口。

1
exit

2.3 前缀键

Tmux 窗口支持众多快捷键,所有快捷键均需通过前缀键激活。默认前缀键为 Ctrl+b,即首先按下 Ctrl+b,随后输入的快捷键才有效。

例如,显示帮助信息的快捷键是 Ctrl+b ?。在 Tmux 窗口中,先按 Ctrl+b,再按 ? 即可展示帮助信息。

ESC 键或 q 键退出帮助界面。


3.会话管理

3.1 新建会话

当首个 Tmux 窗口启动时,其编号为 0,随后启动的窗口编号依次增加。相应的会话也被称作 0 号会话、1 号会话等。

为了便于识别,推荐为会话命名:

1
tmux new -s <session-name>

以上命令新建一个带有指定名称的会话。

3.2 分离会话

在 Tmux 窗口中,通过按下 Ctrl+b d 或输入 tmux detach 命令可以实现当前会话与窗口的分离。

1
tmux detach

执行以上命令后,将退出当前 Tmux 窗口,但会话及其进程仍在后台运行。

使用 tmux ls 命令查看当前所有 Tmux 会话:

1
2
3
tmux ls
# 或者
tmux list-session

3.3 接入会话

tmux attach 命令允许重新接入某个已存在的会话。

  • 使用会话编号接入:

    1
    tmux attach -t 0
  • 使用会话名称接入:

    1
    tmux attach -t <session-name>

3.4 杀死会话

tmux kill-session 命令用于终止指定会话。

  • 使用会话编号杀死:

    1
    tmux kill-session -t 0
  • 使用会话名称杀死:

    1
    tmux kill-session -t <session-name>

3.5 切换会话

tmux switch 命令用于切换到另一个会话。

  • 使用会话编号切换:

    1
    tmux switch -t 0
  • 使用会话名称切换:

    1
    tmux switch -t <session-name>

3.6 重命名会话

tmux rename-session 命令允许为会话设置新名称。

1
tmux rename-session -t 0 <new-name>

以上命令将 0 号会话重命名。

3.7 会话快捷键

以下是一些与会话管理相关的快捷键操作:

  • Ctrl+b d:分离当前会话。
  • Ctrl+b s:列出所有会话。
  • Ctrl+b $:重命名当前会话。

4.最简操作流程

综上所述,以下是 Tmux 的最简操作流程:

  1. 新建会话:tmux new -s my_session
  2. 在 Tmux 窗口运行所需的程序。
  3. 按下快捷键 Ctrl+b d 将会话分离。
  4. 下次使用时,重新连接到会话:tmux attach-session -t my_session

5.窗格操作

Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。

5.1 划分窗格

  • 划分上下两个窗格:tmux split-window
  • 划分左右两个窗格:tmux split-window -h

5.2 移动光标

  • 光标切换到上方窗格:tmux select-pane -U
  • 光标切换到下方窗格:tmux select-pane -D
  • 光标切换到左边窗格:tmux select-pane -L
  • 光标切换到右边窗格:tmux select-pane -R

5.3 交换窗格位置

  • 当前窗格上移:tmux swap-pane -U
  • 当前窗格下移:tmux swap-pane -D

5.4 窗格快捷键

  • Ctrl+b %:划分左右两个窗格。
  • Ctrl+b ":划分上下两个窗格。
  • Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key> 指向要切换到的窗格方向键。
  • Ctrl+b ;:光标切换到上一个窗格。
  • Ctrl+b o:光标切换到下一个窗格。
  • Ctrl+b {Ctrl+b }:当前窗格与相邻窗格交换位置。
  • Ctrl+b Ctrl+oCtrl+b Alt+o:所有窗格顺序调整。
  • Ctrl+b x:关闭当前窗格。
  • Ctrl+b !:将当前窗格拆分为一个独立窗口。
  • Ctrl+b z:当前窗格全屏显示,再按恢复。
  • Ctrl+b Ctrl+<arrow key>:调整窗格大小。
  • Ctrl+b q:显示窗格编号。

6.窗口管理

除了划分窗格,Tmux 也允许新建多个窗口。

6.1 新建窗口

  • 新建窗口:tmux new-window
  • 新建指定名称的窗口:tmux new-window -n <window-name>

6.2 切换窗口

  • 切换到指定编号的窗口:tmux select-window -t <window-number>
  • 切换到指定名称的窗口:tmux select-window -t <window-name>

6.3 重命名窗口

  • 为当前窗口起名或重命名:tmux rename-window <new-name>

6.4 窗口快捷键

  • Ctrl+b c:创建新窗口。
  • Ctrl+b pCtrl+b n:切换窗口。
  • Ctrl+b <number>:切换到指定编号的窗口。
  • Ctrl+b w:从列表中选择窗口。
  • Ctrl+b ,:窗口重命名。

7.其他命令

以下是一些额外的 Tmux 命令:

  • 列出所有快捷键:tmux list-keys
  • 列出所有 Tmux 命令及参数:tmux list-commands
  • 列出当前所有 Tmux 会话信息:tmux info
  • 重新加载 Tmux 配置:tmux source-file ~/.tmux.conf

8.演示过程

我们输入 tmux new -s work 创建一个 session:

可以看到后台已经启动了 tmux 的 server 进程,因此即使关闭你的 terminal,session 仍然在运行:

输入 prefix + d 可以分离 session(注意:一定要松开 prefix 再按 d):

如果想要重新连接已分离的 session,可以输入 tmux attach -t [session-name]。在上例中,session 名为 work,因此指令为 tmux attach -t work

若需重新命名 session,可以按下 prefix + $

要查看所有 session,可以按下 prefix + s

或者使用 tmux ls 查看所有 session:

一个 session 可以包含多个窗口。创建 session 时会默认生成一个窗口,使用 prefix + c 可以创建新窗口(每个窗口前面有编号,当前窗口标记为 *,上一个窗口标记为 -):

调整窗口:

  • prefix + p:切换到上一个窗口
  • prefix + n:切换到下一个窗口
  • prefix + <number>:跳转到指定编号的窗口

按下 prefix + w 可以显示所有窗口列表:

按下 prefix + , 可以为窗口命名,左下角会显示更改后的名字:

在窗口中可以进行分割,按下 prefix + " 可以水平分割,按下 prefix + % 可以垂直分割:

移动窗格:

  • prefix + <方向键>:按方向键移动
  • prefix + ;:切换到上一个窗格
  • prefix + o:切换到下一个窗格

要关闭当前窗格,可以按下 prefix + x

将窗格转换为窗口(pane -> window):按下 prefix + !,可以看到窗口数量增加:

要最大化窗格,可以按下 prefix + z,左下角会提示已最大化,再按一次可以恢复:

附录

表一:系统指令

前缀 指令 描述
Ctrl+b ? 显示快捷键帮助文档
Ctrl+b d 断开当前会话
Ctrl+b D 选择要断开的会话
Ctrl+b Ctrl+z 挂起当前会话
Ctrl+b r 强制重载当前会话
Ctrl+b s 显示会话列表用于选择并切换
Ctrl+b : 进入命令行模式,此时可直接输入命令
Ctrl+b [ 进入复制模式,按q退出
Ctrl+b ] 粘贴复制模式中复制的文本
Ctrl+b ~ 列出提示信息缓存

表二:窗口(Window)指令

前缀 指令 描述
Ctrl+b c 新建窗口
Ctrl+b & 关闭当前窗口(关闭前需输入y or n确认)
Ctrl+b 0~9 切换到指定窗口
Ctrl+b p 切换到上一窗口
Ctrl+b n 切换到下一窗口
Ctrl+b w 打开窗口列表,用于选择切换窗口
Ctrl+b , 重命名当前窗口
Ctrl+b . 修改当前窗口编号(适用于窗口重新排序)
Ctrl+b f 快速定位到窗口(输入关键字匹配窗口名称)

表三:面板(Pane)指令

前缀 指令 描述
Ctrl+b " 当前面板上下一分为二,下`
Ctrl+b Ctrl+方向键 以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖)
Ctrl+b t 显示时钟

参考链接