Linux VPS上使用tmux的完整指南

4 分钟阅读·Matthieu|

学习如何在Linux VPS上安装和使用tmux,实现持久终端会话、分屏工作流,以及SSH断连保护。适用于Debian 12和Ubuntu 24.04。

你SSH连入VPS,启动了一个耗时很长的数据库迁移,然后Wi-Fi断了。进程被杀。工作全部丢失。

tmux解决这个问题。它把终端session(会话)运行在服务器上,不依赖你的SSH连接。断开、重连,一切从断点继续。

本教程从安装tmux讲起,到编写多pane(窗格)布局脚本。所有命令在Debian 12或Ubuntu 24.04上运行。

什么是tmux?为什么在VPS上使用?

tmux是一个terminal multiplexer(终端复用器)。它允许你在一个SSH连接里运行多个终端session,而且这些session在你断开后仍然保留在服务器上。

tmux的工作结构分为三个层级:

  • Session(会话) 是最顶层的容器。每个session是一个独立的工作区。你可以从session分离,之后再重新连接。
  • Window(窗口) 存在于session内部。可以理解为标签页。每个window运行自己的shell。
  • Pane(窗格) 把一个window分割成多个矩形区域,每个区域运行自己的命令。
Session "deploy"
  ├── Window 0: "editor"
  │     ├── Pane 0: vim
  │     └── Pane 1: file watcher
  └── Window 1: "logs"
        └── Pane 0: journalctl -f

在VPS上,tmux提供三个关键能力:

  1. SSH断连保护。 连接断开时,进程继续运行。重连后重新attach(连接)即可。
  2. 多pane工作流。 一个pane看日志,另一个跑命令,第三个编辑文件。全部在一个SSH连接里完成。
  3. Session持久化。 session可以连续运行数天。下班前detach(分离),第二天重新attach。

如何在Debian 12和Ubuntu 24.04上安装tmux?

tmux在Debian 12和Ubuntu 24.04的默认软件源中。一条命令即可安装。

sudo apt update && sudo apt install -y tmux

验证安装:

tmux -V

Debian 12上的预期输出:

tmux 3.3a

Ubuntu 24.04上的预期输出:

tmux 3.4

注意观察:版本号确认tmux是从官方软件源安装的。如果没有输出或提示"command not found",说明安装失败。检查apt输出的错误信息。

如何创建和管理tmux session?

tmux session是服务器上的持久工作区。创建一个,运行你的命令,即使关闭终端它也不会消失。

创建session

创建一个带名称的session:

tmux new-session -s deploy

这会创建一个名为"deploy"的session并自动连接进去。终端底部会出现一条绿色状态栏,确认你已经在tmux session内部。

创建session但不连接(适用于脚本):

tmux new-session -d -s background

验证它是否存在:

tmux list-sessions
background: 1 windows (created Thu Mar 19 10:00:00 2026)

如何从tmux session分离并稍后重新连接?

这是VPS上的核心工作流。从session分离以释放终端,稍后重新连接以恢复工作。session在服务器上持续运行。

要分离,按**prefix key(前缀键)**后按d

Ctrl-b  d

默认的prefix key是Ctrl-b。同时按下Ctrlb,松开,然后按d。tmux的每个快捷键都是这个模式:先按prefix,再按功能键。

终端回到普通shell。session仍在运行。

重新连接:

tmux attach -t deploy

如果只有一个session,可以省略名称:

tmux attach

查看正在运行的session:

tmux list-sessions
deploy: 1 windows (created Thu Mar 19 10:00:00 2026) (attached)
background: 1 windows (created Thu Mar 19 10:05:00 2026)

(attached)标签表明你的终端当前连接到哪个session。

销毁session

不再需要某个session时,销毁它:

tmux kill-session -t background

验证已删除:

tmux list-sessions

杀死所有session并完全停止tmux server:

tmux kill-server

重命名session

在session内部,按:

Ctrl-b  $

