认识tmux
一般情况下,当你需要在远程服务器上同时进行多项任务,我们可以在命令后面加上
&
来同时运行多条命令。但是当你想要同时监视每个任务的时候,这就不可行了。又或者可以开多个窗口,来分别执行任务,但是对于不同的窗口,还需要重新SSH连接到远程服务器,大大降低了工作效率,当你桌面上窗口太多的时候,也可能会在找哪个窗口进行哪个任务上浪费大量时间。
什么是tmux?
tmux是一个开源且功能非常强大的终端多路复用器(terminal multiplexer),用于类Unix操作系统。它允许在一个terminal里同时开启多个会话,同时能够让你很方便地在多任务间进行切换。
tmux的主要功能
- 对终端实现分屏功能和便捷的多任务切换。
- 允许断开terminal之后,继续后台运行执行中的进程。
tmux的安装
# Ubuntu
$ sudo apt update
$ sudo apt install tmux
# Mac
$ brew install tmux
tmux的结构
一个tmux里可以包含多个会话sessions
,一个session可以有多个窗口windows
,一个window可以有多个窗格panes
。
所有的tmux命令都以Ctrl + b
为前缀(特指进入tmux后的所有指令,在terminal里的指令不需要)。具体操作是先按下Ctrl + b
后手指松开,然后再按其他键。在下面的表示中将其表示为Ctrl + b
<key>
。
tmux指令
$ tmux
可以新建一个session,其中包含一个window,该window中包含一个pane,pane里打开了一个shell对话框。
tmux创建的session的名字默认都是按数字排序,所以可以在进入tmux时对session自定义名字。
$ tmux new -s [session_name]
Ctrl + b
d
在tmux里,如果需要重新退回terminal,可输入上面的命令。其中d表示detaching,运行后并不会真正关闭session,而是将session挂起,在tmux session里面的程序还是会在后台继续运行。
如果想要重新连接刚才退出的tmux session,可以输入下面命令:
$ tmux attach
$ tmux a
如果想连接到特定的session:
$ tmux attach -t [session_name]
#也可以将attach简写成a
$ tmux a -t [session-name]
注意:如果这时输入tmux,会默认重新开启一个新的session。
在session里时,Ctrl + b
+ $
对当前session进行重命名。
在terminal里,可直接对某个特定session重命名:
tmux rename-session -t 0 [session_new_name]
Ctrl + b
+ s
可视化选择任意session,同时,按下左右键可以对当前session的windows进行展开和收起,以及对某个windows的panes进行展开并选择某一pane。
如果不知道当前存在哪些session,可以输入下方命令查看:
$ tmux ls
如果要关闭某个会话:
# 使用会话编号或具体名字
$ tmux kill-session -t 0
$ tmux kill-session -t <session-name>
在tmux ls
中可以看到,第一列显示的是session名字,默认创建时名字是从0开始的整数,然后表示当前session里有几个windows。创建一个session的时候,默认只有一个窗口。
在某个session里时,
Ctrl + b
c
可以创建新的window。
Ctrl+b
0
可以切换到0号window。
Ctrl + b
p
切换到上一个window。
Ctrl + b
n
切换到下一个window。
Ctrl+b
,
对当前window进行重命名。
Ctrl+b
w
可以从window列表里选择window,该显示结果与Ctrl + b
+ s
一样。
在新建的一个window里,默认只有一个pane,但是可以对其进行切分:
Ctrl+b
%
可以将当前pane分成左右两个panes。
Ctrl+b
"
可以将当前pane分成上下两个panes。
Ctrl+b
o
可以移动到下一个pane里。
Ctrl+b
;
可以切换到上一个pane里。
Ctrl + b
<arrow key>
也可以直接通过上下左右箭头来切换panes。
Ctrl+b
x
关闭当前所在pane,这种关闭,会在关闭前进行确认。
Ctrl + b
z
可以将当前的pane进行放大/缩小。
Ctrl + d
或者 直接输入exit
:直接关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭当前window;直至所有window均已关闭,则自动关闭当前session。
tmux窗口: