关于Tmux的常用操作

1 minute read

Published:

tmux (Terminal Multiplexer) 是一个强大的终端复用器。它允许用户在单个终端窗口中创建、管理和切换多个独立的会话(Session)、窗口(Window)和面板(Pane)。tmux 的核心优势在于其会话持久化能力,即使终端关闭或网络断开,您在 tmux 中运行的任务也能继续在后台执行,随时可以重新连接并恢复工作。这对于远程开发、长时间运行任务以及提升终端工作效率至关重要。

核心概念

在使用 tmux 之前,理解以下三个核心概念至关重要:

  1. 会话 (Session):
    • tmux 的最高层级。
    • 每个会话都是一个独立的工作空间,可以包含多个窗口。
    • 可以有多个会话同时运行。
  2. 窗口 (Window):
    • 每个会话可以包含多个窗口。
    • 每个窗口都相当于一个独立的终端标签页。
  3. 面板 (Pane):
    • 每个窗口可以进一步分割成多个面板。
    • 每个面板都运行一个独立的 shell。
    • 类似于在同一个终端窗口中分屏。

tmux 工作流程

典型的 tmux 工作流程包括以下步骤:

  1. 启动 tmux 会话: 进入 tmux 环境。
  2. 在会话中工作: 创建窗口、分割面板,运行命令。
  3. 分离会话 (Detach): 暂时离开 tmux 环境,但会话仍在后台运行。
  4. 重新连接会话 (Attach): 重新进入之前分离的 tmux 会话,恢复工作。

tmux 基本指令

tmux 的所有操作都通过一个前缀键 (Prefix Key) 加上一个命令键来完成。 默认前缀键: Ctrl + b。 这意味着:您需要先按下 Ctrl + b,然后松开,再按下后续的命令键。

一、会话 (Session) 管理

指令作用备注
tmux启动一个新的 tmux 会话。如果当前没有会话,则创建一个并连接。最简单的启动方式。
tmux new -s [会话名称]启动一个带名称的新会话。例如:tmux new -s my_project-s 指定会话名称。
tmux ls列出所有当前的 tmux 会话。tmux list-sessions 的简写。
tmux attach -t [会话名称]重新连接到指定名称的会话。例如:tmux attach -t my_project-t 指定目标会话。如果只有一个会话,直接 tmux attach 即可。
Prefix + d分离 (Detach) 当前的 tmux 会话。会话在后台继续运行。最常用操作之一,用于退出 tmux 环境而不终止会话。
tmux kill-session -t [会话名称]杀死(结束)指定名称的会话。请谨慎使用,会话中的所有进程都会被终止。
tmux kill-server杀死所有 tmux 会话和服务器。极少使用,除非您需要彻底清理 tmux 环境。

二、窗口 (Window) 管理 (前缀键 Ctrl + b + 命令键)

指令作用备注
Prefix + c创建一个新的窗口。新窗口会显示一个新的 shell。
Prefix + n切换到下一个窗口。n for next。
Prefix + p切换到上一个窗口。p for previous。
Prefix + <数字键>切换到指定编号的窗口(例如 Prefix + 0 切换到第一个窗口)。窗口编号从 0 开始。
Prefix + ,重命名当前窗口。底部状态栏会提示您输入新名称。
Prefix + w选择窗口。会弹出一个交互式列表,显示所有会话和窗口。w for window。您可以使用方向键选择,回车确认。
Prefix + &关闭当前窗口。会提示确认,y 确认,n 取消。

三、其他常用指令 (前缀键 Ctrl + b + 命令键)

指令作用备注
Prefix + [进入复制模式。允许您向上滚动查看历史输出,并复制文本。进入后,可以使用方向键滚动,Space 开始选择,Enter 复制。
Prefix + ]粘贴 tmux 内部剪贴板中的内容。 
Prefix + ?显示所有 tmux 快捷键的帮助信息。 
Prefix + t显示一个大时钟。 

常用场景示例

  1. 长时间运行任务:
    • tmux new -s my_build (启动会话)
    • 运行 npm installgit clone 等耗时操作。
    • Ctrl + b + d (分离会话)
    • 关闭终端或断开 SSH 连接。
    • 稍后回来,tmux attach -t my_build 即可查看任务进度。
  2. 分屏工作:
    • tmux (启动会话)
    • Ctrl + b + " (垂直分割面板)
    • Ctrl + b + % (水平分割面板)
    • Ctrl + b + 方向键 (在不同面板间切换)
    • 一个面板运行代码编辑器,一个面板运行服务器,一个面板查看日志。
  3. 多项目管理:
    • tmux new -s project_alpha
    • project_alpha 中工作。
    • Ctrl + b + d (分离 project_alpha)
    • tmux new -s project_beta
    • project_beta 中工作。
    • Ctrl + b + d (分离 project_beta)
    • tmux ls (查看所有会话)
    • tmux attach -t project_alpha (重新连接到 project_alpha)

tmux 配置 (~/.tmux.conf)

tmux 可以通过编辑用户主目录下的配置文件 ~/.tmux.conf 进行高度定制,以适应个人工作习惯。常见的定制包括:

  • 更改前缀键: 许多用户将前缀键从默认的 Ctrl + b 改为 Ctrl + a
    # ~/.tmux.conf
    unbind C-b
    set-option -g prefix C-a
    bind-key C-a send-prefix
    
  • 启用鼠标支持: 允许使用鼠标点击切换面板、调整大小、滚动。
    # ~/.tmux.conf
    set -g mouse on
    
  • 状态栏美化: 自定义底部状态栏显示的信息和颜色,使其更具信息量和个性化。

示例

image-20240430201442546

图中,[2]表示会话编号或会话名称。0:bash,1:2,2:666表示存在三个窗口,窗口编号分别为0,1,2;窗口名称分别为bash,2,666。*表示当前所处的为窗口0。