输入新名称后按Enter。当你创建session时没有指定名称,tmux会自动分配一个数字,这时重命名很有用。

如何使用tmux window组织任务?

Window是session内部的标签页。每个window运行自己的shell。用它们分隔不需要同时显示的任务。

创建新window:

Ctrl-b  c

状态栏更新,显示新window。星号(*)标记当前活动的window:

[deploy] 0:bash  1:bash*

在window之间切换

按编号切换:

Ctrl-b  0    # Go to window 0
Ctrl-b  1    # Go to window 1

循环切换:

Ctrl-b  n    # Next window
Ctrl-b  p    # Previous window

重命名window

Ctrl-b  ,

输入有意义的名称如"logs"或"editor",按Enter。当你打开多个window时,命名让状态栏更易读。

关闭window

在shell中输入exit,或按:

Ctrl-b  &

tmux会在关闭前要求确认。

如何将终端分割为pane?

Pane把一个window分割成同时可见的多个终端。这是tmux在VPS管理中最有价值的功能:一个pane看日志,另一个跑命令。

水平分割当前pane(上下两部分):

Ctrl-b  "

垂直分割当前pane(左右两部分):

Ctrl-b  %

分割后你有两个pane。绿色边框高亮显示当前活动的pane。

如何在tmux pane之间导航和调整大小?

用方向键在pane之间移动:

Ctrl-b  ↑    # Move to pane above
Ctrl-b  ↓    # Move to pane below
Ctrl-b  ←    # Move to pane left
Ctrl-b  →    # Move to pane right

按住prefix再按Ctrl加方向键调整pane大小:

Ctrl-b  Ctrl-↑    # Resize pane up
Ctrl-b  Ctrl-↓    # Resize pane down
Ctrl-b  Ctrl-←    # Resize pane left
Ctrl-b  Ctrl-→    # Resize pane right

缩放pane

需要暂时让一个pane全屏?切换缩放模式:

Ctrl-b  z

再按一次恢复分割布局。pane处于缩放状态时,状态栏的window名称旁会显示Z

关闭pane

在pane中输入exit,或按:

Ctrl-b  x

tmux会要求确认。如果关闭了window中的最后一个pane,window也会关闭。

交换pane位置

旋转pane位置:

Ctrl-b  {    # Move current pane left/up
Ctrl-b  }    # Move current pane right/down

如何使用tmux copy mode滚动和搜索?

默认情况下,你无法在tmux pane中使用鼠标滚轮或Page Up向上滚动。Copy mode(复制模式)提供回滚、搜索和文本选择功能。

进入copy mode:

Ctrl-b  [

你现在处于copy mode中。右上角显示你在scrollback buffer(回滚缓冲区)中的位置(例如[0/500])。

在copy mode中导航

tmux默认使用emacs风格的按键。如果你的EDITORVISUAL环境变量包含"vi",则使用vi风格的按键。

Emacs模式(默认):

操作 按键
向上滚动 Ctrl-UpPage Up
向下滚动 Ctrl-DownPage Down
移动光标 方向键
行首 Ctrl-a
行尾 Ctrl-e
向前搜索 Ctrl-s
向后搜索 Ctrl-r
开始选择 Ctrl-Space
复制选择 Alt-w
退出copy mode q

Vi模式:

操作 按键
向上滚动 Ctrl-u(半页)
向下滚动 Ctrl-d(半页)
移动光标 h j k l
向前搜索 /
向后搜索 ?
开始选择 Space
复制选择 Enter
退出copy mode q

复制后,粘贴:

Ctrl-b  ]

注意观察:copy mode是搜索长命令输出的方式。如果构建失败且错误信息已滚出屏幕,进入copy mode用Ctrl-r(emacs)或?(vi)向后搜索。

如何用.tmux.conf自定义tmux?

tmux server启动时读取~/.tmux.conf配置文件。tmux 3.2及更高版本还会检查~/.config/tmux/tmux.conf

以下配置适合VPS管理场景。每行都有说明。

创建或编辑配置文件:

