Linux中tmux入门使用指南:告别SSH断线烦恼,提升终端工作效率的神器

前言

你是否遇到过这些情况?

  • 用SSH连上远程服务器,正在执行一个需要数小时的任务,突然网络断开,一切前功尽弃。
  • 想在一个终端里同时查看日志、编辑代码、执行命令,不得不打开好几个终端窗口,来回切换,手忙脚乱。
  • 和同事协作排查问题,想让他实时看到你的终端操作,却只能通过截图或共享屏幕,效率低下。

如果这些场景让你感同身受,那么 tmux 就是你一直在寻找的解决方案。

tmux

什么是tmux?为什么需要它?

tmux 的全称是T erminal Mu ltiplexer(终端复用器)。它是一个强大的工具,允许你在一个单一的终端窗口中创建、访问和控制多个"虚拟"终端。

GitHub:https://github.com/tmux/tmux

文档:https://github.com/tmux/tmux/wiki/Getting-Started


核心好处:

1.会话保持(Session Persistence):

arduino 复制代码
这是tmux最重要的特性。可以在服务器上开启一个tmux 会话,运行任务,然后安全地断开连接

服务器上的会话和任务会一直在后台运行。当重新连接后,可以"附加"(attach)回之前的会话,一切都还在原来的位置,就像从未离开过

这对于长时间运行的任务和不稳定的网络环境来说是救星

2.多任务处理(Windows & Panes):

复制代码
可以在一个tmux会话中创建多个窗口(Windows),每个窗口就像一个独立的全屏终端

还可以将一个窗口分割成多个小窗格(Panes),实现分屏效果

比如,左边用 Vim 编辑代码,右上角实时查看日志,右下角执行 Git 命令,所有这些都在同一个屏幕内完成

3.结对编程(Session Sharing):

复制代码
多个用户可以连接到同一个tmux会话,实时看到相同的屏幕内容,并进行操作。这对于远程协作和教学非常有用

核心概念

在开始之前,理解tmux的三个核心层级结构至关重要,这会对所有命令有更清晰的认识。

它们的层级关系是:Session > Window > Pane


会话 (Session)

arduino 复制代码
一个Session相当于一个独立的工作区,包含了多个窗口

可以创建多个Session,比如一个用于开发项目A,一个用于管理服务器

Session在后台独立运行,可以随时"分离"(detach)和"附加"(attach)

窗口 (Window)

sql 复制代码
一个Window相当于浏览器里的一个标签页,它占据整个终端屏幕

在一个 Session中可以有多个Window,可以轻松地在它们之间切换

窗格 (Pane)

sql 复制代码
一个Pane是Window分割出来的小块区域

一个Window可以被水平或垂直分割成多个Pane,每个Pane都是一个独立的伪终端,有自己的shell提示符

总结概述:

复制代码
程序在终端的窗格中运行,每个窗格属于一个窗口

每个窗口都有一个名称和一个活动窗格

窗口链接到一个或多个会话

每个会话都有一个窗口列表,每个窗口都有一个索引

会话中的一个窗口是当前窗口

会话附加到一个或多个客户端,或者分离(不附加到任何客户端)

每个客户端都附加到一个会话

安装tmux

tmux几乎是所有Linux发行版的标准软件包。可以用系统的包管理器轻松安装。

  • 在 Debian/Ubuntu 上:

    bash 复制代码
    sudo apt update
    sudo apt install tmux
  • 在 CentOS/RHEL/Fedora 上:

    bash 复制代码
    sudo yum install tmux  # 或者 sudo dnf install tmux

    或者

    bash 复制代码
    sudo dnf install tmux

基本操作

前缀键 (Prefix Key)

tmux的所有快捷键都需要先按下一个前缀键,然后再按功能键。默认的前缀键是 Ctrl + b

操作流程

  1. 按住 Ctrl 键,再按 b 键。
  2. 松开这两个键。
  3. 紧接着按下功能键(比如 c%d 等)。

在下文中,使用 [Prefix] 来代表 Ctrl + b

帮助键

每个默认的 tmux 按键绑定都有一个简短的描述,以帮助记住按键的功能。

快捷键:[Prefix] + ?:进入查看模式以帮助信息

快捷键:Ctrl + Z:退出查看

状态行

连接 tmux 客户端后,屏幕底部会显示一条状态行。默认状态行显示为绿色

状态行内容如下:

css 复制代码
左侧为附加会话的名称:[0]

中间是会话中的窗口列表及其索引,例如,一个窗口ksh在索引 0 处调用:0:ksh

右侧是引号中的窗格标题(默认为运行 tmux 的主机名称)以及时间和日期

启动与会话管理

启动一个新会话

在终端里直接输入:

bash 复制代码
tmux

这会创建一个新的、未命名的会话,并进入其中。会看到终端底部出现一个绿色的状态栏,这表示已经进入了tmux环境。

默认情况下,第一个会话将被称为0,第二个会话1

启动一个命名会话(推荐)

给会话命名是个好习惯,方便以后管理。

创建一个名为 my_project 的新会话。

