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 ,:窗口重命名。