tmux多会话终端管理¶
tmux意思是 terminal multiplexer
(终端多路器) ,它的功能是在一个单一屏幕(screen)内提供创建、访问和控制多个终端(或窗口)。tmux是作为 服务器-客户机
系统运行的,也就是在需要时创建一个服务器来管理所有会话,每个会话关联了一系列窗口,而tmux服务器就管理者所有的客户端、窗口和面板。
这意味着你可以运行一个进程,从系统断开,然后在之后从不同主机远程登陆到系统重新连接到正在工作的进程:通常是SSH运行在远程系统,启动 tmux
,在tmux会话中工作。任何时候都可以断开网络连接,随时可以重新连接tmux会话并恢复之前工作环境。
备注
另一个常用的终端多路器是 screen
,在Red Hat Enterprise Linux 7及之前版本包含了 screen
,但是从 RHEL 8/CentOS 8开始, tmux
取代了 screen
,原因是screen代码台陈旧,Red Hat已经不再维护screen软件包,并且 tmux
代码代码更好并且支持新功能。 - The ‘screen’ package is deprecated and not included in RHEL8.0.0.
安装tmux¶
debian/ubuntu:
sudo apt install tmux
arch linux:
sudo pacman -Sy tmux
源代码安装:
git clone https://https://github.com/tmux/ cd tmux sh autogen.sh ./configure && make -j4 sudo make install
在macOS平台著名的终端应用 iTerm2 就集成了tmux
使用tmux¶
tmux给桌面,特别是远程桌面提供了非常好的连续工作机制。可以随时断开一个会话,当重新连接到同一个会话,所有的工作环境都恢复如初,就好像一直运行的样子,特别适合远程服务器维护。
首次启动tmux,会看到屏幕下方有一个绿色的条带,提供了使用信息,例如会话编号,谁在激活pane,tmux服务器的主机名以及日期时间。
tmux的 前导键
是 ctrl-b
,也就是按下 ctrl-b
就进入发送命令模式。
会话¶
检查系统存在的会话:
tmux ls
显示举例:
0: 3 windows (created Thu Apr 22 08:20:10 2021) (attached)
连接到最近创建的会话(
a
表示attach
):tmux a
备注
和 screen
不同,即使之前有会话连接着,你的新attach依然能够连接会话
可以重新命名会话(以下案例将会话0重命名成works):
tmux rename-session -t 0 works
可以用快捷键重命名当前会话: ctrl-b
加上 $
如果系统有多个会话,则使用参数
-t
来指定连接到哪个会话:tmux a -t works
断开当前会话快捷键
ctrl-b
加上d
列出当前会话所有窗口
ctrl-b
加上s
你可以创建多个会话,每个会话使用参数
-s
来指定会话名字:tmux new -s "database upgrade" tmux new -s "coding"
备注
一定要使用小写的 -s
参数创建新会话名字,如果使用大写 -S
或者忘记 new
命令(直接使用 tmux -s "coding"
)则会导致后续找不到这个会话 tmux ls
显示不出来也无法重新连接,非常蒙圈。
然后可以连接到指定的
database upgrade
会话:tmux attach -t "database upgrade"
屏幕滚动方法和
screen
类似,使用ctrl+b
,然后按[
进入滚动模式。之后就可以使用方向键,Page Up
或Page Down
进行屏幕滚动
窗口¶
在 tmux
会话中可以创建多个窗口(并且窗口还可以分割),这样多个窗口就提供了多个工作桌面。
使用
ctrl-b
然后w
可以列出当前会话(sesion)中所有的窗口(window)
分割窗口(pane)¶
按下
ctrl-b
加上"
就把窗口分为上下两部分 (垂直分割)按下
ctrl-b
加上%
就是把窗口分为左右两部分 (horizontally, 水平分割)调整pane大小的方法:
ctrl-b
然后alt-方向键
按照方向调整pane大小如果在按住
alt
键时候快速按方向键,则可以连续调整
终端切换:在单个终端会话中,我们现在有3个终端
按下
ctrl-b
加上方向键
我们可以切换不同终端按下
ctrl-b
加上;
切换上一个窗格按下
ctrl-b
加上o
切换下一个窗格按下
ctrl-b
加上{
当前窗格与上一个窗格交换位置按下
ctrl-b
加上}
当前窗格与下一个窗格交换位置按下
ctrl+b
加上ctrl+o
:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格。按下
ctrl+b
加上alt+o
:所有窗格向后移动一个位置,最后一个窗格变成第一个窗格。按下
ctrl+b
加上x
:关闭当前窗格。按下
ctrl+b
加上!
:将当前窗格拆分为一个独立窗口。按下
ctrl+b
加上z
:当前窗格全屏显示,再使用一次会变回原来大小。
断开会话使用
ctrl-b
加上d
杀掉会话¶
使用
kill-session
可以杀掉指定会话:tmux kill-session -t "database upgrade"
帮助¶
结合 ctrl-b
和 ?
可以查看帮助
tmux-config¶
色彩配置¶
为了能够区分出远程和本地的tmux,可以在状态条上采用不同的色彩
修订 ~/.tmux.conf
配置:
set -g default-terminal "screen-256color"
set -g status-bg blue
set -g status-fg black
此外,通过以下命令可以获取所有终端支持的色彩配置:
#!/usr/bin/env bash
for i in {0..255} ; do
printf "\x1b[38;5;${i}mcolour${i}\n"
done
案例¶
samoshkin/tmux-config 提供了一个超级强大的tmux配置:

安装简便:
git clone https://github.com/samoshkin/tmux-config.git ./tmux-config/install.sh
并且结合macOS上的iTerm2使用非常方便。
参考¶
Comprehensive Tmux Tutorial for Beginners with a Cheat Sheet 这篇文档写得非常生动,对于学习可以参考该文档