1.什么是Tmux
Tmux是一个终端复用软件 Termial mutiplexer,用来分离terminal和session。
我们经常遇到这样的场景,我们开启了一个Terminal A,对应Session A,在A中启动了一系列非守护进程,由于这些进程是A的子进程,当我们关闭Terminal A,也就是Session A,大部分进程将会同样被关闭,也就是关闭窗口的同时,窗口打开的进程也被关闭了。
我们可以借助Tmux将Session和Terminal分开来解决这个问题。
Tmux允许在一个窗口中开启多个Session,自由地在Session之间切换,并且退出窗口不会关闭这些Session。
2.使用tmux
2.1安装Tmux
Centos
:
yum install tmux
macOS
:
brew install tmux
2.2 启动、进入、分离与退出Session
启动tmux
//开启一个编号自动递增的session
tmux
//开启一个名为my_name的session
tmux new -s my_name
两个命令的区别是第一个命令默认生成从0开始的数字编号session
第二个在创建session时指定名称,方便回到指定session
可以通过命令
tmux ls
来查看系统中后台运行的session名,根据session名来进入指定session
分离session
例如我们创建了一个名为back
的session后就可以在里面操作,执行了一个nohup
后台任务 ,操作完成后我们想退出这个session但是不关闭它,就可以用分离(detach
)来将窗口分离,可以使用Ctrl + b + d
或者
tmux detach
离开back
而不影响back
,我们稍后还可以回到这个session,继续之前的任务
回到session
刚刚我们离开了session back
我们使用Terminal处理完其它事情之后,可以回到刚刚的session,还记得我们之前的命令吗tmux ls
查看一下运行在后台的session
可以看到我们的back session还在健康茁壮的运行着
使用
tmux attach -t name
来回到名为name
的session
退出Session
tmux detach
只会让当前session后台运行,如果我们确实需要退出某个session
可以直接exit
或者
tmux kill-session -t name
重命名Session
之前使用了默认数字编号或者session起名想换一个,可以使用
tmux rename-session -t formername newname
来修改session名称
2.3Tmux窗口扩展和切换
前面我们都是每个session内只用一个窗口(pane
),我们可以在一个session内使用多个窗口来并行查看多个任务
垂直划分
划分为上下窗口
tmux split-window
水平划分
划分为左右窗口
tmux split-window -h
在窗口间移动光标
tmux select-pane
上下移动
tmux select-pane -U
tmux select-pane -D
左右移动
tmux select-pane -L
tmux select-pane -R
交换窗格位置。
tmux swap-pane
命令用来
# 当前窗格上移
$tmux swap-pane -U
# 当前窗格下移
tmux swap-pane -D
3.常用操作
3.1经典场景
-
- ssh或mosh(墙裂推荐)登录远程主机
-
- tmux新建或者attach到原来的工作session
-
- 工作
-
- 完成工作后detach下班
-
- 第二天早上回来重复
1
即可还原昨天的工作场景,延续workflow
- 第二天早上回来重复
3.2经典快捷键
Ctrl+b %:划分左右两个窗格。
Ctrl+b ":划分上下两个窗格。
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 Ctrl+:按箭头方向调整窗格大小。
Ctrl+b q:显示窗格编号。
4.其它
下面是一些其他命令。
# 列出所有快捷键,及其对应的 Tmux 命令
$ tmux list-keys
# 列出所有 Tmux 命令及其参数
$ tmux list-commands
# 列出当前所有 Tmux 会话的信息
$ tmux info
# 重新加载当前的 Tmux 配置
$ tmux source-file ~/.tmux.conf