Tmux
是一个终端复用器(terminal multiplexer
),非常有用,属于常用的开发工具。
https://blog.csdn.net/matafeiyanll/article/details/109788874
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH
登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH
会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。
Tmux
就是会话与窗口的"解绑"工具,将它们彻底分离。
1、它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
2、它可以让新窗口"接入"已经存在的会话。
3、它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
4、它支持窗口任意的垂直和水平拆分。
类似的终端复用器还有 GNU Screen
。Tmux
与它功能相似,但是更易用,也更强大。
tmux [-2CluvV] [-c shell-command] [-f file] [-L socket-name] [-S socket-path] [command [flags]]
Tmux
是一种终端多路复用器:它允许从一个屏幕上创建、访问和控制多个终端。Tmux
可以从屏幕上分离出来,在后台继续运行,然后再重新连接。
当 tmux
启动时,它会创建一个带有单个窗口的新会话,并将其显示在屏幕上。屏幕底部的状态行显示当前会话的信息,用于输入交互式命令。
会话是 tmux
管理下的伪终端的单一集合。每个会话都有一个或多个窗口链接到它。一个窗口占据整个屏幕,可以被分割成矩形窗格,每个窗格都是一个单独的伪终端(pty
(4)手册页记录了伪终端的技术细节)。任意数量的 tmux
实例都可以连接到同一个会话,并且同一会话中可能存在任意数量的窗口。一旦所有会话被杀死,tmux
退出。
每个会话都是持久的,并将在意外断开连接(例如ssh
(1)连接超时)或有意分离(使用 ' C-b - d '
键击)时存活。Tmux
可以使用以下方法重新连接:
tmux attach
在 tmux
中,一个会话由客户机显示在屏幕上,所有会话都由一个服务器管理。服务器和每个客户端是独立的进程,它们通过 /tmp
中的套接字进行通信。
选项如下:
-2
:强制 tmux
假定终端支持 256
种颜色。-C
:以控制模式启动(请参阅控制模式一节)。给定两次(-CC
)禁用回声。-c shell-command
:使用默认 shell
执行 shell-command
。如果有必要,将启动 tmux
服务器以检索默认 shell
选项。当使用 tmux
作为登录 shell
时,此选项是为了与sh
(1)兼容。-f file
:请指定可选的配置文件。默认情况下,tmux
从 /etc/tmux.conf
加载系统配置文件,如果存在,然后在 ~/.tmux.conf
查找用户配置文件。配置文件是一组 tmux
命令,这些命令在服务器第一次启动时按顺序执行。当服务器进程启动时,Tmux
加载一次配置文件。source-file
命令可能用于以后加载一个文件。-L socket-name
:tmux
将服务器套接字存储在 TMUX_TMPDIR
下的目录中,如果未设置则将其存储在 /tmp
下。默认的套接字名为 default
。该选项允许指定不同的套接字名称,允许运行多个独立的 tmux
服务器。与 -S
不同,不需要完整路径:套接字都是在同一个目录中创建的。-l
:表现为登录 shell
。此标志目前没有效果,是为了在使用 tmux
作为登录 shell
时与其他 shell
兼容。-S socket-path
:指定服务器套接字的完整替代路径。如果指定了 -S
,则不使用默认套接字目录,并且忽略任何-L
标志。-u
:启动时,tmux
查找 LC_ALL
、LC_CTYPE
和 LANG
环境变量:如果第一个找到的变量包含 'UTF-8'
,则假定终端支持 UTF-8
。这并不总是正确的:-u
标志显式地通知 tmux
支持 UTF-8
。注意 tmux
本身总是接受 UTF-8
;它控制是否将 UTF-8
字符发送到它正在运行的终端(如果不是,它们将被 '_'
替换)。-v
:要求详细的日志记录。日志消息将保存在当前目录下的 tmux-client-PID.log
和 tmux-server-PID.log
文件中,其中 PID
为服务器或客户端进程的 PID
。如果两次指定 -v
,则生成一个额外的 tmux-out-pid.log
文件,其中包含 tmux
写入终端的所有内容的副本。-V
:报告 tmux
版本。command [flags]
:这指定用于控制 tmux
的一组命令中的一个,如下面的小节所述。如果没有指定命令,则假定使用 new-session
命令。tmux
可以通过使用前缀键 'C-b' (Ctrl-b)
的组合键从连接的客户端控制,默认情况下,后面跟着一个命令键。
默认的命令键绑定是:
C-b
:将前缀密钥 (C-b)
发送到应用程序。C-o
:向前旋转当前窗口中的窗格。C-z
:挂起 tmux
客户端。!
:把当前的窗格从窗口打碎。"
:将当前窗格拆分为两个,顶部和底部。#
:列出所有的粘贴缓冲区。$
:重命名当前会话。%
:将当前窗格分为左窗格和右窗格。&
:关闭当前窗口。'
:提示要选择的窗口索引。(
:将附加的客户端切换到前一个会话。)
:将连接的客户端切换到下一个会话。,
:重命名当前窗口。-
:删除最近复制的文本缓冲区。.
:提示移动当前窗口的索引。0~9
:选择窗口 0~9
。:
:输入 tmux
命令提示符。;
:移动到先前活动的窗格。=
:从列表中选择要交互粘贴的缓冲区。?
:列出所有键绑定。D
:选择要分离的客户机。L
:将连接的客户端切换回上一个会话。[
:进入复制模式,复制文本或查看历史记录。]
:粘贴最近复制的文本缓冲区。c
:创建一个新窗口。d
:分离当前客户端。f
:提示在打开的窗口中搜索文本。i
:显示当前窗口的一些信息。l
:移动到先前选择的窗口。n
:切换到下一个窗口。o
:选择当前窗口中的下一个窗格。p
:切换到前一个窗口。q
:简要显示窗格索引。r
:强制重绘附加的客户端。m
:标记当前窗格(参见 select-pane -m
)。M
:清除已标记的窗格。s
:以交互方式为附加的客户机选择一个新会话。t
:显示时间。w
:交互式地选择当前窗口。x
:关闭当前窗格。z
:切换当前窗格的缩放状态。{
:将当前窗格与前一个窗格交换。}
:将当前窗格与下一个窗格交换。~
:显示来自 tmux
的以前的消息(如果有的话)。Page Up
:进入复制模式,向上滚动一页。Up
、Down
、Left
、Right
:更改到当前窗格的上面、下面、左边或右边。M-1~M-5
:按五种预设布局之一排列窗格:均匀水平、均匀垂直、主水平、主垂直或平铺。Space
:在下一个预设布局中排列当前窗口。M-n
:移动到下一个带有铃铛或活动标记的窗口。M-o
:向后旋转当前窗口中的窗格。M-p
:移动到带有铃铛或活动标记的前一个窗口。C-Up
、C-Down
、C-Left
、C-Right
:在一个单元格的步骤中调整当前窗格的大小。M-Up
、M-Down
、M-Left
、M-Right
:按五个单元格的步骤调整当前窗格的大小。注:通过 man tmux
查看帮助。
1、新建会话
tmux new -s <session-name>
第一个启动的 Tmux
窗口,编号是0
,第二个窗口的编号是 1
,以此类推。使用编号区分会话,不太直观,更好的方法是为会话起名。
2、分离会话
在 Tmux
窗口中,按下 Ctrl+b d
或者输入 tmux detach
命令,就会将当前会话与窗口分离。
tmux detach
3、查看 Tmux
会话
tmux ls
# or
tmux list-session
4、接入会话
tmux attach
命令用于重新接入某个已存在的会话。
# 使用会话编号
tmux attach -t 0
# 使用会话名称
tmux attach -t <session-name>
5、杀死会话
tmux kill-session
命令用于杀死某个会话。
# 使用会话编号
tmux kill-session -t 0
# 使用会话名称
tmux kill-session -t <session-name>
6、切换会话
tmux switch
命令用于切换会话。
# 使用会话编号
tmux switch -t 0
# 使用会话名称
tmux switch -t <session-name>
7、重命名会话
tmux rename-session
命令用于重命名会话。
tmux rename-session -t 0 <new-name>
1、划分窗格
# 划分上下两个窗格
tmux split-window
# 划分左右两个窗格
tmux split-window -h
2、移动光标
tmux select-pane
命令用来移动光标位置。
# 光标切换到上方窗格
tmux select-pane -U
# 光标切换到下方窗格
tmux select-pane -D
# 光标切换到左边窗格
tmux select-pane -L
# 光标切换到右边窗格
tmux select-pane -R
3、交换窗格位置
tmux swap-pane
命令用来交换窗格位置。
# 当前窗格上移
tmux swap-pane -U
# 当前窗格下移
tmux swap-pane -D
4、窗格快捷键
Ctrl+b %:划分左右两个窗格。
Ctrl+b ":划分上下两个窗格。
Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。
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 Ctrl+<arrow key>:按箭头方向调整窗格大小。
Ctrl+b q:显示窗格编号。
1、新建窗口
tmux new-window
命令用来创建新窗口。
tmux new-window
# 新建一个指定名称的窗口
tmux new-window -n <window-name>
2、切换窗口
tmux select-window
命令用来切换窗口。
# 切换到指定编号的窗口
tmux select-window -t <window-number>
# 切换到指定名称的窗口
tmux select-window -t <window-name>
3、重命名窗口
tmux rename-window
命令用于为当前窗口起名(或重命名)。
tmux rename-window <new-name>
4、窗口快捷键
Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
Ctrl+b n:切换到下一个窗口。
Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号。
Ctrl+b w:从列表中选择窗口。
Ctrl+b ,:窗口重命名。