nano ~/.tmux.conf
# -- General -----------------------------------------------------------------

# Change prefix from Ctrl-b to Ctrl-a (easier to reach)
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# Start window numbering at 1 (0 is far from the prefix key)
set -g base-index 1
setw -g pane-base-index 1

# Renumber windows when one is closed (no gaps)
set -g renumber-windows on

# Increase scrollback buffer (default is 2000 lines)
set -g history-limit 50000

# Reduce escape delay (snappier key response)
set -g escape-time 10

# Enable mouse support (scroll, click panes, resize)
set -g mouse on

# -- Display -----------------------------------------------------------------

# 256-color terminal support
set -g default-terminal "tmux-256color"

# -- Key Bindings ------------------------------------------------------------

# Split panes with | and - (more intuitive than " and %)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# Navigate panes with Alt-arrow (no prefix needed)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Reload config with prefix r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded"

# -- Copy Mode ---------------------------------------------------------------

# Use vi keys in copy mode
setw -g mode-keys vi

# -- Status Bar --------------------------------------------------------------

# Status bar position
set -g status-position bottom

# Update interval (seconds)
set -g status-interval 5

# Clean status bar colors
set -g status-style "bg=colour235,fg=colour136"
set -g status-left "#[fg=colour235,bg=colour136] #S #[fg=colour136,bg=colour235] "
set -g status-right "#[fg=colour136] %H:%M %d-%b-%Y "
set -g status-left-length 20

保存退出。将配置应用到正在运行的tmux session:

tmux source-file ~/.tmux.conf

Ctrl-a(新的prefix)而不是Ctrl-b来验证。如果有效,说明配置已正确加载。

设置配置文件权限:

chmod 600 ~/.tmux.conf
ls -la ~/.tmux.conf
-rw------- 1 youruser youruser 1234 Mar 19 10:00 /home/youruser/.tmux.conf

600权限表示只有你的用户可以读写该文件。如果你在tmux配置中存储了自定义脚本或敏感路径,这一点很重要。

默认设置变更说明:

  1. Prefix改为Ctrl-a,按键位置在左手小指下方。Ctrl-b需要伸展手指。这是最常见的重新绑定。
  2. base-index 1 让window从1开始编号而不是0。按Ctrl-a 1切换到第一个window更自然。
  3. history-limit 50000 每个pane存储50000行回滚记录。默认的2000行对于查看日志来说太少。
  4. escape-time 10 减少tmux在收到Escape键后的等待时间。默认值(500ms)会让Vim在tmux中感觉迟钝。
  5. -c "#{pane_current_path}" 让分割绑定在当前目录中打开新pane,而不是home目录。
  6. mode-keys vi 将copy mode切换为vi风格导航。如果你更喜欢emacs风格,改为emacs

如何用tpm安装tmux插件?

tmux Plugin Manager (tpm)让你从GitHub安装插件。两个值得了解的插件:

  • tmux-resurrect 在服务器重启后保存和恢复tmux session
  • tmux-continuum 按固定间隔自动保存session

安装tpm

克隆仓库:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

~/.tmux.conf底部添加以下内容:

# -- Plugins -----------------------------------------------------------------

# Plugin manager
set -g @plugin 'tmux-plugins/tpm'

# Save/restore sessions across reboots
set -g @plugin 'tmux-plugins/tmux-resurrect'

# Auto-save sessions every 15 minutes
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'

# Initialize tpm (keep this line at the very bottom)
run '~/.tmux/plugins/tpm/tpm'

重新加载配置:

tmux source-file ~/.tmux.conf

在tmux内部安装插件:

Ctrl-a  I

注意是大写I。tpm会获取并安装插件。完成后会显示提示信息。

验证插件已安装:

ls ~/.tmux/plugins/
tmux-continuum  tmux-resurrect  tpm

使用tmux-resurrect

保存当前session布局:

Ctrl-a  Ctrl-s

重启后恢复:

Ctrl-a  Ctrl-r

tmux-resurrect保存window布局、pane分割和每个pane的当前目录。启用tmux-continuum后,每15分钟自动执行一次保存。

如何处理嵌套tmux session(SSH中的SSH)?

当你在本地运行tmux,然后SSH到一台同样运行tmux的VPS时,形成了tmux嵌套。两个实例响应相同的prefix key。你的按键会被外层(本地)tmux捕获,而不是内层(远程)tmux。

解决方法:按两次prefix key,将prefix传递到内层session。

Ctrl-a  Ctrl-a  d    # Detach the inner (remote) session

第一个Ctrl-a被外层tmux捕获。第二个Ctrl-a作为prefix转发给内层tmux。然后d分离内层session。

更简洁的方法:使用不同的prefix key。本地保持Ctrl-a,远程服务器保留默认的Ctrl-b。这样就没有冲突。

如果你已经在两端都修改了prefix,在本地的~/.tmux.conf中添加切换功能:

# Toggle prefix passthrough with F12
bind -T root F12 \
  set prefix None \;\
  set key-table off \;\
  set status-style "bg=colour238,fg=colour240" \;\
  display-message "Prefix OFF (sending to inner)"

bind -T off F12 \
  set -u prefix \;\
  set -u key-table \;\
  set -u status-style \;\
  display-message "Prefix ON (local)"

F12禁用本地prefix,所有按键传递到远程tmux。再按F12重新启用。变暗的状态栏给你一个视觉指示,告诉你当前处于哪种模式。

如何为服务器管理创建脚本化tmux布局?

不必每次SSH连入时手动分割pane,把布局写成脚本。一条命令创建可重复的工作区。

创建脚本:

nano ~/tmux-admin.sh
#!/usr/bin/env bash
# tmux-admin.sh: three-pane admin layout

SESSION="admin"

# Kill old session if it exists
tmux kill-session -t "$SESSION" 2>/dev/null

# Create session with first window named "monitor"
tmux new-session -d -s "$SESSION" -n "monitor"

# Top pane: system monitoring
tmux send-keys -t "$SESSION:monitor" "htop" C-m

# Split horizontally: bottom pane for logs
tmux split-window -v -t "$SESSION:monitor"
tmux send-keys -t "$SESSION:monitor.1" "journalctl -f" C-m

# Split bottom pane vertically: right pane for shell
tmux split-window -h -t "$SESSION:monitor.1"

# Create second window for a working shell
tmux new-window -t "$SESSION" -n "work"

# Select the first window
tmux select-window -t "$SESSION:monitor"

# Select the bottom-right pane (the empty shell)
tmux select-pane -t "$SESSION:monitor.2"

# Attach to the session
tmux attach -t "$SESSION"

设置可执行权限并运行:

chmod 700 ~/tmux-admin.sh
~/tmux-admin.sh

你会得到一个三pane布局:顶部是htop,左下是journalctl -f,右下是空shell。第二个名为"work"的window可用于临时命令。

注意观察:send-keys末尾的C-m是回车符,它按下Enter来执行命令。

用systemd在开机时自动启动tmux

对于长期运行的管理session,创建一个systemd service:

sudo nano /etc/systemd/system/tmux-admin@.service
[Unit]
Description=tmux admin session for %i
After=network.target

[Service]
Type=forking
User=%i
ExecStart=/usr/bin/tmux new-session -d -s admin
ExecStop=/usr/bin/tmux kill-session -t admin

[Install]
WantedBy=multi-user.target

为你的用户启用并启动:

sudo systemctl enable --now tmux-admin@youruser.service

验证运行状态:

sudo systemctl status tmux-admin@youruser.service
● tmux-admin@youruser.service - tmux admin session for youruser
     Loaded: loaded (/etc/systemd/system/tmux-admin@.service; enabled)
     Active: active (running)

现在tmux会在开机时自动创建一个名为"admin"的session。SSH连入后直接attach:

tmux attach -t admin

安全:tmux socket权限