bash 复制代码
tmux new -s my_project

分离会话 (Detach)

当想要暂时离开会话,但让它在后台继续运行时,可以"分离"它。使用快捷键:[Prefix] + d

分离后,会回到原来的Shell提示符,但my_project会话仍在后台运行。

看所有会话

使用tmux ls命令可以列出当前所有正在运行的tmux会话

bash 复制代码
[root@localhost ~]# tmux ls
0: 1 windows (created Tue Aug 12 14:08:13 2025) [180x34]
my_project: 1 windows (created Tue Aug 12 14:09:28 2025) [180x34]

附加会话 (Attach)

当准备好回来继续工作时,可以附加到之前分离的会话。 附加成功后,会看到之前会话的所有窗口和窗格,完好如初。

如果只有一个会话,可以直接用

bash 复制代码
tmux attach

如果有多个会话,需要指定名称

bash 复制代码
tmux attach -t 0

tmux attach -t my_project

关闭/杀死会话

1.在会话外部:使用命令

bash 复制代码
tmux kill-session -t my_project

2.在会话内部:关闭所有窗格和窗口,会话会自动结束。

窗口管理

在一个会话中,可以管理多个窗口。

创建新窗口 (Create)

快捷键:[Prefix] + c

状态栏上会多出一个新的窗口标签,比如 0:bash, 1:bash

切换窗口

切换到下一个窗口 (Next):[Prefix] + n

切换到上一个窗口 (Previous):[Prefix] + p

通过编号切换到指定窗口 (比如第1个窗口):[Prefix] + 1

重命名窗口 (Rename)

快捷键:[Prefix] + ,

此时状态栏会变为可编辑状态,输入新名字后按回车。

给窗口起一个有意义的名字,比如 "Logs"。

关闭当前窗口

快捷键:[Prefix] + & (会提示确认)

或者直接在窗口的 Shell 中输入 exit

窗格管理

窗格管理是tmux分屏功能的精髓。

垂直分割 (左右)

快捷键:[Prefix] + %

这会将当前窗格一分为二,左右排列。

水平分割 (上下)

快捷键:[Prefix] + "

这会将当前窗格一分为二,上下排列。

在窗格间切换

快捷键:[Prefix] + 方向键 (↑, ↓, ←, →)

光标会在不同窗格间移动,当前激活的窗格边框会变色。

关闭当前窗格

快捷键:[Prefix] + x (会提示确认)

或者直接在窗格的 Shell 中输入 exit

最大化/恢复窗格 (Zoom)

最大化/恢复窗格就是让当前窗格临时占满整个屏幕,以便专注工作

快捷键:[Prefix] + z

再按一次 [Prefix] + z 即可恢复原来的布局。

常用快捷键速查表

功能分类 快捷键 (Ctrl+b + ...) 描述
会话 d 分离当前会话
tmux ls (在tmux外) 列出所有会话
tmux attach -t [name] (在tmux外) 附加到指定会话
tmux new -s [name] (在tmux外) 创建命名会话
窗口 c 创建一个新窗口
w 列出所有窗口 (可交互选择)
p 切换到上一个窗口
n 切换到下一个窗口
0-9 切换到指定编号的窗口
, 重命名当前窗口
& 关闭当前窗口
窗格 % 垂直分割 (左右)
" 水平分割 (上下)
方向键 在窗格间移动
z 最大化/恢复当前窗格
x 关闭当前窗格
o 按顺序切换到下一个窗格

自定义配置

当熟练之后,可以创建 ~/.tmux.conf 文件来定制 tmux 的行为。例如,很多人觉得 Ctrl+b 不顺手,会改成 Ctrl+a

~/.tmux.conf 中加入以下内容:

bash 复制代码
# 将前缀键从 C-b 改为 C-a
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

# 开启鼠标支持 (滚动, 选择窗格/窗口)
set -g mouse on

修改后,需要让配置生效。可以在 tmux 会话中按 [Prefix] + : 进入命令模式,然后输入 source-file ~/.tmux.conf,或者直接重启 tmux。

相关推荐
IvanCodes1 小时前
十二、Linux Shell脚本:正则表达式
linux·运维·正则表达式
拾心212 小时前
【运维进阶】LAMPLNMP 最佳实践
运维
Brandon汐3 小时前
在Linux中部署tomcat
linux·运维·tomcat
sniper_fandc3 小时前
VirtualBox虚拟机网卡配置
linux·网络·虚拟机
白鸽梦游指南4 小时前
RHCE模拟测试
linux·运维·服务器
SRETALK4 小时前
夜莺开源监控,模板函数一览
运维·监控·自动化运维
不会吉他的肌肉男不是好的挨踢男4 小时前
Linux生成自签名 SSL 证书(适用于测试或内部使用)
linux·运维·ssl
飘忽不定的bug4 小时前
linux磁盘加密
linux·开源
herderl4 小时前
【无标题】命名管道(Named Pipe)是一种在操作系统中用于**进程间通信(IPC)** 的机制
java·linux·服务器·嵌入式硬件·php