Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具。说来惭愧,因为最近偶然才接触这个工具,所以不是很熟悉。不过被他会话共享的功能深深吸引,所以话不多说,直接上菜(有图有真相)。
先是工具的安装,由于我用的是 centOS 的 Linux 虚拟机,所以安装是及其简单的,直接 yum install tmux 就好了,安装完成以后,使用命令创建一个会话,进入后查看会话编号,Windows 可以在命令行通过 ssh 连接到虚拟机系统,并根据查看到的会话标号同时使用 tmux attach 命令接入会话。
多用户相同账号会话共享
# Linux command line
[root@master ~]# yum install tmux
# balabala
# .......安装过程输出,此处省略.......
[root@master ~]# tmux
# 进入了一个会话
[root@master ~]# tmux ls
0: 1 windows (created Thu Jul 23 22:35:17 2020) [156x20] (attached)
[root@master ~]#
[0] 0:root@master:~*
# Windows command line
C:\Windows\System32>ssh [email protected]
[email protected]'s password:
Last login: Thu Jul 23 22:24:00 2020 from 192.168.128.1
[root@master ~]#
[root@master ~]# tmux attach -t 0
然后就是见证奇迹的时候了,Windows 命令行和 XShell 共享了一个会话窗口,两边都可以操作,而且操作对双方可见,是不是很神奇?而且我们能看到 XShell 对应的窗口的右边和下边有很多点点,相信大家都知道是什么原因造成的了,因为是会话共享,会话窗口的比例大小肯定要保持一致才可以,而 Xhell 窗口的空间更大,为了适配 Windows 端的会话窗口,多出来的地方就变成点点啦!整个过程当中,即使Windows命令行被异常关闭,当它再次远程连接进入会话的时候,还是可以看到这儿的 “Hello World, I am Looking.”。
当然,主动使用 exit 退出的不算。如果主动使用 exit 退出,大家就都退出会话窗口了。
多用户不同账号会话共享
不同账号实现会话的稍微麻烦一点,具体操作可参考这篇文章 https://blog.csdn.net/easylife206/article/details/104230710。
# root 操作
[root@master ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@master ~]# id looking
uid=1001(looking) gid=1001(looking) groups=1001(looking)
# 自己通过 -S 参数指定一个 Socket 文件来创建 Tmux Session,并进入会话
[root@master ~]# tmux -S /tmp/shared new-session -s shared
# 添加 root 和 looking 账户为同一组(root添加到附加组)
[root@master ~]# usermod -a -G looking root
[root@master ~]# usermod -a -G looking looking
# 修改 /tmp/shared 的群体的使用者为 looking 组
[root@master ~]# chown :looking /tmp/shared
# 查看用户 root ,发现已添加到了附加组 looking,这个时候 looking 用户就可以加入当前会话了
[root@master ~]# id root
uid=0(root) gid=0(root) groups=0(root),1001(looking)
# looking 操作
[looking@master ~]$ tmux -S /tmp/shared attach-session -t shared
会话管理
会话分离
[root@master ~]# tmux detach
[detached]
[looking@master ~]$
使用 tmux detach 命令进行会话分离(可再次进入),下图是 looking 用户分离出去以后两边的窗口对比(和 exit 不一样):
会话创建、查看和接入
[root@master ~]# tmux new -s test
[root@master ~]# tmux ls
test: 1 windows (created Sat Jul 25 23:16:54 2020) [86x18] (attached)
[root@master ~]# tmux attach -t test
会话杀死
# 在会话内外均可操作,结果当然是被迫退出会话
# -t target-session -t 表示目标会话
[root@master ~]# tmux kill-session -t test
会话切换
创建两个会话
[root@master ~]# tmux new -s test
[root@master ~]# tmux new -s test2
左右终端分别进入对应两个会话
[root@master ~]# tmux attach -t test
[root@master ~]# tmux attach -t test2
# 左边终端使用会话名称切换会话
[root@master ~]# tmux switch -t test2
# # 使用会话编号
# [root@master ~]# tmux switch -t 0
会话重命名
[root@master ~]# tmux rename-session -t test test2
窗格管理
窗格划分
# 垂直划分上下两个窗格 -v vertical
[root@master ~]# tmux split-window -v
# 水平划分左右两个窗格 -h horizontal │
[root@master ~]# tmux split-window -h
光标移动
# 光标切换到上方窗格
[root@master ~]# tmux select-pane -U
# 光标切换到下方窗格
[root@master ~]# tmux select-pane -D
# 光标切换到左边窗格
[root@master ~]# tmux select-pane -L
# 光标切换到右边窗格
[root@master ~]# tmux select-pane -R
窗格移动
# 当前窗格上移
[root@master ~]# tmux swap-pane -U
# 当前窗格下移
[root@master ~]# tmux swap-pane -D
窗口管理
窗口创建
[root@master ~]# tmux new-window
# 新建一个指定名称的窗口
[root@master ~]# tmux new-window -n <window-name
窗口切换
# 切换到指定编号的窗口
[root@master ~]# tmux select-window -t <window-number>
# 切换到指定名称的窗口
[root@master ~]# tmux select-window -t <window-name>
窗口重命名
[root@master ~]# tmux rename-window <new-name>
窗口杀死
[root@master ~]# tmux kill-window -t <window-number>
快捷键
快捷键使用
Tmux的快捷键需要使用 Ctrl+b 激活控制台后方可使用,比如快捷键 Ctrl+b d 的
具体使用方法为:先同时(几乎同时,也就是 Ctrl 和 b 摁下的时间间隔不能太长,否则会激活控制台失败——我真是太操心了)摁住 Ctrl 和 b,然后松开 Ctrl 和 b (千万记住是两个键都要松开,不是只松开 Ctrl 或只松开 b),然后再摁下 d,于是成功分离当前会话,其他快捷键使用方法类似。
会话快捷键
Ctrl+b d
:分离当前会话(等同于命令:tmux detach)。Ctrl+b s
:列出所有会话(类似于命令:tmux ls)。
Ctrl+b $
:重命名当前会话(类似于命令:tmux rename-session -t test2 test3)。
窗格快捷键
Ctrl+b %
:划分左右两个窗格(等同于命令:tmux split-window -h)。
Ctrl+b "
:划分上下两个窗格(等同于命令:tmux split-window -v)。
Ctrl+b <arrow key>
:光标切换到其他窗格(等同于命令:tmux select-pane -[U/D/L/R])。<arrow key>
是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓
。
Ctrl+b ;
:光标切换到上一个窗格(类似于命令:tmux select-pane -U)。Ctrl+b o
:光标切换到下一个窗格(类似于命令:tmux select-pane -D)。Ctrl+b {
:当前窗格左移(类似于命令:tmux swap-pane -U)。Ctrl+b }
:当前窗格右移(类似于命令:tmux swap-pane -D)。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秒后取消显示)。
窗口快捷键
Ctrl+b c
:创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b p
:切换到上一个窗口(按照状态栏上的顺序)。
Ctrl+b n
:切换到下一个窗口。
Ctrl+b <number>
:切换到指定编号的窗口,其中的<number>
是状态栏上的窗口编号。Ctrl+b w
:从列表中选择窗口。
Ctrl+b ,
:窗口重命名。
Ctrl+b &
:窗口杀死。