tmux创建socket(套接字)文件用于server和client进程之间的通信。默认情况下,socket位于/tmp下的目录中(例如/tmp/tmux-1000/)。

检查你的socket目录:

ls -la /tmp/tmux-$(id -u)/
srwxrwx--- 1 youruser youruser 0 Mar 19 10:00 default

socket目录归你的用户所有,权限设置阻止其他用户访问。这意味着同一服务器上的其他用户无法连接到你的tmux session。

但是,如果你以root身份运行tmux,任何以root运行的进程都可以连接。日常工作中避免以root运行tmux。以普通用户SSH连入,需要时对单条命令使用sudo

如果需要共享tmux session(用于结对编程或指导),显式使用共享socket:

tmux -S /tmp/shared-session new-session -s pair
chmod 770 /tmp/shared-session

另一个用户连接:

tmux -S /tmp/shared-session attach -t pair

完成后撤销权限:

chmod 700 /tmp/shared-session

常见问题排查

tmux: command not found 软件包未安装。运行sudo apt install -y tmux并检查错误。

"no server running on /tmp/tmux-1000/default" 没有tmux session存在。用tmux new-session -s main创建一个。

按键无响应/prefix错误 检查当前活动的prefix:tmux show-options -g prefix。如果你在.tmux.conf中修改了prefix,用tmux source-file ~/.tmux.conf重新加载。

鼠标滚动不工作~/.tmux.conf中添加set -g mouse on并重新加载。tmux 2.1之前的版本使用set -g mode-mouse on(语法不同)。

tmux内颜色显示异常~/.tmux.conf中设置set -g default-terminal "tmux-256color"。如果你的终端模拟器支持true color(24位色),添加:

set -as terminal-overrides ",*-256color:Tc"

重启后session丢失 tmux session默认不会在重启后保留。使用tmux-resurrect和tmux-continuum(上文已介绍),或创建systemd service在开机时自动启动session。

Vim退出插入模式很慢 默认的escape-time(500ms)导致此问题。在~/.tmux.conf中设置set -g escape-time 10

查看tmux日志排查深层问题:

tmux start-server \; show-messages

或查看系统日志:

journalctl -u tmux-admin@youruser.service -f

tmux快捷键速查表

本表使用默认prefix Ctrl-b。如果你已将prefix重新绑定为Ctrl-a(如上述配置),请使用新的prefix。

Session

操作 快捷键 命令
新建命名session tmux new-session -s name
分离 Ctrl-b d tmux detach
列出session Ctrl-b s tmux list-sessions
连接 tmux attach -t name
重命名session Ctrl-b $ tmux rename-session
杀死session tmux kill-session -t name

Window

操作 快捷键 命令
新建window Ctrl-b c
下一个window Ctrl-b n
上一个window Ctrl-b p
按编号切换 Ctrl-b 0-9
重命名window Ctrl-b ,
关闭window Ctrl-b &
列出window Ctrl-b w

Pane

操作 快捷键 命令
水平分割 Ctrl-b "
垂直分割 Ctrl-b %
导航 Ctrl-b Arrow
调整大小 Ctrl-b Ctrl-Arrow
缩放切换 Ctrl-b z
关闭pane Ctrl-b x
交换pane Ctrl-b { / Ctrl-b }

Copy Mode

操作 快捷键
进入copy mode Ctrl-b [
粘贴缓冲区 Ctrl-b ]
搜索(emacs) Ctrl-r(向后)/ Ctrl-s(向前)
搜索(vi) ?(向后)/ /(向前)
退出 q

其他

操作 快捷键
命令提示符 Ctrl-b :
列出所有快捷键 Ctrl-b ?
时钟模式 Ctrl-b t

Copyright 2026 Virtua.Cloud. All rights reserved.

准备好亲自尝试了吗?

几秒内部署您自己的服务器。支持 Linux、Windows 或 FreeBSD。

查看 VPS 方案
Linux VPS使用tmux教程(Debian/Ubuntu)